【问题标题】:How do iOS chat apps keep running in the background?iOS 聊天应用程序如何在后台持续运行?
【发布时间】:2014-05-07 05:02:47
【问题描述】:

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

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

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

我知道保持应用程序活跃的黑客攻击。诸如在 info.plist 文件中将其定义为音乐播放应用程序然后无限期地播放一些空声音之类的技巧。但我也知道,当该应用程序发布到 App Store 时,Apple 会拒绝该应用程序。

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

【问题讨论】:

  • 因为iOS聊天是手机的核心功能,所以苹果一直在运行这个守护进程。

标签: ios background-process keep-alive livechat


【解决方案1】:

在后台运行的应用功能有限。通读 App States and Multitasking 以决定如何最好地设计您的应用程序。聊天未被列为可以使用更宽松的政策进行操作的特定例外情况之一。您将永远无法“让 [您的] 应用程序永远在后台运行”。您或许可以利用本指南(定期获取少量内容)中描述的 iOS 7 功能。

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      的东西

      网上有数百个教程,教你如何实现通知代码,以及当你收到这样的消息时如何做出相应的响应! 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

      【讨论】:

        【解决方案4】:

        从 iOS 7 开始,有一个新的后台执行模式 - 'fetch' 用于需要定期获取新数据的应用程序。听起来您的案例符合该定义。

        你可以在iOS App Programming Guide找到信息-

        定期获取少量内容

        在 iOS 7 及更高版本中,定期从 网络可以向系统询问后台执行时间以检查 新内容。您启用对后台提取的支持 Xcode 中 Capabilities 选项卡的背景模式部分 项目。 (您也可以通过包括 UIBackgroundModes 键与应用程序的 Info.plist 中的获取值 文件。)在适当的时候,系统提供后台执行 支持此后台模式的应用程序的时间,启动应用程序 如果需要,直接进入后台。 app 对象调用 application:performFetchWithCompletionHandler: 其应用程序的方法 当执行时间可用时,委托通知您。

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 我在我的应用程序中做同样的事情,叫做 ViteZite,我只是想知道这是否是最好的标准解决方案,还有其他人也在做同样的事情吗?或者任何想法,如果像 whatsapp 或 Vibe 这样的消息传递应用程序也在 IOS 上做同样的事情。
          【解决方案6】:

          虽然有一些技巧,并且您的应用在后台运行时可能会要求更多时间(在一定程度上,并且没有保证),但这是一个完美的推送通知应用程序。

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-26
            相关资源
            最近更新 更多