我知道您可以使用以下方法获取设备令牌: -
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
但是,如果我理解正确,此方法仅在应用程序第一次运行且用户接受通知请求时被调用。在随后重新启动应用程序时,永远不会再次调用该方法。
所以我的问题是 - 用户接受通知后是否还有其他方法可以访问设备令牌?
编辑 - 我知道所有设备都在线且临时配置文件已链接到应用ID,因为我可以接收推送通知。接收推送通知不是问题 - 获取设备令牌并将其存储在Parse中是我想要实现的。
由于
答案 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)];
这可能适用于您的问题