代码之家  ›  专栏  ›  技术社区  ›  Dan J Akhil

当接收到的iPhone关闭时,奇怪的苹果推送通知行为

  •  3
  • Dan J Akhil  · 技术社区  · 15 年前

    我在苹果推送通知服务器上看到了一些非常奇怪的行为,当接收者iPhone关闭时。下面是我的场景:

    -向Apple发送推送通知A。几秒钟之内,一个推送通知弹出窗口就会像预期的那样显示在iPhone上。
    -向苹果发送空白通知,取消前一个通知(前一个通知在大约10秒后是无意义的,这就是为什么我想摆脱它)。iPhone上没有显示任何内容。
    -完全关闭iPhone(不休眠,已关机)。
    -向苹果发送推送通知B。等待10秒钟。
    -向Apple发送空白通知以取消前一个通知。等待10秒钟。
    -向苹果发送推送通知C。等待10秒钟。
    -向Apple发送空白通知以取消前一个通知。等待30秒。
    -打开iPhone。
    -大约60秒后,iPhone上会显示一个推送通知弹出窗口,用于通知B。
    -通知C似乎从未到达。

    这很奇怪!通过阅读苹果文档,我只期望发送最新的推送通知。我希望我的空白通知会被发送,我当然不希望发送最早的未发送推送通知!

    苹果文档说:

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

    有人见过这种行为吗?我是不是碰到了定时窗口的问题?会发生什么?

    更新 :
    -如果在发送推送通知之前关闭手机并等待5到15分钟,则不会出现此问题。在这种情况下,当我打开手机时,我看不到任何通知弹出窗口,尽管我不确定这是因为苹果删除了通知,还是因为他们的“队列”工作正常(即保持最新的空白通知而不是第一个带有弹出窗口的通知)。
    -我将通过在iPhone上放置apnslogging.mobileconfig来进一步调查,看看它收到了什么通知。
    -关闭WiFi似乎不会改变结果。
    -我已经为这个场景向苹果提出了一个bug报告。

    4 回复  |  直到 15 年前
        1
  •  3
  •   Ramin    15 年前

    您可能需要检查蜂窝网络和WiFi网络的这种行为。当手机使用wifi时,会有很多奇怪的行为,尤其是当涉及到多个nat路由器时,例如,在一个有主路由器和每层wifi路由器的大公司中,或者在一个有多个路由器用于扩展范围的家中。但在牢房里却很坚固。

    另外,10秒的取消延迟可能会使其过近。它们不能保证及时交付,在排队等待推送请求之后,我在生产服务器上的延迟时间长达3分钟。您可能需要计划系统拥塞。

    不管怎样,这听起来可能值得一个错误报告。

        2
  •  1
  •   Dan J Akhil    15 年前

    作为记录,我在10月29日和苹果公司提出了这个问题( https://bugreport.apple.com ,然后在10月30日给他们额外的诊断。

    从那以后苹果没有回应,所以我假设这可能只是他们的优先权列表中的一个小问题,这是公平的,因为这是一个很小的时间窗口,在那里问题可以发生(我第一次打开这个问题时没有意识到)。

        3
  •  0
  •   Rahul    15 年前

    在苹果的文档中,据说它可以将推送通知高速缓存到30天内,这样一旦你打开iPhone(前提是你有互联网络),你就可以得到推送。

        4
  •  0
  •   Kendall Helmstetter Gelner    15 年前

    C在B之后多久发出的?似乎这是一个bug,其中有某种超时服务器端,如果C发送得太快,它们会意外地保留B…

    如果你有一个好的测试例子(这看起来是一个好的测试),我会提交一份雷达报告。