远程通知无法在后台启动应用程序

4
我已经开始尝试使用iOS 7中的新远程通知服务。文档中有趣的部分来自于UIApplication Delegate protocol
如果您的应用程序被挂起或未运行,系统会在调用该方法之前将其唤醒或启动并将其置于后台运行状态。
然而,当我发送一个带有键"content-available"和负载"1"的静默远程通知时,应用程序没有被启动到后台模式。如果我的应用程序处于后台模式或挂起状态,则通知将传递给应用程序。
文档是错误的吗?

2
你是否已将remote-notification添加到你的UIBackgroundModes Info PList条目中? - David Snabel-Caunt
1
@DavidCaunt,我尝试通过发送带有警报消息的远程通知。我在应用程序中收到了消息,但是它没有打开应用程序。我需要点击接收到的警报才能打开我们的应用程序。 - Nandha
1
@DavidCaunt我创建了一个新的应用程序,一个新的证书以及整个例程。即使我的应用程序处于未运行状态,它仍无法加载该应用程序。因此,为了澄清,当您说“未运行”时,您实际上是指什么?如果您使用新的多任务菜单将应用程序终止并向上滑动,以便终止应用程序,您仍会收到远程推送通知吗?iOS是否仍会唤醒您的应用程序并让其执行代码? - Trj
1
是的,那正是如此,但这样应用程序就不会处于“未运行”状态。根据苹果文档,应用程序将具有“后台”或“挂起”状态。https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html 因此,苹果文档是错误的。应用程序将无法从所有状态接收通知并启动。 - Trj
1
@DavidCaunt 如果我们从Xcode停止应用程序,该应用程序将处于“挂起”状态。我和Trj都认为,只有在应用程序处于后台/前台/挂起状态时,远程通知才能正常工作。这就是为什么Trj说苹果文档是错误的原因。 - Nandha
显示剩余11条评论
2个回答

0

当涉及到远程通知时,苹果文档有点令人困惑。
如果用户终止了你的应用程序或设备重新启动,则无法传递通知。

只有在应用程序处于后台或由于内存压力而被系统杀死的情况下,“content-available”才会唤醒您的应用程序。


0

添加/更新文档,因为我完全同意Guatam Jain的观点。强制停止是使我困惑的原因——苹果无法区分开发人员进行测试和用户“清理手机”或操纵失控的应用程序。

来自 https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html,标题为“了解何时将您的应用程序启动到后台”(重点突出):

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接