Зачем регистрироваться на push-уведомления каждый раз, когда пользователь запускает приложение? - PullRequest
16 голосов
/ 07 ноября 2010

В документации Apple вы можете найти следующее предложение:

Приложение должно регистрироваться каждый раз при запуске и предоставлять своему провайдеру текущий токен. Он вызывает registerForRemoteNotificationTypes: начать процесс регистрации.

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

Мой вопрос: зачем мне каждый раз регистрироваться, если APNS всегда дает мне один и тот же токен?

Я где-то читал, что токен может измениться, если пользователь проведет пальцем по своему iPhone или приложению. Это единственный случай?

Спасибо!

1 Ответ

29 голосов
/ 12 ноября 2010

Токен, который я получаю от APNS, всегда одинаков для данного пользователя.

За исключением того, что это не так, в основном потому, что в настройках iPhone нет ничего, за что вы могли бы держаться, будучи «пользователем». Маркер устройства всегда одинаков для каждого приложения для каждого устройства . Поэтому разные приложения на одном устройстве получают разные токены. Одно и то же приложение на двух разных устройствах получает два разных токена.

Важная вещь, на которую следует обратить внимание, и это упоминается в руководстве APNS, заключается в том, что пользователь может создавать резервные копии своих приложений, настроек и всего остального. Тогда они могут уронить свой телефон в унитаз. Получив запасной телефон, они могут взять резервную копию и восстановить ее на свой новый телефон. Бинго - одно и то же приложение, один и тот же пользователь, другое устройство, и другой токен .

Что касается вашего приложения, то с момента его последнего запуска ничего не изменилось - оно не знает, что оно на самом деле работает на другом устройстве. Единственный способ, которым он это знает, это то, что он запрашивает «текущий» токен устройства, и, эй, давай, это другой токен в прошлый раз.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...