Как WhatsApp получает несколько уведомлений, когда APNS хранит только одно, если устройство находится в автономном режиме?
Согласно официальной документации Apple, APNS (Apple Push Notification Service) хранит только последнее уведомление, если устройство находится в автономном режиме.
Служба Apple Push Notification Service включает в себя компонент качества обслуживания по умолчанию (QoS), который выполняет функцию сохранения и пересылки. Если APN пытается доставить уведомление, но устройство находится в автономном режиме, QoS сохраняет уведомление. Он сохраняет только одно уведомление для каждого приложения на устройстве: последнее уведомление, полученное от поставщика для этого приложения. Когда позднее автономное устройство повторно подключается, QoS пересылает сохраненное уведомление на устройство. QoS сохраняет уведомление в течение ограниченного периода времени перед его удалением.
Тогда как такие приложения, как WhatsApp, отправляют сообщения от нескольких пользователей, когда устройство подключается к сети? Эти сообщения были бы получены как отдельное уведомление, если бы устройство было в сети.
2 ответа
Похоже, что в iOS 8 появилось обновление для этой проблемы, которое позволит вашему приложению проснуться в фоновом режиме из-за нажатия, даже если ваш пользователь вручную убил его. Проверьте это: разбудите свое приложение в фоновом режиме, используя PushKit в iOS8.
Это означает, что вы можете отправлять уведомления в свое приложение, и после его повторного подключения оно будет разбужено операционной системой и сможет взаимодействовать с вашим сервером. Затем вы можете реализовать логику для отправки всех push-сообщений, которые были пропущены, когда устройство находилось в автономном режиме.
Я должен признать, что я еще не попробовал это сам, но похоже, что это может быть решением проблемы, которую вы описываете.
Поскольку каждое уведомление, которое вы отправляете, когда устройство находится в автономном режиме, эффективно перезаписывает существующее, у вас есть два способа сделать это:
Включите все сообщения, о которых устройство еще не знает, в каждое уведомление (таким образом, вы заменяете уведомление, содержащее сообщение A, тем, которое содержит оба сообщения A и B). В какой-то момент вы можете столкнуться с ограничением максимального размера.
Не включайте фактические сообщения в ваши уведомления вообще. Когда приложение получает уведомление, оно может запросить у сервера новые сообщения.