Подтвердить что ты не робот

DidRegisterForRemoteNotificationsWithDeviceToken не вызывается в ios8, но didRegister... Настройки

Я выполнил этот поток, но метод didRegisterForRemoteNotificationsWithDeviceToken по-прежнему не вызывается:

В документации написано:

После вызова метода registerForRemoteNotifications Объект UIApplication, приложение вызывает этот метод, когда устройство регистрация завершается успешно

didRegisterUser отображается хорошо, но не did register notif.

Вот мой код в AppDelegate (версия приложения - 8.1):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //register notif
    UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                    UIUserNotificationTypeBadge |
                                                    UIUserNotificationTypeSound);
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil];
    [application registerUserNotificationSettings:settings];


    return YES;
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    //register to receive notifications
    [application registerForRemoteNotifications];
    NSLog(@"didRegisterUser");
}

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"error here : %@", error);//not called
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    /*
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:deviceToken];
    currentInstallation.channels = @[ @"global" ];
    [currentInstallation saveInBackground];
     */
    NSLog(@"did register notif");//not called
}

У меня также есть фоновый режим → удаленное уведомление в info.plist.

4b9b3361

Ответ 1

Ваш код кажется правильным. В качестве незначительного улучшения вы можете написать свой метод didRegisterUserNotificationSettings следующим образом:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    if (notificationSettings.types != UIUserNotificationTypeNone) {
        NSLog(@"didRegisterUser");
        [application registerForRemoteNotifications];
    }
}

Может возникнуть проблема с конфигурацией, которая приведет к сбою регистрации APN.

  • Убедитесь, что ваш профиль Provisioning Profile содержит запись aps-environment

  • Убедитесь, что у вас есть уникальный идентификатор приложения (строка без каких-либо "*" ), указанная в профиле Provisioning Profile. Вы также должны использовать этот точный идентификатор как "идентификатор пакета" в вашем Info.plist

  • Возможно, вы отказались от Push-Feature после первоначальной установки - в этом случае вы больше никогда не увидите уведомление в приложении-push-alert и должны снова включить Push-приложение в настройках.

  • Попробуйте другое устройство.

Ответ 2

После долгого поиска я обнаружил, что на 19 июля 2016 года из-за некоторой ошибки или обновления в конце Apple метод didRegisterForRemoteNotificationsWithDeviceToken не будет вызываться, даже если каждое условие, такое как подключение к Интернету, устройство и используемые методы являются идеальными.

Обратитесь к этой ссылке для подтверждения https://forums.developer.apple.com/thread/52224

Чтобы проверить, пожалуйста, просмотрите и другие приложения. Я потратил несколько часов, но надеюсь, что это поможет кому-то. Спасибо.

Ответ 3

За 19 июля 2016 года: -

В соответствии с формой разработчика Apple существует проблема с Sandbox APNS вниз... поэтому может возникнуть проблема со стороны Apple, thats почему делегаты типа application:didRegisterForRemoteNotificationsWithDeviceToken: и application:didFailToRegisterForRemoteNotificationsWithError: не вызываются.

Чтобы проверить текущий статус APNS Sandbox эта ссылка... К настоящему времени в соответствии со статусом APNS Sandbox работает нормально и нормально... так может быть и другая ошибка с яблочной стороны

Так что просто не беспокойтесь, если ваши методы идеальны и сертификаты действительны. Это просто проблема со стороны Apple. Как только проблема будет решена, ваши методы работают отлично (если с вашей стороны все в порядке).

Обратите внимание, что Production работает нормально. Поэтому проблема касается только APNS Sandbox.

Ответ 4

У меня была эта проблема и, наконец, нашел заметку на веб-сайте Apple Developer и решил эту проблему:

Регистрация, расписание и обработка уведомлений пользователей

iOS Обратите внимание, что в разделе "Регистрация для удаленных уведомлений:

iOS Примечание. Если сотовая связь или соединение Wi-Fi недоступны, не вызвано ни приложение: didRegisterForRemoteNotificationsWithDeviceToken: method, ни приложение: didFailToRegisterForRemoteNotificationsWithError: method. Для соединений Wi-Fi это иногда происходит, когда устройство не может подключаться к APN через порт 5223. Если это произойдет, пользователь может перейти в другую сеть Wi-Fi, которая не блокирует этот порт, или на iPhone или iPad, до тех пор, пока сотовая служба данных становится доступной. В любом случае устройство должно иметь возможность установить соединение, а затем вызывается один из методов делегирования.

Мой iPhone только подключился к Wi-Fi, перезагрузил iPhone и подключился к Wi-Fi AP, решив эту проблему.

Ответ 5

В моем случае, после iOS 9.3, я считаю. Если я использовал Localytics, didRegisterForRemoteNotificationsWithDeviceToken не будет вызван. Я должен удалить это из своего кода (в ApplicationDidFinishLaunchingWithOption)  [Localitics autoIntegrate: @ "xxxxx" launchOptions: launchOptions];

Ответ 6

XCode 8.3.1 и далее

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

under 'Capabilities', (next to General), 
 - Push Notifications option is turned ON`
- and under Background Modes, Remote Notifications is turned ON

Ответ 8

Пожалуйста, добавьте ниже код, он работает для меня,

 #ifdef __IPHONE_8_0
   - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
   {
   //register to receive notifications
  [application registerForRemoteNotifications];
  }

    - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler
  {
  //handle the actions
  if ([identifier isEqualToString:@"declineAction"]){
  }
 else if ([identifier isEqualToString:@"answerAction"]){
  }
 }
 #endif

Вы получите токен устройства ниже,

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

Подробнее см. Подробный ответ

Надеюсь, что это поможет кому-то.