在 iOS 8 中注册推送通知时如何访问 deviceToken?

Posted

技术标签:

【中文标题】在 iOS 8 中注册推送通知时如何访问 deviceToken?【英文标题】:How to access deviceToken when registering for push notifications in iOS 8? 【发布时间】:2014-11-10 14:26:59 【问题描述】:

我应该先说我已经检查过this 和this,但这两个公认的答案都没有解决我的问题。

我正在使用第三方推送通知服务,他们的registerDevice 方法需要deviceToken,例如application:didRegisterForRemoteNotificationsWithDeviceToken: 返回的那个。但是,在 ios 8 中,该方法已被弃用,取而代之的是 application:didRegisterUserNotificationSettings:,正如您所见,它没有 deviceToken

我已经尝试添加这个方法,它被调用,我希望会触发对didRegisterForRemoteNotifications的手动调用,但它没有奏效。我用这个:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings

    [application registerForRemoteNotifications];

基本上,我需要访问 deviceToken,而我无法使用新首选的 application:didRegisterUserNotificationSettings 回调来访问。

在 iOS 7 中一切正常,但在 iOS 8 中,该令牌似乎不可用。我该如何解决这个问题?

【问题讨论】:

您需要设备令牌做什么? 我使用的第三方服务需要它,用于细分、按用户标记等。是的,我已经向他们征求意见,但我不想等他们回邮件和 SO 通常更快;) 【参考方案1】:

我认为你误会了。 registerForRemoteNotifications 的回调是 didRegisterForRemoteNotificationsWithDeviceToken,在 ios8 中根本不推荐使用。我刚刚测试过这个工作正常。

在您的应用委托中,对于 ios8,您可以这样做

UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                                 categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];

你得到的回调是

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken NS_AVAILABLE_IOS(3_0);

【讨论】:

我没有看到回调。我刚刚注意到didFailToRegisterForRemoteNotifications 中有一个错误,所以我现在正在查看。这可能是根本原因。 请告诉我们结局如何 看起来这是配置问题。哎呀! 还在纠结!

以上是关于在 iOS 8 中注册推送通知时如何访问 deviceToken?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 8 中取消注册推送通知

如何在 iOS 的 Azure 移动应用通知中心注册目标推送通知

iOS 8 和 Cordova:应用程序在首次启动时立即请求推送通知权限

如何注册 iOS 设备以接收推送通知?

如何在 aws sns 中注册 iOS 设备令牌以接收推送通知?

如何注册推送通知? IOS 10