Регистрация приложения iPhone для push-уведомлений не работает - PullRequest
8 голосов
/ 17 января 2012

Я опробовал пример, найденный в ссылке http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12, для моего push-уведомления iPhone.Я мог успешно выполнить все шаги, кроме шагов для регистрации приложения для push-уведомлений в первый раз.

Я следовал различным вариантам кода:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

Но ни один из них не работал для меня.Я тестирую его на своем iPhone 4, и моя версия Xode - 4.2, ОС - Lion.Пожалуйста, совет.

Ответы [ 6 ]

31 голосов
/ 17 января 2012

Вы можете попробовать следующее:

  • Убедитесь, что ваш проект XCode настроен на использование явного идентификатора пакета с портала обеспечения
  • Убедитесь, что вы не строите цель с использованием группового профиля или профиля обеспечения команды, отметьте это в проекте И Настройки цели
  • Если вы создали свой профиль обеспечения перед настройкой идентификатора приложения для push-уведомлений, заново создайте профиль обеспечения

Также посмотрите на объект ошибки в методе UIApplicationDelegate

application:didFailToRegisterForRemoteNotificationsWithError:

РЕДАКТИРОВАТЬ 1

Откройте свой профиль обеспечения в текстовом редакторе и найдите строку

<key>aps-environment</key>

Если ваш профиль не содержит этого, он неправильно настроен для push.

3 голосов
/ 17 января 2012

Вот мой пример рабочего кода от делегата приложения (AppDelegate.m)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];
}

Чтобы проверить, прошла ли регистрация в порядке, реализуйте эти три метода

– application:didReceiveRemoteNotification:
– application:didRegisterForRemoteNotificationsWithDeviceToken:
– application:didFailToRegisterForRemoteNotificationsWithError:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html

Или вы можете перейти к Настройки , чтобы увидеть, есть ли доступные настройки разрешений

, например:

iPad Notification Settings

1 голос
/ 26 января 2012

Если эта проблема возникает в производственной среде (с вашим приложением в магазине приложений), вполне вероятно, что вы создали / включили производственный режим APNS для своего приложения ПОСЛЕ , создав профиль распространения.

В этом случае нет другого выбора, кроме повторной отправки с правильным сертификатом ...

Правило большого пальца: ВСЕГДА включение / создание производственного сертификата для вашего приложения ДО создание профиля распространения.

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

0 голосов
/ 22 марта 2017

Перейти к Возможности -> Push-уведомления . Если есть ошибки , попробуйте это решение!

Если Версия Xcode была изменена с 7 на 8, попробуйте это решение!

Xcode 7 копирует разрешение aps-environment из вашего профиля обеспечения. Включение push-уведомлений в Xcode 8 добавляет права как к вашему профилю предоставления, так и к файлу разрешений.

Попробуйте добавить разрешение aps-environment в файл разрешений вашего приложения или выключите и снова включите функцию уведомления.

0 голосов
/ 17 января 2012

Вы можете зарегистрировать его только в профиле обеспечения с идентификатором приложения с включенными службами push-уведомлений. Пожалуйста, проверьте эти шаги также. Это хорошее руководство для запуска push-уведомлений http://mobiforge.com/developing/story/programming-apple-push-notification-services

0 голосов
/ 17 января 2012

Вы когда-нибудь видели диалоговое окно push-уведомлений в своем приложении? Если вы закрываете диалоговое окно, его повторное показание занимает 24 часа. Проверьте это, установив время на вашем iPhone вперед на 2 дня, и посмотрите, будет ли оно отображаться.

Также вы реализовали методы делегата:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

Попробуйте вставить NSLog (@ "") в didRegisterForRemoteNotificationsWithDeviceToken и didFailToRegisterForRemoteNotificationsWithError и посмотреть, что он туда попадает?

Кроме того, вам требуется идентификатор приложения, настроенный для push-уведомлений, и вам необходимо сгенерировать сертификаты push-уведомлений для отправки сообщений.

...