远程通知不会在后台启动应用程序

Posted

技术标签:

【中文标题】远程通知不会在后台启动应用程序【英文标题】:remote notification does not launch app in background 【发布时间】:2013-10-15 11:02:08 【问题描述】:

我已经开始在 ios 7 中试用新的远程通知服务。有趣的部分来自文档中的 UIApplication Delegate protocol。

如果您的应用被挂起或未运行,系统会在调用该方法之前唤醒或启动您的应用并使其进入后台运行状态。

但是,当我使用键“内容可用”和有效负载“1”发送静默远程通知时,应用程序不会启动到后台模式。 如果我的应用处于后台模式或挂起,通知会发送到应用。

文档有误吗?

【问题讨论】:

您是否已将remote-notification 添加到您的 UIBackgroundModes Info PList 条目中? @DavidCaunt,我尝试发送带有警报消息的远程通知。我在应用程序中收到消息,但没有打开应用程序。我需要点击收到的警报来打开我们的应用程序。 @DavidCaunt 我创建了一个新应用程序、一个新证书和整个例程。当我的应用程序处于未运行状态时,它仍然不会加载应用程序。所以,为了澄清一下,当你说“不跑步”时,你的实际意思是什么?如果您使用新的多任务菜单终止您的应用程序并向上滑动以终止该应用程序。您还收到远程推送通知吗? iOS 还会唤醒你的应用并让它执行代码吗? 是的,就是这样,但是应用程序不会处于“未运行”状态。根据苹果文档,该应用程序将处于“后台”或“暂停”状态。 developer.apple.com/library/ios/documentation/iphone/conceptual/… 那么苹果文档是错误的。该应用程序不会从所有状态得到通知和启动。 @DavidCaunt 如果我们从 xcode 停止应用程序,应用程序将处于“暂停”状态。我自己和 Trj 说远程通知仅在应用程序处于后台/前台/挂起状态时才有效。这就是为什么 Trj 说苹果文档是错误的。 【参考方案1】:

Apple doc 在远程通知方面有点令人困惑。 如果您的应用被用户终止,或者您的设备已重新启动,则不会发送通知。

"content-available" 仅在您的应用处于后台时才会唤醒它,或者 由于内存压力,应用程序被系统杀死。

【讨论】:

【参考方案2】:

添加/更新文档,因为我完全同意 Guatam Jain。强制退出让我感到震惊——Apple 无法区分开发人员进行测试和用户“清理他们的手机”或对行为不端的应用程序进行粗暴处理。

来自https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html,标题为“了解您的应用何时启动到后台”的部分(强调我的):

支持后台执行的应用程序可能会被系统重新启动以处理传入事件。如果应用程序因用户强制退出以外的任何原因终止,系统会在以下事件之一发生时启动应用程序: ... 对于后台下载应用程序: 推送通知到达应用程序,通知的有效负载包含值为 1 的内容可用键。

【讨论】:

以上是关于远程通知不会在后台启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章

远程通知的后台任务在片​​刻后暂停

应用未运行时如何处理远程通知

即使在应用程序终止后也能获得 Apple 的远程推送通知

当应用程序处于终止状态时,iOS 静默推送通知不会收到

应用程序未运行时的 iOS 10 远程通知

手机操作系统中显示的 Bluemix 推送通知在单击时不会启动应用程序