我为 iOS Application 开发了 socket.IO 。当应用程序运行时,应用程序可以毫无问题地发送和接收http socket数据。
我想做的就是,我想在应用程序进入后台时收到消息。
我认为appdelegate.h
的委托方法:
- (void)applicationDidEnterBackground:(UIApplication *)application
为它工作。但是我怎样才能在那个范围内实现我的功能呢?
我为 iOS Application 开发了 socket.IO 。当应用程序运行时,应用程序可以毫无问题地发送和接收http socket数据。
我想做的就是,我想在应用程序进入后台时收到消息。
我认为appdelegate.h
的委托方法:
- (void)applicationDidEnterBackground:(UIApplication *)application
为它工作。但是我怎样才能在那个范围内实现我的功能呢?
如果您使用 GCDAsyncSocket 进行套接字通信,即使您的应用程序在后台,您也会在以下方法中收到回调。
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
更新:也许我能够在我的套接字上接收消息,因为我的应用程序是 VoIP 并且苹果允许我的应用程序的后台活动。
在 iOS 中,除了 VOIP 应用程序、导航应用程序或音乐应用程序(除非您的应用程序是通过蓝牙与某些外部硬件连接的应用程序)之外,没有任何应用程序具有无限的后台工作权限。它们只能工作特定的时间,然后进入暂停状态。
现在,就您对 IM 应用程序的评论而言,他们使用 Apple 推送通知服务来通知用户任何重要事件,因此无论暂停时间如何,他们都会随时处理该数据。
例如,Facebook 通过推送通知让您知道任何传入消息。当您从中打开应用程序时,applicationDidFinishLaunchingWithOptions:
将调用您的 appDelegate 的方法,该方法的参数包含您的推送通知希望它具有的信息。您可以在此处查看Apple 网站上的推送通知服务文档。Ray Wenderlich上也有一个很好的教程。