如何保持iphone的ios的xmpp连接,而在后台?

iPhone的XMPPFrameworkfunction强大。 我已经启动并运行了,但是如何在后台保持连接超过10分钟? 我将不胜感激更多的文件/如何做到这一点。

所以这个用例很简单而且很常见:Joe在线和在iPhone聊天应用程序中。 他离开聊天应用程序,去Safari浏览器,玩游戏,stream动电影,并做了其他的东西3小时(或更多)。 乔想在这段时间内不断收到消息。

示例应用程序允许Joe在后台接收本地通知,但似乎只有10分钟。 这是相关的代码(我认为)。 谢谢!

为了帮助其他人,甚至到了这一步,你需要将xmppstream属性enableBackgroundingSocket设置为YES(在你应该复制的iphoneXMPP示例项目中为你完成)以及appname-info.plist(即iosChat- info-plist)文件,你需要添加一个新的键/值对。 你应该右键点击“添加行”。 你应该select关键的“所需的背景模式”,然后input“voip”。 按下Enter键后,Xcode会检测到您的意思是“应用程序提供IP语音服务”。 这让你在后台打开聊天应用10分钟(我想)。 但我们无限期地想要,我怀疑答案在于下面的方法。 我只是应该“重新连接”在这个方法或东西,例如,[自我连接](我有一个连接方法)?

- (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. }]; }} 

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

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

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