Является ли токен устройства APNS когда-либо измененным?

Как только создается, токен устройства push-уведомления когда-либо изменяется?

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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


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

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

Чтобы быть полным, когда я говорю о возврате токена APN, я предполагаю контекст одного идентификатора/приложения пакета.

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

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

  • Начните с iOS4, установленного на iPhone4; резервное устройство в iTunes

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

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

  • Reset iOS (чистое устройство)
    Токен APN изменяет

  • Резервное копирование другого телефона в iTunes и восстановление этой резервной копии для тестирования устройства; в основном, я восстанавливаю "неправильную" резервную копию, как если бы я переключал телефоны.
    Значок APN снова изменяется; далее он отличается и не соответствует токенам либо оригинальному токену, либо "клонированному" токену.

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

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

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


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

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

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

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

Ответ 8

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

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

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

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

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

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

Обратитесь - Apple Docs

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

Ответ 9

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

Ответ 10

В качестве ссылки на Apple push notification stuff

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

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

Ответ 11

В соответствии с эта ссылка токен устройства

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

Ответ 12

Да он может измениться. В идеале, когда мы получаем токен через метод обратного вызова

  • (void) приложение: (приложение UIApplication *) didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken

Приложение должно зарегистрировать/обновить токен на удаленном сервере. Это обеспечит синхронизацию токена на APNS и вашем сервере.

По Документация Apple,

Получение и обработка токена устройства, предназначенного для приложения, работает следующим образом:

Ваше приложение регистрируется с помощью APN для удаленных уведомлений. Когда новый маркер устройства необходим, APN генерирует один, используя информацию, содержащуюся в сертификате устройств. Он шифрует токен, используя ключ-токен и возвращает его на устройство, как показано в середине, справа стрела. Система доставляет токен устройства обратно в ваше приложение позвонив application: didRegisterForRemoteNotificationsWithDeviceToken: делегат метод. Получив токен, ваше приложение (в составе делегата метод) должен направить его вашему провайдеру либо в двоичном, либо в шестнадцатеричный формат. Ваш провайдер не может отправлять уведомления без этого токена. Подробнее см. В разделе Регистрация для получения Удаленные уведомления в настройке поддержки удаленных уведомлений.

Ответ 13

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

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

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