2011-11-24 90 views
2

XMPPFramework for iPhone功能强大。我已经启动并运行了,但是如何在后台保持连接超过10分钟?我将不胜感激一些关于如何做到这一点的文档/方法。如何让iphone ios xmpp连接在后台保持活跃状态​​?

所以这个用例很简单和常用:Joe在线并在iPhone聊天应用程序中。他离开聊天应用程序,前往Safari浏览器,玩游戏,播放电影,并做其他事情3小时(或更多)。乔想在这段时间内继续接收消息。

示例应用程序允许Joe在后台接收本地通知,但似乎只有10分钟。这是相关的代码(我认为)。谢谢!为了帮助其他人,甚至到了这一步,您需要将xmppstream属性enableBackgroundingSocket设置为YES(在您应该复制的iphoneXMPP示例项目中为您完成)以及appname-info.plist(即,iosChat-info-plist)文件,您需要添加一个新的键/值对。你应该右键点击某处并“添加行”。你应该选择钥匙“所需的背景模式”,然后输入“voip”。按下Enter键后,Xcode会检测到您的意思是“应用程序提供IP语音服务”。这让你在后台打开聊天应用10分钟(我想)。但我们无限期地需要,我怀疑答案在于下面的方法。我是否应该在这个方法中“重新连接”,或者是什么,例如[self connect](我有一个连接方法)?

- (void)applicationDidEnterBackground:(UIApplication *)application{ 

DDLogVerbose(@"%@: %@", THIS_FILE, THIS_METHOD); 

if ([application respondsToSelector:@selector(setKeepAliveTimeout:handler:)]) 
{ 
    [application setKeepAliveTimeout:600 handler:^{ 

     DDLogVerbose(@"KeepAliveHandler"); 

     // Do other keep alive stuff here. 
    }]; 
}} 
+0

嗨,你怎么能够做到这一点...? –

回答

3

10分钟是iOS允许你保持连接的大致时间。你可以 也看看[app beginBackgroundTaskWithExpirationHandler],这将允许你 要求更多的时间来完成一项任务。为了保持100%连接,您需要将 添加到info.plist(即UIBackgroundModes)的voip,音频或位置标记。

除非您添加其中一个标签,否则背景将无法使用。此外,添加标签 将允许您保持连接状态,但如果您要提交到App Store,则实际标签必须有效。如果没有真正的用例,Apple会拒绝该应用程序。

为了在没有标签的情况下保持较长的连接时间,您需要使用某种类型的服务器,它维护连接,然后使用推送通知来传递消息。

+0

你能详细说说你的最后一点吗?你如何使用外部服务器保持连接活着? –

+0

iOS端的连接基本上没有了,但服务器和物理资源之间仍然存在连接。服务器正在保持与手机的连接。 – tjg184

相关问题