Токен, который я получаю от APNS, всегда одинаков для данного пользователя.
За исключением того, что это не так, в основном потому, что в настройках iPhone нет ничего, за что вы могли бы держаться, будучи «пользователем». Маркер устройства всегда одинаков для каждого приложения для каждого устройства . Поэтому разные приложения на одном устройстве получают разные токены. Одно и то же приложение на двух разных устройствах получает два разных токена.
Важная вещь, на которую следует обратить внимание, и это упоминается в руководстве APNS, заключается в том, что пользователь может создавать резервные копии своих приложений, настроек и всего остального. Тогда они могут уронить свой телефон в унитаз. Получив запасной телефон, они могут взять резервную копию и восстановить ее на свой новый телефон. Бинго - одно и то же приложение, один и тот же пользователь, другое устройство, и другой токен .
Что касается вашего приложения, то с момента его последнего запуска ничего не изменилось - оно не знает, что оно на самом деле работает на другом устройстве. Единственный способ, которым он это знает, это то, что он запрашивает «текущий» токен устройства, и, эй, давай, это другой токен в прошлый раз.
Вы можете выбрать кеширование токена и сравнить его с только что полученным токеном (например, сохранить его в NSUserDefaults) - таким образом вам не нужно сообщать его обратно на сервер, если он не изменился с момента последнего запуска , но вам обязательно нужно проверить, в противном случае ваши пользователи будут приходить с жалобами на то, что они больше не получают push-уведомлений, поскольку они заменили свой телефон.