当接收方 iPhone 关闭时,我看到来自 Apple Push Notification Servers 的一些非常奇怪的行为。这是我的场景:
- 向 Apple 发送推送通知 A。在几秒钟内,推送通知弹出窗口会按预期显示在 iPhone 上。
- 向Apple发送空白通知以取消上一个(上一个通知在大约10秒后毫无意义,这就是我想摆脱它的原因)。iPhone 上没有显示任何内容。
- 完全关闭 iPhone(不是睡着,它是关机的)。
- 向 Apple 发送推送通知 B。等待 10 秒。
- 向 Apple 发送空白通知以取消之前的通知。等待 10 秒。
- 向 Apple 发送推送通知 C。等待 10 秒。
- 向 Apple 发送空白通知以取消之前的通知。等待 30 秒。
- 打开 iPhone。
- 大约 60 秒后,会在 iPhone 上显示通知 B 的推送通知弹出窗口。
-通知 C 似乎永远不会到达。
这很奇怪!通过阅读 Apple 文档,我期望只发送最新的推送通知。我希望我的空白通知会被发送,我当然没想到会发送最旧的未发送推送通知!
苹果文档说:
Apple Push Notification Service 包括一个默认的服务质量 (QoS) 组件,该组件执行存储和转发功能。如果 APNS 尝试发送通知但设备处于离线状态,则 QoS 会存储通知。它只为设备上的每个应用程序保留一个通知:从该应用程序的提供者处收到的最后一个通知。当离线设备稍后重新连接时,QoS 会将存储的通知转发给设备。QoS 将通知保留一段有限的时间,然后再将其删除。
有人见过这种行为吗?我只是遇到某种时间窗口错误吗?应该发生什么?
更新: -
如果我在发送任何推送通知之前关闭手机并等待 5 到 15 分钟,则不会发生此问题。在这种情况下,当我打开手机时,我看不到任何通知弹出窗口,尽管我不确定这是否是苹果放弃通知的结果,或者他们的“队列”工作正常(即持有最新的空白通知)的第一个弹出窗口)。
-我将通过将 APNsLogging.mobileconfig 放到 iPhone 上来进一步调查,以查看它收到了哪些通知。
- 关闭 wifi 似乎并没有改变结果。
-我已经针对这种情况向 Apple 提出了错误报告。