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

时间:2014-03-27 22:52:18

标签: ios background-process keep-alive livechat

我一直在为Android编码,现在我正在寻求将我的知识扩展到iOS开发;所以我对此非常陌生,请耐心等待。

据我所知,只有一小部分应用程序可以在后台无限期运行。这些是VoIP,音乐播放器和位置跟踪应用程序。

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

我知道黑客可以让应用程序保持活力。黑客,比如将它定义为info.plist文件中的音乐播放应用,然后无限播放一些空音。但是我也意识到Apple会在应用程序发布到App Store时拒绝该应用程序。

那么,通常,其他应用程序如何做到这一点?其他聊天应用程序如何在后台保持活动以从服务器接收新消息? Google Hangouts,IM +等应用程序?

6 个答案:

答案 0 :(得分:3)

我认为大多数这些应用都使用推送通知,只需在应用程序打开后立即从服务器加载最后的消息。

答案 1 :(得分:3)

iOS操作系统允许存在名为 PUSH NOTIFICATION

的内容

在线存在数百个教程,教您如何实现通知代码以及如何在收到此类消息时做出相应的响应! Image http://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

答案 2 :(得分:2)

理想情况下,它们并非真正在后台运行,而是使用推送通知,正如其他人所提到的那样。

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

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

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

答案 3 :(得分:1)

虽然存在一些黑客攻击,并且你的应用程序可以在后台进行更多时间请求(达到一定程度,并且无法保证),这是推送通知的完美应用程序。

服务器告诉手机有消息,iOS会唤醒你的应用程序来处理它。

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

答案 4 :(得分:1)

从iOS 7开始,有一种新的后台执行模式 - 需要定期获取新数据的应用程序的“获取”。听起来你的情况符合这个定义。

您可以在iOS App Programming Guide -

中找到相关信息
  

定期获取少量内容

     

在iOS 7及更高版本中,一款定期从中检索内容的应用   网络可以要求系统检查后台执行时间   新内容。您可以从中启用对后台提取的支持   Xcode中“功能”选项卡的“背景模式”部分   项目。 (您也可以通过添加支持来启用此支持   UIBackgroundModes键与应用程序的Info.plist中的获取值   文件。)在适当的时候,系统给出后台执行   时间到支持此后台模式的应用程序,启动应用程序   如果需要,直接进入后台。 app对象调用   其应用的application:performFetchWithCompletionHandler:方法   委托让你知道什么时候有执行时间。

您也可以使用推送通知,但这需要一些服务器基础架构

答案 5 :(得分:0)

在后台运行的应用程序功能有限。彻底阅读应用程序状态和多任务处理,以确定如何最好地设计您的应用程序。聊天未列为可以使用更宽松的策略操作的特定例外之一。你将永远无法让[你的]应用程序永远存在于后台。"您也许可以利用本指南中描述的iOS 7功能,定期获取少量内容。

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