iOS聊天应用程序如何在后台继续运行?

问题描述:

我一直为Android编码,现在我正在寻找扩展我的知识到iOS开发;所以我真的很新,请耐心等待。

我明白,只有应用的一小群被允许在后台无限期地运行下去。这些是VoIP,音乐播放器和位置跟踪应用程序。

我想写使用XMPP架构聊天应用。一切都很好,直到用户将应用程序置于后台,在这种情况下,应用程序将保持连接状态约十分钟,然后被系统杀死,因此用户将无法接收新消息。

我知道黑客以保持应用程序活着。诸如将其定义为info.plist文件中的音乐播放应用程序,然后无限期地播放一些空声音。但我也知道,苹果会在应用商店发布时拒绝该应用。

所以,通常情况下,怎么办其他应用程序做呢?其他聊天应用程序如何在后台保持活动状态以从服务器接收新消息?像Google环聊,IM +等应用程序?iOS聊天应用程序如何在后台继续运行?

+0

由于iOS的聊天是移动手机的核心功能,苹果公司运行一个后台程序所有的时间。 –

的iOS操作系统允许的东西存在,称为推送通知

存在着数百个在线教程的这教您如何实施通知代码,以及如何在收到此类消息时作出相应回应! Imagehttp://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1

请查看此链接了解有关推送通知的深入教程! http://maniacdev.com/2011/05/tutorial-ios-push-notification-services-for-beginners

虽然有一些黑客,你的应用程序可以要求更多的时间当它在背景(在一定程度上,并没有保证),这是推送通知的完美应用。

服务器告诉手机有一条消息,iOS会唤醒您的应用程序进行处理。

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction.html

我觉得这些应用程序使用推送通知,只是一旦应用程序被打开,从服务器负载的最后消息。

+0

我在我的应用程序中也做了同样的事情,名为ViteZite,我只是想知道这是否是最好的标准解决方案,其他人是否也这样做?或者任何想法,如消息类似whatsapp或Vibe的应用程序也在IOS上也一样。 – Khay

作为的iOS 7的有一个新的背景执行模式 - “取”为需要周期性地获取新的数据的应用程序。听起来你的情况会符合这个定义。

您可以找到iOS App Programming Guide信息 -

撷取含量少的金额定期

在iOS系统7及更高版本,从 网络定期检索内容可以要求一个应用程序系统为后台执行时间来检查 新内容。您启用Xcode 项目中功能选项卡的 后台模式部分的后台提取支持。 (您也可以通过在您的应用程序的Info.plist 文件中包含 UIBackgroundModes键来启用此支持。)在适当的时候,系统为支持此背景模式的应用程序提供后台执行时间 ,启动应用程序如果需要,可直接将 置入后台。应用程序对象调用其应用程序 委托人的 application:performFetchWithCompletionHandler:方法,让您知道执行时间何时可用。

您还可以使用推送通知,但是这需要一些服务器基础设施

理想情况下,他们并不真正在后台运行,但使用推送通知,如其他人所述。

但是有些聊天客户端似乎做了其他的事情:我已经验证(通过嗅探闲置iOS设备的流量)至少谷歌环聊,Facebook和Skype都在后台打开持久套接字,并定期发送流量以保持活力。

我怀疑他们正在使用VoIP的例外,苹果的其他严格的后台执行政策。 iOS允许“VoIP应用程序”在后台运行,并保持打开一个套接字以通知来电和消息。

也许他们也在使用iOS 7的新的“后台抓取”功能,但据我所知,它不允许持久套接字连接。

在后台运行的应用程序的能力有限。彻底阅读应用程序状态和多任务处理,决定如何最好地设计您的应用程序。聊天未被列为可以采用更宽松政策进行操作的特定例外之一。你将永远无法“永远保持[你的]应用程序在后台生活。”您也许能够利用本指南中描述的iOS 7功能,即定期获取少量内容。

iOS应用程序编程指南:应用国和多任务 https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOS ProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html