IOS push-уведомления - как бороться с идентификатором устройства?

Какая наиболее часто используемая стратегия? Я пытаюсь выполнить следующее:

При запуске приложения:

  • Получить ранее сохраненный идентификатор устройства из локального хранилища
  • Получить идентификатор устройства
  • Если изменено, сохраните новый идентификатор, отправьте обновление на сервер

Это правильный подход? Каков наилучший способ хранения идентификатора устройства локально?

Ответ 1

Лучшей практикой является отправка токена устройства токена (не то же самое, что уникальный идентификатор, упомянутый Сергом Шияном) для Apple каждый раз, когда приложение запускается. Это позволит Apple узнать, что ваше приложение все еще активно.

См. регистрацию для удаленных push-уведомлений:

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

из Локальные и Push-уведомления Руководство по программированию

По моему опыту существует ряд причин, по которым токены могут быть признаны недействительными. К ним относятся приложения deinstalls и микширование приложений с различными сертификатами (dev, ad-hoc для работы с песочницами /live push-серверами). Это избавит вас от некоторой отладки, посылая токен при запуске каждый раз, как рекомендовано.

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

Ответ 2

"Буквенно-цифровая строка, уникальная для каждого устройства на основе различных деталей аппаратного обеспечения (только для чтения) (Устаревшее в iOS 5.0, вместо этого создайте уникальный идентификатор, характерный для вашего приложения.)

@property (nonatomic, readonly, retain) NSString *uniqueIdentifier

Особые соображения Не используйте свойство uniqueIdentifier. Чтобы создать уникальный идентификатор, характерный для вашего приложения, вы можете вызвать функцию CFUUIDCreate для создания UUID и записать его в базу данных по умолчанию с помощью класса NSUserDefaults. "(Apple Inc)