当 APNS 仅存储一个以防设备离线时,whatsapp 如何接收多个通知?

How does whatsapp receive multiple notification when APNS stores only one in case device is offline?

根据 Apple 官方文档,如果设备处于离线状态,APNS(Apple 推送通知服务)仅存储最后一条通知。

Apple Push Notification Service includes a default Quality of Service (QoS) component that performs a store-and-forward function. If APNs attempts to deliver a notification but the device is offline, the QoS stores the notification. It retains only one notification per application on a device: the last notification received from a provider for that application. When the offline device later reconnects, the QoS forwards the stored notification to the device. The QoS retains a notification for a limited period before deleting it.

那么whatsapp之类的应用程序如何在设备上线时发送来自多个用户的消息?如果设备在线,这些消息将作为单独的通知收到。

由于您在设备离线时发送的每条通知都会有效地覆盖现有通知,因此您有两种方法可以解决此问题:

  • 在每个通知中包含设备尚不知道的所有消息(因此您将包含消息 A 的通知替换为同时包含消息 A 和 B 的通知)。您可能 运行 有时会达到最大大小限制。

  • 根本不要在通知中包含实际消息。当应用程序收到通知时,它可以向服务器请求新消息。

似乎在 iOS 8 上对这个问题进行了更新,即使您的用户手动将其关闭,您的应用也会因推送而在后台唤醒。检查一下:Wake your app in the background using PushKit in iOS8.

这意味着您可以向您的应用程序发送通知,一旦它重新连接,它将被操作系统唤醒并能够与您的服务器通信。然后,您可以实现将设备离线时错过的所有推送消息发送给它的逻辑。

我不得不承认我还没有亲自尝试过,但听起来这可能是您所描述问题的解决方案。