在ios10上没有调用didRegisterForRemoteNotificationsWithDeviceToken

时间:2016-09-19 12:56:50

标签: objective-c push-notification ios10 devicetoken

我有2部iphone:1 - ios 10和2 - ios 9

尝试第一部iphone:

当用户点击"允许"时,不会调用

didRegisterForRemoteNotificationsWithDeviceToken方法。在警报上 但是,调用方法didRegisterUserNotificationSettings。 在这种情况下,设备不会收到推送通知。

尝试第二部iphone:

这两种方法都在这里调用。并且设备会收到推送通知。

然后我查看了模拟器ios 8

在这种情况下与第1次相同。只调用一种方法。

我检查了类似问题的一些答案,但他们并没有帮助我。 我怀疑这个问题是在推送通知设置中的某个地方,因为它可以正常工作。 所以这个问题就在ios 10中。

问题是:

  1. 如何调用方法didRegisterForRemoteNotificationsWithDeviceToken
  2. 或者如何获取设备令牌,因为它是目标
  3. 期待您的帮助!

3 个答案:

答案 0 :(得分:9)

对于使用xCode 8 GM的iOS 10。

此问题通过以下步骤解决。 要求: - Xcode 8 GM Seed。 MAC OS: - EL 10.11.6上尉

请勿删除IOS 9或更低版本的代码。

第1步: - 转到 - > Xcode中的目标设置 - >能力 - >启用PushNotifications。

第2步: - 添加UserNotifications框架 - >构建阶段 - >链接库

第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: - 实施UNUserNotificationCenterDelegate的2个委托方法。

    -(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{

}

答案 1 :(得分: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()
        }
    }

答案 2 :(得分:0)

您可能需要查看“项目设置”。选择您的项目。转到第二个标签 - &gt;能力 - &gt;选择推送通知为开。