我使用XMPP框架创建了一款聊天应用程序,当我退出应用(进入后台模式)时,我希望能够接收到聊天消息,并显示图标徽章。请问如何实现这个功能?
我使用XMPP框架创建了一款聊天应用程序,当我退出应用(进入后台模式)时,我希望能够接收到聊天消息,并显示图标徽章。请问如何实现这个功能?
您确实可以通过将XMPP框架的应用程序称为VoIP应用程序,在iOS4中在后台运行它。(但是,如果这个应用程序不真正执行VoIP操作,那么苹果公司将拒绝其进入应用商店).
您需要在应用程序的(appname)-info.plist文件中设置VoIP标志,然后在应用程序委托中请求背景处理时间。
(void)xmppStream:(XMPPStream *)sender socketWillConnect:(AsyncSocket *)socket
你需要设置套接字流标志以包含kCFStreamNetworkServiceTypeVoIP
:
CFReadStreamSetProperty([socket getCFReadStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty([socket getCFWriteStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
然后,当有新的XMPP消息到达时,您的应用程序将被简要唤醒。在您的正常
(void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
如果您在后台运行,针对消息处理程序,您需要创建一个本地通知(您可以通过UIApplicationDidEnterBackgroundNotification
和UIApplicationWillEnterForegroundNotification
跟踪后台状态)。本地通知处理程序可以设置应用程序徽章数等(就像推送通知一样)。
编辑
XMPP框架的新版本(特别是GCDAsyncSocket)现在支持调用以使此过程更容易,因此您只需使用:
- (void)xmppStream:(XMPPStream *)sender socketWillConnect:(GCDAsyncSocket *)socket
{
// Tell the socket to stay around if the app goes to the background (only works on apps with the VoIP background flag set)
[socket performBlock:^{
[socket enableBackgroundingOnSocket];
}];
}
有一些程序可以在后台无限制地运行,这些包括VOIP程序、播放音乐的应用以及跟踪用户位置的应用。如果您没有合法地使用这些程序,则只能在后台运行10分钟。请注意,苹果将拒绝试图通过播放“空”声音来保持应用程序活动的应用。
您可以在此处找到关于在后台运行任务的信息: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
我想您的另一种选择是通过联系服务器使聊天程序运行,并在用户离线时将响应排队,然后在下次登录时传递它们。作为一个非网络程序员,我不知道这是否可行,但我认为这是您唯一可以无限期地进行文本聊天的方式。更好的选择是使用上面的指南使您的应用程序具备VOIP功能。
编辑从iOS 5.0开始,还可以将应用程序注册为新闻亭应用程序,让其在后台下载信息,以及其他一堆仅适用于新闻亭的功能。
-Ash
#if !TARGET_IPHONE_SIMULATOR
{
self.xmppStream.enableBackgroundingOnSocket = YES;
}
#endif
2. 在您的info.plist文件中添加voip密钥: