Странное поведение Apple Push Notification, когда принимающий iPhone выключен - PullRequest
3 голосов
/ 28 октября 2009

Я наблюдаю очень странное поведение серверов 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 для этого сценария.

Ответы [ 4 ]

3 голосов
/ 28 октября 2009

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

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

В любом случае, звучит так, как будто это может быть достойно отчета об ошибке.

1 голос
/ 15 декабря 2009

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

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

0 голосов
/ 29 октября 2009

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

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

0 голосов
/ 28 октября 2009

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

...