设备注册推送通知后iOS获取设备令牌?

时间:2014-03-27 13:12:45

标签: ios iphone objective-c apple-push-notifications

我知道您可以使用以下方法获取设备令牌: -

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

但是,如果我理解正确,此方法仅在应用程序第一次运行且用户接受通知请求时被调用。在随后重新启动应用程序时,永远不会再次调用该方法。

所以我的问题是 - 用户接受通知后是否还有其他方法可以访问设备令牌?

编辑 - 我知道所有设备都在线且临时配置文件已链接到应用ID,因为我可以接收推送通知。接收推送通知不是问题 - 获取设备令牌并将其存储在Parse中是我想要实现的。

由于

3 个答案:

答案 0 :(得分:11)

你错了。

来自-application:didRegisterForRemoteNotificationsWithDeviceToken:文档:

  

委托在调用registerForRemoteNotificationTypes: UIApplication方法后收到此消息,并且注册过程中没有错误[...]此方法可以在其他罕见情况下调用,例如当用户从不是设备备份数据的数据恢复设备后启动应用程序时。在这种特殊情况下,应用程序在用户启动之前不会知道新设备的令牌。

来自Apple Push通知指南:

  

此外,永远不要缓存设备令牌并将其提供给您的提供商;始终在需要时从系统获取令牌。如果您的应用程序先前已注册,则调用registerForRemoteNotificationTypes:会导致操作系统立即将设备令牌传递给代理,而不会产生额外开销。另请注意,可以在设备令牌更改时调用委托方法,而不仅仅是响应您的应用注册或重新注册。

换句话说,无论何时调用registerForRemoteNotificationTypes:并且操作成功,以及在令牌更改的其他时间,都会调用该方法

编辑:

  

如果无法使用移动电话或Wi-Fi连接,则不会调用application:didRegisterForRemoteNotificationsWithDeviceToken:方法或application:didFailToRegisterForRemoteNotificationsWithError:方法。对于Wi-Fi连接,当设备无法通过端口5223与APN连接时,有时会发生这种情况。

或者,请确保您使用与具有推送通知权利的应用ID相关联的配置文件进行构建

答案 1 :(得分:1)

嗯,请再次尝试检查您的配置文件。听起来你可能正在使用带有通配符的一个。您可能正在接收来自服务器的推送,因为您最初使用正确的配置文件进行部署,但是如果您已更改为使用通配符配置文件(例如团队配置文件),则您将无法正确注册远程通知......

答案 2 :(得分:0)

在didiFinishLaunchingWithOption

中使用以下方法
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

这可能适用于您的问题