IOS: как зарегистрироваться для push-уведомлений?
Я пытаюсь реализовать Push Notifications для моего приложения iOS 5 в руководстве от Ray Wenderlich: http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12.
Я добавил следующее в мой метод didFinishLaunchingWithOptions
в приложении AppDelegate:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
При запуске приложения на моем устройстве (а не в симуляторе) всплывающее/предупреждающее сообщение о том, что я принимаю push-уведомления, не отображается. Я вставил точку отладки в строке, и я вижу, что вызывается registerForRemoteNotificationTypes
.
Почему ничего не происходит?
Ответы
Ответ 1
Возможно, удалите приложение и повторите попытку. Этот диалог появляется только один раз. Но я не уверен, будет ли этот диалог появляться снова при повторной установке этого приложения.
Вы также можете перейти в приложение настройки в центр уведомлений, посмотреть, включено ли ваше приложение в список.
Вы также можете добавить точку останова и посмотреть, выполняется ли doneRegisterForRemoteNotificationsWithDeviceToken.
Ответ 2
У меня была эта точная проблема (с тем же учебником), и я обнаружил, что я подписываю код с неправильным профилем подготовки.
В частности, я только активировал push-оповещения "Производство" для моего приложения (так как я не хотел делать сертификаты дважды и т.д.), но мои настройки сборки в Xcode использовали "iPhone Development" как стандартную "идентификацию подписи кода" для "Release", а не "iPhone Distribution", как и следовало ожидать. Это, по-видимому, значение по умолчанию в моем тестовом приложении.
Надеюсь, я могу остановить другого, теряющего время на ту же проблему.
Ответ 3
Из iOS 8 появился новый метод для этого. Прямо от UIApplication.h
:
- (void)registerForRemoteNotifications NS_AVAILABLE_IOS(8_0);
Вызов этого приведет к вызову application:didRegisterForRemoteNotificationsWithDeviceToken:
или application:didFailToRegisterForRemoteNotificationsWithError:
для делегирования приложения.
Примечание: эти обратные вызовы будут выполнены только в том случае, если приложение успешно зарегистрировалось для уведомлений пользователей с помощью registerUserNotificationSettings:
или если оно включено для обновления фонового приложения.