Я наблюдаю очень странное поведение серверов push-уведомлений Apple, когда iPhone получателя выключен. Вот мой сценарий:
-Отправить push-уведомление A в Apple. В течение нескольких секунд на iPhone отобразится всплывающее уведомление, как и ожидалось.
-Отправить пустое уведомление в Apple, чтобы отменить предыдущее (предыдущее уведомление не имеет смысла примерно через 10 секунд, поэтому я хочу избавиться от него). На iPhone ничего не отображается.
-Выключите iPhone полностью (не спите, он выключен).
-Отправить push-уведомление B в Apple. Подождите 10 секунд.
-Отправить пустое уведомление в Apple, чтобы отменить предыдущее. Подождите 10 секунд.
-Отправить push-уведомление C в Apple. Подождите 10 секунд.
-Отправить пустое уведомление в Apple, чтобы отменить предыдущее. Подождите 30 секунд.
-Включить iPhone.
- Примерно через 60 секунд отобразится всплывающее уведомление для уведомления B на iPhone.
Уведомление C никогда не приходит.
Это очень странно! Из прочтения документации Apple я ожидал, что будет отправлено только последнее push-уведомление. Я надеялся, что мое пустое уведомление будет отправлено, я, конечно, не ожидал, что будет отправлено самое старое неотправленное push-уведомление!
Документы Apple говорят:
Служба Apple Push Notification Service включает в себя компонент качества обслуживания по умолчанию (QoS), который выполняет функцию сохранения и пересылки. Если APNS пытается доставить уведомление, но устройство находится в автономном режиме, QoS сохраняет уведомление. Он сохраняет только одно уведомление для каждого приложения на устройстве: последнее уведомление, полученное от поставщика для этого приложения. Когда позднее автономное устройство повторно подключается, QoS пересылает сохраненное уведомление на устройство. QoS сохраняет уведомление в течение ограниченного периода времени перед его удалением.
Кто-нибудь видел такое поведение? Я просто попал в какую-то ошибку окна синхронизации? Что должно произойти?
Обновление
-Если я выключаю телефон и жду от 5 до 15 минут, прежде чем отправлять какие-либо push-уведомления, эта проблема не возникает. В этом случае, когда я включаю телефон, я не вижу никаких всплывающих уведомлений, хотя я не уверен, является ли это результатом того, что Apple отбросила уведомление, или их «очередь» работает правильно (то есть вместо этого содержится самое новое пустое уведомление первого с всплывающим окном).
- Я продолжу расследование, поместив APNsLogging.mobileconfig на iPhone, чтобы посмотреть, какие уведомления он получил.
-Включение Wi-Fi, кажется, не меняет результаты.
-Я поднял сообщение об ошибке с Apple для этого сценария.