Любое уведомление о didRegisterForRemoteNotificationsWithDeviceToken?

Запускает ли iOS NSNotification (который содержит deviceToken) при вызове didRegisterForRemoteNotificationsWithDeviceToken?

Я знаю, что всегда могу сохранить токен в NSUserDefaults из AppDelegate и получить к нему доступ в любом месте, но мне интересно, есть ли лучший способ. Я думаю что-то вроде UIApplicationDidEnterBackgroundNotification.

Обновление: вариант использования, если я хочу получить токен устройства без реализации этого метода делегата в AppDelegate.


person pshah    schedule 28.10.2013    source источник


Ответы (2)


Нет. Вам нужно будет реализовать didRegisterForRemoteNotificationsWithDeviceToken . Я бы предположил, что один аргумент против NSNotification в этой ситуации заключается в том, что вам нужно разумно обрабатывать сценарии отказа с помощью didFailToRegisterForRemoteNotificationsWithError.

person Peter Cetinski    schedule 28.10.2013
comment
Я понимаю вашу точку зрения, но это просто загромождает AppDelegate. Кроме того, подумайте о случае использования, когда вы хотите зарегистрировать уведомление из статической библиотеки, которая просто добавлена ​​в приложение, над которым у вас нет контроллера. - person pshah; 29.10.2013
comment
Если вас беспокоит беспорядок, просто делегируйте вызов другому классу для обработки логики обработки токена. На самом деле, вы приводите еще один аргумент против NSNotification в том, что как разработчик приложения я могу не захотеть, чтобы сторонние библиотеки перехватывали токены моего пользовательского устройства. - person Peter Cetinski; 29.10.2013
comment
Спасибо, Питер, похоже, и вы, и @Subzero предполагаете, что нет простого способа добиться того, что я пытался. - person pshah; 29.10.2013

Не смог правильно понять ваш вопрос.

 - (void)application:(UIApplication *)application  
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken 

Это метод, вызываемый стеком iOS (т. е. вашим делегатом приложения), когда приложение успешно регистрируется на сервере APNS, тем самым получая токен устройства.

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

(void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types.

Как правило, впоследствии необходимо отправить этот токен устройства на его сервер генерации полезной нагрузки push-уведомлений, чтобы зарегистрировать свое устройство на сервере. Это можно сделать внутри «didRegisterForRemoteNotificationsWithDeviceToken». Следовательно, я не вижу необходимости хранить токен где-либо. Кроме того, обратите внимание, что приложение регистрируется и получает токен устройства с сервера APNS каждый раз при запуске приложения (обычно не при переходе из фона на передний план, но это зависит от вашей реализации).

person Subzero    schedule 28.10.2013
comment
в порядке. Только класс UIApplication может вызывать метод registerForRemoteNotificationTypes:. Впоследствии только его делегат может обрабатывать методы отказа (didFailToRegisterForRemoteNotificationsWithError) или успеха (didRegisterForRemoteNotificationsWithDeviceToken), поскольку стек устройства информирует об этом делегата UIApplication. Итак, я думаю, что вы не можете обойтись без реализации этих методов в своем делегате приложения. - person Subzero; 29.10.2013