Меняется ли токен устройства push-уведомлений после создания?
Пример, когда приложение обновляется? или в любом другом случае это может измениться ??
Меняется ли токен устройства push-уведомлений после создания?
Пример, когда приложение обновляется? или в любом другом случае это может измениться ??
Ответы:
Из [Apple Documentation ApplePushService] 2
источник
Официальная документация Apple по этому поводу неясна. Я заметил следующее: токен инвариантен для данного устройства, приложения и домена (производственная среда или песочница). Я считаю, что это должно оставаться верным, чтобы система работала надежно. Рассмотрим ситуацию, когда обновление приложения запускает новый токен APN; Если бы я использовал лучшее новое приложение, подобное Twitter, с включенными уведомлениями, что бы произошло, когда я обновил свое приложение из iTunes? Должен ли я ожидать, что он будет продолжать отправлять уведомления, даже если я не запускал приложения с тех пор, как «синхронизирую» обновление на своем устройстве? Изменение приложения не может повлиять на систему APN, поскольку ОС может получать уведомления от вашего имени, даже если вы не запустили обновленное приложение.
Чтобы быть ясным, Apple заявляет: «Приложение должно регистрироваться [на серверах APN] каждый раз при запуске и выдавать своему провайдеру текущий токен». Я полностью согласен; это защитит ваше приложение от неверных предположений или необычных ситуаций.
Один из ответов на вопрос, являются ли токены push-уведомлений уникальными для всех приложений для одного устройства? указывает, что токены устройства уникальны для каждой «установки операционной системы»; и что восстановление из резервной копии на устройство будет поддерживать токен, но очистка устройства приведет к получению нового токена. Это полностью согласуется с намерениями Apple обеспечить бесперебойную работу и конфиденциальность: очистка устройства достаточно серьезна, и, возможно, требует новой ассоциации, но пользователь, восстанавливающий изображение после обновления ОС, захочет сохранить свои существующие уведомления. Если я вспомню недавнее обновление iOS5 на моем iPad, я восстановил самую последнюю резервную копию после обновления, так что это поддержит согласованность моего токена уведомления. [Edit: восстановление резервной копии на другой устройство НЕ будет дублировать токен.]
предостережение: у меня нет окончательных знаний по этому вопросу, только некоторый разумный опыт работы с APN (в качестве стороннего разработчика). Как всегда, лучше всего проверить свои предположения.
Обновление (июнь 2012 г.):
Недавно у меня была возможность a> поговорить с инженерами Apple и b> провести несколько реальных тестов, и я хотел представить результаты:
Для полноты, когда я говорю о возврате токена APN, я подразумеваю контекст одного идентификатора пакета / приложения.
Во-первых, инженеры Apple заявили, что два устройства не должны возвращать один и тот же APN. Несмотря на комментарии ниже, я не смог определить обстоятельства, при которых это не помогло.
Во-вторых, вот последовательность и результаты тестирования обновления:
Начните с iOS4, установленной на iPhone4; устройство резервного копирования в iTunes
Обновление до iOS5
Из предыдущего теста я знаю, что токен APN теперь другой.
Восстановите резервную копию на устройстве
. Токен APN теперь такой же, как на шаге 1.
Сбросить iOS (чистое устройство)
Изменения токена APN
Сделайте резервную копию другого телефона в iTunes и восстановите эту резервную копию на тестовое устройство; в основном восстанавливаю "неправильную" резервную копию, как будто менял телефоны.
Токен APN снова меняется; кроме того, он отличается и не соответствует токенам ни исходному, ни «клонированному» токену.
Восстановите "правильную" резервную копию на устройство.
Токен APN теперь такой же, как на шаге 1.
Наконец, я обновил телефон до iOS6 (beta2), восстановил резервную копию и повторно протестировал. Как и ожидалось, токен продолжал соответствовать токену на шаге 1.
На данный момент я почти уверен, что токены APN не могут дублироваться между разными устройствами; возможно, это могло произойти как ошибка в более ранних версиях iOS, но я уверен, что iOS5 (и, предположительно, iOS6) правильно обрабатывает токены APN.
Обновление (август 2012 г.)
Я просто понял , что я не добавил это: лексемы устройства будут меняться. Один из разработчиков Apple поделился со мной, что токены действительно истекают (я думаю, через 2 года). Для многих целей этого достаточно, чтобы его можно было рассматривать как инвариант.
[Я не волнуюсь, если мне придется обновлять свои тестовые сценарии новыми токенами каждые два года, тем более что я каждый год меняю телефоны.]
источник
Я только что протестировал его с изменениями токена iOS9 и APN Push, если я переустановлю приложение.
источник
ДА , токены устройства могут измениться.
Каждый раз, когда ваше приложение получает токен, оно должно сохранять его. Затем, когда новый маркер принимается (что будет происходить, в конце концов), сравнить новый маркер хранимой маркер и, если они различны:
nil
)На практике последний шаг, скорее всего, будет нетривиальным. Например, если у вас есть служба, которая отправляет предупреждения о погоде на токен устройства в зависимости от того, на какой почтовый индекс это устройство подписано, вам необходимо передать
old_token
иnew_token
указанную службу, чтобы она могла обновлять доставку.Следовательно, вообще говоря, 100% API-интерфейсов, принимающих «токен устройства», также должны иметь какое-то
UPDATE
средство для этого токена. Для того, чтобы не создавать для этого , чтобы построить для неправильно поставленные и не-доставленных уведомлений.источник
Токен устройства меняется с iOS 8 и новее
См. Текст с веб-сайта Apple ниже. Регистрация, планирование и обработка уведомлений пользователей
источник
Я думаю, стоит упомянуть, поскольку никто этого не делал, что токен меняется после того, как вы позвонили
unregisterForRemoteNotifications
. Когда вы позвоните вregisterForRemoteNotifications
следующий раз, токен будет другим. Мне не удалось найти подтверждения этому в документации Apple, но я сам был свидетелем такого поведения. Пожалуйста, имейте это в видуисточник
Он не должен меняться, если ваше приложение не будет восстановлено на новом устройстве (в этот момент его не попросят снова принять push-уведомления, и он просто отправит вам зарегистрированный вызов, после чего вы должны принять новый токен).
Но Apple не гарантирует, что он никогда не изменится (поэтому в документации об этом не упоминается). Вам лучше запрограммировать худшее и предположить, что однажды это может измениться. Кроме того, регулярная отправка токена на ваш сервер позволяет вам удалять токены, которые не регистрировались какое-то время и, вероятно, деинсталлировали ваше приложение или потеряли интерес некоторое время назад (и в документации это указано как желаемое поведение!).
источник
От - Apple Docs
Дополнительно:
источник
Ссылки быстро устаревают с яблоком! поэтому я цитирую то, что теперь кажется довольно ясным:
Из этого руководства
источник
Что касается push-уведомлений Apple
Токен устройства - это ваш ключ к отправке push-уведомлений в ваше приложение на определенном устройстве. Токены устройства могут изменяться, поэтому вашему приложению необходимо перерегистрироваться каждый раз при запуске и передавать полученный токен обратно на ваш сервер. Если вы не обновите токен устройства, удаленные уведомления могут не поступать на устройство пользователя. Токены устройств всегда меняются, когда пользователь восстанавливает данные резервной копии на новом устройстве или компьютере или переустанавливает операционную систему. При переносе данных на новое устройство или компьютер пользователь должен запустить ваше приложение один раз, прежде чем удаленные уведомления могут быть доставлены на это устройство.
Никогда не кэшируйте токен устройства; всегда получайте токен из системы, когда он вам нужен. Если ваше приложение ранее было зарегистрировано для удаленных уведомлений, повторный вызов метода registerForRemoteNotifications не влечет дополнительных накладных расходов, а iOS немедленно возвращает существующий токен устройства делегату вашего приложения. Кроме того, iOS вызывает ваш метод делегата при каждом изменении токена устройства, а не только в ответ на регистрацию или перерегистрацию вашего приложения.
источник
По этой ссылке токен устройства
источник
Да, это может измениться. В идеале, когда мы получаем токен через метод обратного вызова
Приложение должно зарегистрировать / обновить токен на удаленном сервере. Это обеспечит синхронизацию токена APNS и вашего сервера.
Согласно документации Apple ,
источник
Реле токена устройства при установке приложения.
Это означает, что если вы переустановите приложение, оно изменится ; это не сработает, если вы сделаете это из резервной копии, обновления iOS и т. д.
Правильный способ использовать его, чтобы избежать каких-либо проблем, - получить тот, который указан
NSPAppDelegate
при каждом запуске приложения, в методеdidRegisterForRemoteNotificationsWithDeviceToken
источник