手机重启后远程通知未发送到我的应用程序

Posted

技术标签:

【中文标题】手机重启后远程通知未发送到我的应用程序【英文标题】:Remote notification is not delivered to my app after phone reboot 【发布时间】:2015-06-05 20:35:31 【问题描述】:

根据远程通知上的Apple's documentation:

讨论

使用此方法为您的应用处理传入的远程通知。 与application:didReceiveRemoteNotification: 方法不同,后者 仅当您的应用程序在前台运行时调用,系统 当您的应用在前台运行时调用此方法或 背景。此外,如果您启用了远程通知 后台模式,系统启动您的应用程序(或从 挂起状态),并在远程时将其置于后台状态 通知到达。 但是,系统不会自动 如果用户强制退出它,则启动您的应用程序。在这种情况下, 用户必须在系统之前重新启动您的应用程序或重新启动设备 尝试再次自动启动您的应用。

在我的情况下(ios 7.1.1),在应用程序被终止(从最近的应用程序列表向上滑动)并且手机重新启动后,远程通知不会发送到应用程序。如果我打开应用程序,通知会按预期发送。我错过了什么?

编辑:为了避免任何误解。我期望的是以下流程:

    用户杀死应用程序; 用户重启手机; 应用服务器发送新消息; 操作系统尝试启动应用并发送通知。

【问题讨论】:

“我错过了什么?” - 听起来您并没有错过任何东西 :) 它听起来像是预期的(但不希望的)行为。我想开始获取他们声称应该在安全上下文中发送清理的applicationWillTerminate: :) Apple 文档有时很糟糕。 @jww:预期?恐怕是这样,但有任何确认吗? 您看到的行为正是 Apple 记录的:如果用户强制退出您的应用,系统将不会自动启动您的应用以发送远程通知.您复制的文本中以粗体非常清楚地说明了这一点。 @RyanR:如果您阅读了全文(粗体),您会发现系统会在用户重新启动应用或重启设备后尝试发送通知。 @Asahi 我认为你误会了。在您的应用重新启动之前,系统不会缓存您的远程通知。由于您正在经历这种行为,并且其他 2 位开发人员正在确认这种行为...... 【参考方案1】:

问题是你是开发者,你的用法不典型。你做什么:启动应用程序,刷掉它,关闭手机(不是待机,而是关闭),重启,输入你的密码,让你的服务器发送通知。那是行不通的。

由于某种原因,手机重启后 90 秒左右内发送的通知收不到。等待 90 秒,然后您发送通知,应该会收到通知。由于用户手机重启的时间和你发送通知的时间没有关系,这只是开发者和测试者的问题,而不是真实用户的问题。

【讨论】:

【参考方案2】:

从您链接的文章中,对于您引用的方法 (application:didReceiveRemoteNotification:)

如果远程通知到达时应用程序未运行,则 方法启动应用程序并在 启动选项字典。 应用不调用此方法 处理该远程通知。相反,您对 application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions: 方法需要获取 远程通知负载数据并做出适当的响应。

您是否在will/didFinishLaunchingWithOptions: 的选项字典中检查您的远程通知有效负载?

【讨论】:

是的,我也在检查这些。他们也不会被调用 @Asahi 您确实应该在问题中说明您尝试过的所有内容,这样试图帮助您的人就可以获得有关您的问题的所有信息,并且不要浪费时间描述您已经尝试过的解决方案。

以上是关于手机重启后远程通知未发送到我的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

应用程序未运行时的远程推送通知崩溃

重启手机后报警通知数据消失

Firebase 远程通知未收到?

远程通知类别未发送到客户端设备?

iOS,先强制退出应用,点击接收通知banner后,应用启动失败

远程推送通知不会唤醒我的手机