Изменится ли токен устройства APNS после его создания? - PullRequest
93 голосов
/ 11 июля 2011

Изменится ли токен устройства push-уведомлений после создания?

Пример когда приложение обновляется? или в любом другом случае это может измениться

Ответы [ 13 ]

137 голосов
/ 03 ноября 2011

Официальная документация Apple по этому вопросу неясна. Я заметил следующее: токен является инвариантным для данного устройства, приложения и домена (производство или песочница). Я считаю, что это должно оставаться верным, чтобы система работала надежно. Рассмотрим ситуацию, когда обновление приложения вызывает новый токен APN; если бы я использовал самое новое новое приложение, похожее на Twitter, с включенными уведомлениями, что бы произошло, когда я обновил свое приложение из iTunes? Должен ли я ожидать, что по-прежнему будут отправляться уведомления, даже если я не запускаю приложения, поскольку я "синхронизирую" обновление на моем устройстве? Смена приложения не может повлиять на систему APN, поскольку ОС может получать уведомления от вашего имени, даже если вы не запустили обновленное приложение.

Чтобы было ясно, Apple заявляет, что "приложение должно регистрироваться [на серверах APN] каждый раз, когда оно запускается, и предоставлять своему провайдеру текущий токен". Я полностью согласен; это защитит ваше приложение от неверных предположений или необычных ситуаций.

Один из ответов на Являются ли маркеры push-уведомлений уникальными для всех приложений для одного устройства? указывает, что токены устройства уникальны для "установки операционной системы"; и что восстановление из резервной копии на устройство сохранит токен, но очистка устройства приведет к тому, что оно получит новый токен. Это полностью соответствовало бы намерениям Apple по обеспечению бесперебойной работы и конфиденциальности: стирание устройства является достаточно серьезным, чтобы, возможно, оно потребовало новой ассоциации, но пользователь, восстанавливающий изображение после обновления ОС, хотел бы сохранить свои существующие уведомления. Если я вспоминаю недавнее обновление iOS5 на своем iPad, я восстановил самую последнюю резервную копию после обновления, так что это поддержало бы согласованность моего маркера уведомлений. [Редактировать: восстановление резервной копии на другое устройство НЕ будет дублировать токен.]

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


Обновление (июнь 2012 г.):

Недавно у меня была возможность поговорить с инженерами Apple и провести несколько реальных испытаний, и я хотел представить результаты:

В завершение, когда я говорю о возврате токена APN, я предполагаю контекст одного идентификатора пакета / приложения.

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

Во-вторых, вот последовательность тестирования обновления и результаты:

  1. Начните с iOS4, установленной на iPhone4; устройство резервного копирования в iTunes

  2. Обновление до iOS5
    Из предыдущего теста я знаю, что токен APN теперь отличается

  3. Восстановить резервную копию на устройство
    Токен APN теперь совпадает с шагом 1.

  4. Сброс iOS (чистое устройство)
    Изменен токен APN

  5. Сделайте резервную копию другого телефона в iTunes и восстановите эту резервную копию на тестовом устройстве; в основном, я восстанавливаю «неправильную» резервную копию, как будто я переключаю телефоны.
    токен APN снова меняется; кроме того, он отличается и не соответствует токенам ни оригинальному токену, ни клонированному токену.

  6. Восстановление «правильной» резервной копии на устройстве.
    Токен APN теперь совпадает с шагом 1.

  7. Наконец, я обновил телефон до iOS6 (бета2), восстановил резервную копию и повторно протестировал. Как и ожидалось, токен продолжал соответствовать токену на шаге 1.

На данный момент я вполне уверен, что токены APN нельзя дублировать между различными устройствами; возможно, это могло быть ошибкой в ​​более ранних версиях iOS, но я уверен, что iOS5 (и, вероятно, iOS6) правильно обрабатывает токены APN.


Обновление (август 2012 г.)

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

[Меня не беспокоит необходимость обновлять свои тестовые сценарии новыми токенами каждые два года, особенно с учетом того, что я меняю телефоны каждый год.]

69 голосов
/ 11 июля 2011

С [Документация Apple ApplePushService] 2

Форма этой фазы доверия токена гарантирует, что генерируются только APN знак, который он будет почитать позже, и он может убедиться, что токен, переданный ему устройством, совпадает с предусмотрены для этого конкретного устройства - и только для этого устройства.

Если пользователь восстанавливает данные резервной копии на новое устройство или переустанавливает операционная система, токен устройства меняется.

45 голосов
/ 30 ноября 2015

Я только что протестировал его с изменениями токена iOS9 и APN, если я переустановил приложение.

22 голосов
/ 23 ноября 2013

ДА , токены устройства могут меняться.

Каждый раз, когда ваше приложение получает токен, оно должно его хранить.Затем, всякий раз, когда получен новый токен (который произойдет, в конечном итоге ), сравните новый токен с сохраненным токеном и, если они отличаются:

  1. Обновите локальное устройствохранилище (включая, возможно, nil)
  2. Обновите все на устройстве, использующем токен, чтобы узнать о новом токене
  3. Обновите все API, которые знают об этом токене, до новогоtoken.

На практике последний шаг, скорее всего, будет нетривиальным.Например, если у вас есть служба, которая отправляет оповещения о погоде на токен устройства, основываясь на том, какой почтовый индекс этого устройства подписан, вам нужно передать old_token и new_token указанной службе, чтобы она могла обновить доставку.

Ergo, вообще говоря, 100% API, принимающих «токен устройства», также должны иметь какое-то средство UPDATE для этого токена.Для не сборка для этого составляет до сборка для неправильно доставленных и недоставленных уведомлений.

7 голосов
/ 18 февраля 2016

Маркер устройства действительно меняется с iOS 8 и более поздних версий

См. Текст ниже на веб-сайте Apple. Регистрация, планирование и обработка пользовательских уведомлений

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

3 голосов
/ 11 июля 2011

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

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

2 голосов
/ 12 декабря 2018

Думаю, стоит упомянуть, поскольку никто не сделал этого, чтобы токен изменился после того, как вы позвонили unregisterForRemoteNotifications.Когда вы в следующий раз позвоните registerForRemoteNotifications, токен будет другим.Я не смог найти никакого подтверждения этому в документации Apple, но сам был свидетелем такого поведения.Пожалуйста, имейте это в виду

2 голосов
/ 10 июля 2017

Ссылки быстро устаревают с яблоком!поэтому я цитирую то, что сейчас кажется вполне понятным:

Никогда не кэшируйте токены устройства в вашем приложении;вместо этого получите их из системы, когда они вам понадобятся.APNs выдает новый маркер устройства вашему приложению, когда происходят определенные события.Маркер устройства гарантированно будет другим, например, когда пользователь восстанавливает устройство из резервной копии, когда пользователь устанавливает ваше приложение на новое устройство и когда пользователь переустанавливает операционную систему.Выбор токена, а не использование кэша, гарантирует, что у вас есть текущий токен устройства, необходимый вашему провайдеру для связи с APN.Когда вы пытаетесь получить токен устройства, но он не изменился, метод извлечения возвращается быстро.

Из этого руководства

1 голос
/ 19 апреля 2018

APN могут выдать новый маркер устройства по ряду причин:

  • Пользователь устанавливает ваше приложение на новое устройство

  • Пользователь восстанавливает устройство из резервной копии

  • Пользователь переустанавливает операционную систему

  • Другие системные события

В результате приложения должны запрашивать токен устройства во время запуска.

См. - Документы Apple

Примечание: токены устройства APN имеют переменную длину. Не кодируйте их жестко размер.

0 голосов
/ 11 июля 2017

Реле токена устройства при установке приложения.

Это означает, что при переустановке приложения изменится ;Это не имеет значения, если вы делаете это из резервной копии, ecc обновления iOS.

Правильный способ использовать его, чтобы избежать каких-либо проблем, это получить тот, который указан на NSPAppDelegate взапуск приложения, в методе didRegisterForRemoteNotificationsWithDeviceToken

...