iPhone XMPP应用程序运行的背景

我创build了一个使用XMPP框架的聊天应用程序。当我退出应用程序(进入后台模式),我想接收聊天消息,并且还需要显示图标徽章…我该怎么做?

你确实可以在iOS4的后台运行一个基于XMPP框架的应用程序,将其称为VoIP应用程序。 ( 但是苹果公司会拒绝它从App Store,除非它也确实做VoIP )。

您需要在您的应用的(appname)-info.plist文件中设置VoIP标志,然后进入

(void)xmppStream:(XMPPStream *)sender socketWillConnect:(AsyncSocket *)socket 

您需要设置套接字stream标志以包含kCFStreamNetworkServiceTypeVoIP

  CFReadStreamSetProperty([socket getCFReadStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); CFWriteStreamSetProperty([socket getCFWriteStream], kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP); 

然后,当新的XMPP消息到达时,您的应用程序将被简单地唤醒。 在你的正常

 (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message 

处理程序,如果你是后台(你可以通过UIApplicationDidEnterBackgroundNotificationUIApplicationWillEnterForegroundNotification来跟踪背景状态),你会想为消息创build一个本地通知。 本地通知处理程序可以设置应用程序徽章号码等(就像推送通知一样)。

编辑

更新版本的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程序,播放音乐的程序以及跟踪用户位置的程序。 如果你没有做这些合法的事情,那么你只能进行十分钟的后台操作。 请注意,苹果将拒绝尝试使用愚蠢技巧的应用,比如播放“空”声以保持应用的正常运行。

你可以在后台find运行任务的信息: http : //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

我猜想你的其他select是让聊天程序通过联系服务器来运行,并在用户离线时让服务器排队响应,然后在下一次login时发送。 我不是一个networking程序员,我不知道这是多么的可行,但是我认为如果你只是提供文本聊天的话,这是唯一的办法。 更好的select是使用上面的指南来启用你的应用VOIP。

编辑从iOS 5.0版本开始,也可以获得注册为Newsstand应用程序的应用程序,以便在下载时下载信息,另外还有一些其他时髦function(也仅限于报亭)。

-灰

在最新的XMPP框架中,您不需要修改框架文件。

只要这样做:1.将此添加到您的连接方法

 #if !TARGET_IPHONE_SIMULATOR { self.xmppStream.enableBackgroundingOnSocket = YES; } #endif 

2.将voip密钥添加到您的信息plist文件中:

在这里输入图像说明