2016-09-19 6 views
4

У меня 2 Iphones: 1 - с прошивкой 10 и 2 - с прошивкой 9didRegisterForRemoteNotificationsWithDeviceToken не вызывается на ios10

При попытке 1-й Iphone:

didRegisterForRemoteNotificationsWithDeviceToken метод не вызывается, когда пользователь нажимает " разрешить "по тревоге Хотя, вызван метод didRegisterUserNotificationSettings. В этом случае устройство НЕ принимает push-уведомления.

При попытке на 2-й Iphone:

называются здесь Оба метода. И устройство ДОЛЖНО получать push-уведомления.

Затем я проверил на тренажере КСН 8

В этом случае такой же, как и в 1-ом. Вызывается только один метод.

Я проверил несколько ответов по аналогичному вопросу, но они мне не помогли. Я сомневаюсь, что проблема находится где-то в настройках push-уведомлений, cuz ios 9 работает нормально. Так что вопрос находится где-то в пределах КСН 10.

Сами вопросы:

  1. Как я могу вызвать метод didRegisterForRemoteNotificationsWithDeviceToken
  2. Или как я могу получить маркер устройства, поскольку это цель

Ждем вас к помощи!

+0

Как вы регистрировались для уведомлений? Вы регистрировались с использованием '-registerUserNotificationSettings:' и '-registerForRemoteNotifications' из' UIApplication'? Последнее необходимо для вызова 'didRegisterForRemoteNotificationsWithDeviceToken'. См. Https://developer.apple.com/reference/uikit/uiapplication/1623078-registerforremotenotifications. – Roy

+0

Возможно, вы можете получить помощь отсюда. https://www.sitepoint.com/developing-push-notifications-for-ios-10/ –

+0

Вы можете выполнить описанные выше шаги, чтобы получать уведомления о работе в ios 10 http://stackoverflow.com/questions/39572897/ ИОС-10-нажимной уведомительный эмиссионные решена –

ответ

9

Для iOS 10 с использованием xCode 8 GM.

Эта проблема решена следующими шагами. Требования: - Xcode 8 GM Seed. MAC OS: - Капитан EL 10.11.6

Не удаляйте свой код для версий IOS 9 или ниже.

Шаг 1: - Перейти к -> Настройки цели в Xcode -> Возможности -> Включить PushNotifications.

Шаг 2: - Добавить рамки UserNotifications -> Build Phase -> Link Libraries

Шаг 3: -

#import <UserNotifications/UserNotifications.h> 
@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate> 

@end 

Шаг 4: - В метод didFinishLaunchingWithOptions регистрируется для UIUserNotificationSettings.

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

    if(SYSTEM_VERSION_EQUALTO(@"10.0")){ 
     UNUserNotificationCenter *notifiCenter = [UNUserNotificationCenter currentNotificationCenter]; 
     notifiCenter.delegate = self; 
     [notifiCenter requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){ 
      if(!error){ 
       [[UIApplication sharedApplication] registerForRemoteNotifications]; 
      } 
     }]; 
    } 

    return YES; 
    } 

Шаг 5: - Реализовать 2 метода делегата UNUserNotificationCenterDelegate.

-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{ 

//Do Your Code.................Enjoy!!!! 
    } 

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{ 

} 
0

Вы должны вызвать этот метод внутри didFinishLaunchingWithOptions

func registerForNotifications(){ 
     if #available(iOS 10.0, *) { 
      let center = UNUserNotificationCenter.current() 
      center.delegate = self 
      center.requestAuthorization(options:[.alert,.sound,.badge]) { (granted, error) in 
       if granted{ 
        UIApplication.shared.registerForRemoteNotifications() 
       }else{ 
        print("Notification permission denied.") 
        if !(SharedPrefs.sharedInstance!.isLoggedIn){ 
         Defaults.sharedPref.removeNotificationToken() 
        }else{ 
         UIApplication.shared.unregisterForRemoteNotifications() 
         print("We will delete the token at the time of logout") 
        } 
       } 
      } 

     } else { 
      // For ios 9 and below 
      let type: UIUserNotificationType = [.alert,.sound,.badge]; 
      let setting = UIUserNotificationSettings(types: type, categories: nil); 
      UIApplication.shared.registerUserNotificationSettings(setting); 
      UIApplication.shared.registerForRemoteNotifications() 
     } 
    } 
0

Вы можете захотеть, чтобы проверить параметры проекта. Выберите свой проект. Перейдите во вторую вкладку -> Возможности -> Выберите Push Notification в положение ON.