Как whatsapp получает несколько уведомлений, когда APNS хранит только один, если устройство находится в автономном режиме?

Согласно официальной документации Apple, APNS (Apple Push Notification Service) сохраняет только последнее уведомление, если устройство находится в автономном режиме.

Служба уведомления Apple Push включает стандартное качество обслуживания (QoS), который выполняет функцию store-and-forward. Если APN попытки доставить уведомление, но устройство отключено, QoS хранит уведомление. Он сохраняет только одно уведомление за приложение на устройстве: последнее уведомление, полученное от поставщика для этого приложения. Когда автономное устройство позже повторно подключается, QoS направляет сохраненное уведомление на устройство. QoS сохраняет уведомление в течение ограниченного периода времени перед удалением он.

Затем, как приложения, такие как whatsapp, отправляют сообщения от нескольких пользователей, когда устройство подключается к сети? Эти сообщения были бы получены как отдельное уведомление, если устройство было в сети.

Ответ 1

Похоже, было обновление этой проблемы на iOS 8, которая позволит вашему приложению проснуться в фоновом режиме из-за нажатия, даже если ваш пользователь вручную его убил. Проверьте это: Пробудите свое приложение в фоновом режиме с помощью PushKit в iOS8.

Это означает, что вы можете отправлять уведомления в свое приложение и после его повторного подключения, он будет разбужен операционной системой и сможет общаться с вашим сервером. Затем вы можете реализовать логику, чтобы отправить все push-сообщения, которые были пропущены, когда устройство было отключено.

Я должен признать, что мне еще предстоит попробовать это, но похоже, что это может быть решением проблемы, которую вы описываете.

Ответ 2

Поскольку каждое уведомление, которое вы отправляете, когда устройство в автономном режиме эффективно перезаписывает существующее, вы можете сделать два способа:

  • Включите все сообщения, которые устройство еще не знает о каждом уведомлении (поэтому вы заменяете уведомление, содержащее сообщение A, с сообщением A и B). В какой-то момент вы можете набрать максимальный размер.

  • Не включайте фактические сообщения в свои уведомления вообще. Когда приложение получает уведомление, оно может запросить у сервера новые сообщения.