Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS聊天应用程序如何在后台运行?_Ios_Background Process_Keep Alive_Livechat - Fatal编程技术网

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

iOS聊天应用程序如何在后台运行?,ios,background-process,keep-alive,livechat,Ios,Background Process,Keep Alive,Livechat,我一直为Android编写代码,现在我希望将我的知识扩展到iOS开发;所以我对这一点很陌生,请耐心点。 我知道只有一小部分应用程序可以在后台无限期运行。这些是VoIP、音乐播放器和位置跟踪应用程序。 我想使用XMPP框架编写一个聊天应用程序。在用户将应用程序置于后台之前,一切正常。在这种情况下,应用程序将保持连接大约十分钟,然后被系统终止,因此用户将无法接收新消息。 我知道有黑客让应用程序保持活力。比如在info.plist文件中将其定义为音乐播放应用程序,然后无限期地播放一些空声音

我一直为Android编写代码,现在我希望将我的知识扩展到iOS开发;所以我对这一点很陌生,请耐心点。

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

我想使用XMPP框架编写一个聊天应用程序。在用户将应用程序置于后台之前,一切正常。在这种情况下,应用程序将保持连接大约十分钟,然后被系统终止,因此用户将无法接收新消息。

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


那么,通常情况下,其他应用程序是如何做到这一点的呢?其他聊天应用程序如何在后台保持活动状态以接收来自服务器的新消息?像Google Hangouts、IM+之类的应用程序?

虽然有一些黑客攻击,而且当你的应用程序进入后台时(在一定程度上,并且没有任何保证),它是推送通知的完美应用程序

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


我认为大多数应用程序都使用推送通知,只要打开应用程序,就可以从服务器加载最后的消息。

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

你可在以下网页找到有关资料—

定期获取少量内容

在iOS 7及更高版本中,一种定期从服务器检索内容的应用程序 网络可以要求系统检查后台执行时间 新内容。您可以支持从 Xcode中“功能”选项卡的“后台模式”部分 项目(您还可以通过包括 UIBackgroundModes键和应用程序Info.plist中的fetch值 在适当的时候,系统会在后台执行 到支持此后台模式的应用程序的时间,启动应用程序 如果需要,直接进入后台。app对象调用
应用程序:performFetchWithCompletionHandler:
其应用程序的方法 委托,让您知道执行时间何时可用


您也可以使用推送通知,但这需要一些服务器基础设施。iOS操作系统允许存在一种称为推送通知的东西

在线上有数百个教程,教您如何实现通知代码,以及在收到此类消息时如何做出相应的响应!

查看此链接可获得有关推送通知的深入教程!
理想情况下,它们不是真正在后台运行,而是使用推送通知,正如其他人提到的那样

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

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


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

后台运行的应用程序功能有限。仔细阅读应用程序状态和多任务处理,以决定如何最好地设计应用程序。聊天并没有被列为一种特殊的例外情况,这种例外情况可以在更宽松的政策下运行。您将永远无法“让[您的]应用程序永远在后台运行”。您可能可以利用本指南中介绍的iOS 7功能,定期获取少量内容

iOS应用程序编程指南:应用程序状态和多任务
ProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

因为iOS聊天是手机的核心功能,苹果一直在运行这个守护进程。我在我的名为ViteZite的应用程序中也在做同样的事情,我只是想知道这是否是最好的标准解决方案,还有其他人也在做同样的事情吗?或者知道whatsapp或Vibe等短信应用在IOS上是否也有同样的功能。