Странное поведение Push-уведомлений Apple при выключенном принимающем iPhone

StackOverflow https://stackoverflow.com/questions/1638783

Вопрос

Я наблюдаю какое-то очень странное поведение серверов Push-уведомлений Apple, когда iPhone получателя выключен.Вот мой сценарий:

-Отправить push-уведомление A в Apple.В течение нескольких секунд, как и ожидалось, на iPhone отобразится всплывающее окно с push-уведомлением.
-Отправить пустое уведомление в Apple, чтобы отменить предыдущее (предыдущее уведомление становится бессмысленным примерно через 10 секунд, вот почему я хочу избавиться от него).На iPhone ничего не отображается.
-Полностью выключите iPhone (он не находится в режиме ожидания, он выключен).
-Отправить push-уведомление B в Apple.Подождите 10 секунд.
-Отправьте пустое уведомление в Apple, чтобы отменить предыдущее.Подождите 10 секунд.
-Отправить push-уведомление C в Apple.Подождите 10 секунд.
-Отправьте пустое уведомление в Apple, чтобы отменить предыдущее.Подождите 30 секунд.
-Включите iPhone.
-Примерно через 60 секунд для уведомления B на iPhone появится всплывающее окно с push-уведомлением.
-Уведомление C, похоже, никогда не приходит.

Это очень странно!Прочитав документы Apple, я ожидал, что будет отправлено только последнее push-уведомление.Я надеялся, что мое пустое уведомление будет отправлено, я, конечно, не ожидал, что будет отправлено самое старое неотправленное push-уведомление!

В документах Apple говорится:

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

Кто-нибудь видел такое поведение?Я просто столкнулся с какой-то ошибкой в окне синхронизации?Что должно произойти?

Обновления:
-Если я выключу телефон и подожду от 5 до 15 минут, прежде чем отправлять какие-либо push-уведомления, то эта проблема не возникнет.В этом случае, когда я включаю телефон, я не вижу всплывающего окна с уведомлением, хотя я не уверен, является ли это результатом того, что Apple удалила уведомление или их "очередь" работает правильно (т.Е.удерживая самое новое пустое уведомление вместо первого со всплывающим окном).
-Я продолжу расследование, установив APNsLogging.mobileconfig на iPhone, чтобы посмотреть, какие уведомления он получил.
- Отключение Wi-Fi, похоже, не меняет результатов.
- Я отправил в Apple сообщение об ошибке для этого сценария.

Это было полезно?

Решение 2

Для справки, я поднял это как идентификатор ошибки # 7349660 в Apple 29 октября (https://bugreport.apple.com), затем 30 октября провел им дополнительную диагностику, которую они хотели.

С тех пор от Apple нет ответа, поэтому я предполагаю, что это, вероятно, просто не в их списке приоритетов, что достаточно справедливо, поскольку это довольно небольшое временное окно, в котором может возникнуть проблема (чего я не осознавал, когда впервые открыл этот вопрос).

Другие советы

Возможно, вы захотите проверить это поведение как в сетях сотовой связи, так и в сетях Wi-Fi.Существует много странного поведения, когда телефон подключен к Wi-Fi, особенно если задействовано несколько маршрутизаторов NAT, т.е.в крупной корпорации, где есть главный маршрутизатор и Wi-Fi-маршрутизаторы на каждом этаже, или в доме, где у вас есть несколько маршрутизаторов, используемых для расширения диапазона.Но на сотовой связи это было довольно солидно.

Кроме того, 10-секундная задержка отмены может привести к тому, что она будет слишком короткой.Они не гарантируют своевременную доставку, и я получил задержки на целых 3 минуты на рабочем сервере после отправки push-запроса в очередь.Возможно, вы захотите спланировать перегрузку системы.

В любом случае, похоже, это достойно отчета bugreporter.

В документе Apple говорится, что он может кэшировать push-уведомления сроком до 30 дней.таким образом, вы можете получить push-уведомления после включения вашего iphone (при условии, что у вас есть подключение).

Как скоро C был отправлен после B?Похоже, что это может быть ошибка, из-за которой на стороне сервера происходит какой-то тайм-аут, и они случайно сохраняют B, если C был отправлен слишком скоро после этого...

Если у вас есть хороший тестовый пример (и это похоже на хороший тест) Я бы отправил отчет Radar по этому поводу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top