经过大量研究,这似乎是一个灰色领域。
一旦用户进入后台状态(使用Swift库Starscream,但我相信问题通常出在iOS和套接字上),我试图通过websocket发送偶尔的网络请求。用户离开应用程序后不久,套接字连接将自动断开连接。我认为这与苹果在后台对第三方网络活动的政策有关。
在我的AppDelegate中,我尝试在用户离开等时重新连接,但这不起作用。我也听说过涉及播放音频的解决方法,但是显然这将阻止我的应用发布到App Store(如果不是这种情况,那么为什么以及如何运行?)。其他人说我需要Apple的某种资助,我该如何申请?某人将其清除并提供合理的解决方案将非常好。我觉得这是应用程序应具备的能力,因此我正在等待找到解决方案。
Ped*_*lho 11
我相信没有合法的方法可以真正解决此问题。苹果公司不希望应用程序在后台执行操作,因为后台活动会消耗大量电池,并且可能使iPhone用户感到电池电量不够用(除了“无法解释的”网络使用率等其他问题之外) ,因此为了用户体验,它们仅提供有关iOS应用程序中后台活动的非常有限的选项。但是,我们可以通过某些方式使该应用程序保持活动状态:
当您发现有必要让应用程序在后台运行时,iOS可以帮助您有效地做到这一点,而不会浪费系统资源或用户的电池。iOS提供的技术分为三类:
- 当应用程序移至后台时,在前台启动短期任务的应用程序可能会要求时间来完成该任务。
- 在前台启动下载的应用程序可以将这些下载的管理移交给系统,从而允许在下载继续进行时暂停或终止该应用程序。
- 需要在后台运行以支持特定类型任务的应用可以声明其对一种或多种后台执行模式的支持。
因此,似乎除了要求iOS允许该应用完成简短的任务或下载外,要求系统允许该应用在后台运行的唯一方法是在中指定后台执行模式Info.plist。这可以在Capabilities项目的XCode 对话框中完成,也可以直接编辑属性列表文件来完成。让我们检查一下可用的后台执行模式:
在iOS中,只允许特定的应用类型在后台运行:
- 在后台播放用户可听内容的应用程序,例如音乐播放器应用程序
- 在后台录制音频内容的应用
- 始终让用户了解其位置的应用程序,例如导航应用程序
- 支持互联网协议语音(VoIP)的应用
- 需要定期下载和处理新内容的应用
- 从外部配件接收定期更新的应用
使套接字保持活动状态可能属于“需要定期下载和处理新内容的应用程序”用例,因此让我们检查一下:
机会性地获取少量内容
需要定期检查新内容的应用程序可以要求系统将其唤醒,以便它们可以启动该内容的提取操作。要支持此模式,请从Xcode项目中“功能”选项卡的“背景模式”部分启用“背景获取”选项。(您也可以通过在应用程序的Info.plist文件中将fback值包含UIBackgroundModes键来启用此支持。)启用此模式并不能保证系统会给您的应用程序任何时间执行后台获取。系统必须在您的应用程序获取内容的需求与其他应用程序以及系统本身的需求之间取得平衡。在评估了这些信息之后,系统会在有很多机会的时候为应用提供时间。
因此,似乎该选项仅可用于通过HTTP请求(或其他网络请求)获取少量内容,而不适用于websocket允许您使用的双向恒定通信。实际上,查看其他相关答案,似乎确实没有合法的方法可以在应用程序进入后台模式时保持套接字打开。
这意味着,要执行您想要的操作,您不能使用websockets作为唯一的通信渠道。我建议您使用fetch后台模式(如上所述),以便比在后台运行应用程序时使用websocket提取更大的内容,或者您希望用户能够看到该内容有新内容可用,您可以实施推送通知。
您不能使用“推送通知”直接发送大量内容,但可以使用它们来提示用户打开应用程序时有可用的新内容。无论使用后台获取还是推送通知,都应在App Delegate上实现方法,无论何时从后台状态恢复应用程序,该方法都将使应用程序状态与后端状态同步。
最后,关于使用音频作为解决方法:audio后台状态键将使您的应用在后台无限期地处于活动状态-但是,如果您的应用未真正使用它来播放音频,则它将被应用商店拒绝。
| 归档时间: |
|
| 查看次数: |
4774 次 |
| 最近记录: |