【问题标题】:Weird Apple Push Notification behaviour when the receiving iPhone is turned off接收 iPhone 关闭时奇怪的 Apple 推送通知行为
【发布时间】:2010-12-10 23:03:21
【问题描述】:

当接收方 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 文档说:

Apple 推送通知服务包含一个默认的服务质量 (QoS) 组件,该组件执行存储和转发功能。如果 APNS 尝试发送通知但设备处于离线状态,则 QoS 会存储通知。它只为设备上的每个应用程序保留一个通知:从该应用程序的提供者处收到的最后一个通知。当离线设备稍后重新连接时,QoS 会将存储的通知转发给设备。 QoS 在删除通知之前将其保留一段有限的时间。

有人见过这种行为吗?我只是遇到某种时间窗口错误吗?应该怎么办?

更新
- 如果我在发送任何推送通知之前关闭手机并等待 5 到 15 分钟,则不会发生此问题。在这种情况下,当我打开手机时,我看不到任何通知弹出窗口,尽管我不确定这是否是苹果放弃通知的结果,或者他们的“队列”工作正常(即持有最新的空白通知)弹出窗口的第一个)。
-我将通过将 APNsLogging.mobileconfig 放到 iPhone 上来进一步调查,以查看它收到了哪些通知。
- 关闭 wifi 似乎并没有改变结果。
-我已经针对这种情况向 Apple 提出了错误报告。

【问题讨论】:

  • 取消前一个是什么意思?通知发送后无法取消。
  • 新的推送通知会清除接收它们的 iPhone 上以前的通知,因此您可以通过发送没有弹出消息的新空白通知来有效地取消以前的通知。这对我来说大部分都很好。

标签: iphone push-notification apple-push-notifications


【解决方案1】:

为了记录,我在 10 月 29 日向 Apple (https://bugreport.apple.com) 提出了这个错误 ID #7349660,然后在 10 月 30 日向他们提供了他们想要的额外诊断。

从那时起,Apple 没有回应,所以我假设这可能只是他们的优先级列表中的低端,这很公平,因为它是一个可能发生问题的非常小的时间窗口(当我没有意识到首先打开这个问题)。

【讨论】:

    【解决方案2】:

    C 在 B 之后多久被发送?似乎这可能是一个错误,服务器端存在某种超时,如果 C 发送得太早,他们会意外保留 B...

    如果您有一个很好的测试示例(这似乎是一个很好的测试),我会就此提交一份 Radar 报告。

    【讨论】:

    • 我的测试在每次推送通知之间有大约 10 秒的时间。我计划重新测试并改变一些时间间隔,看看我是否可以改变行为,然后我会向 Apple 提出一个错误 (bugreport.apple.com)。
    【解决方案3】:

    在苹果的文档中,据说它可以缓存推送通知长达 30 天。所以一旦你打开你的 iPhone,你可能会得到推送(如果你有互连)

    【讨论】:

    • 你是看我的帖子,还是只是看标题?是的,我知道 - 在我的帖子中,我解释说我确实在重新打开手机后收到了一条推送通知。但这只是四个系列中的第一个推送,我的问题是它是否应该是最近的推送,而不是最旧的推送。
    【解决方案4】:

    您可能需要在蜂窝网络和 WiFi 网络中检查此行为。当手机在 WiFi 上时会出现很多奇怪的行为,尤其是在涉及多个 NAT 路由器的情况下,即在有主路由器和每层 WiFi 路由器的大公司中,或者在您有多个路由器的家中使用扩大范围。但在手机上,它已经相当稳固了。

    另外,10 秒的取消延迟可能会太接近。他们不保证及时交付,并且在排队推送请求后,我在生产服务器上延迟了多达 3 分钟。您可能需要规划系统拥塞。

    不管怎样,听起来它可能值得一个 bugreporter 报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多