iphone XMPP App运行背景

时间:2011-03-10 09:18:24

标签: iphone objective-c cocoa-touch ios xmpp

我使用XMPP框架创建了一个聊天应用程序..当我退出应用程序(进入后台模式)时,我想收到聊天消息..还需要显示图标徽章......我该怎么办?< / p>

3 个答案:

答案 0 :(得分:11)

您确实可以通过将其称为VoIP应用程序在iOS4的后台运行基于XMPP Framework的应用程序。 (然而 Apple将拒绝从App Store拒绝它,除非它也真正做到了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

处理程序,如果您是背景的话,您可能希望为邮件创建本地通知(您可以通过UIApplicationDidEnterBackgroundNotificationUIApplicationWillEnterForegroundNotification跟踪背景状态)。本地通知处理程序可以设置应用程序徽章编号等(就像您推送通知一样)。

修改

新版本的XMPP Framework(特别是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];
    }];
}

答案 1 :(得分:6)

有限数量的程序可以在后台无限制地运行,这些程序是VOIP程序,播放音乐的程序,以及跟踪用户位置的程序。如果你没有合法地做任何这些,那么你只能进行十分钟的背景操作。请注意,Apple会拒绝尝试使用愚蠢技巧的应用程序,例如播放“空”声音以保持应用程序正常运行。

您可以在此处找到有关正在运行的任务的信息: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

我猜的另一个选择是让聊天程序通过联系服务器来运行,并在用户离线时让该服务器队列响应,然后在他们下次登录时提供它们。我自己并不是一个网络程序员,我不知道这是多么可行,但我认为如果你只提供文字聊天,这是无限期地做到这一点的唯一方法。更好的选择是使用上面的指南启用应用程序VOIP。

EDIT 自iOS 5.0发布以来,还可以将注册为报亭应用程序的应用程序在后台运行时下载信息,以及其他一些仅限报亭的时髦功能。 / p>

-Ash

答案 2 :(得分:5)

在最新的XMPP Framework中,您无需修改​​框架文件。

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

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

2。将voip密钥添加到info plist文件中:

enter image description here