删除应用程序后,获取推送通知的设备令牌

当您第一次安装应用程序并希望注册推送通知时,应用程序会询问您是否要接收提醒。 这是永久保存在设置中,即使删除的应用程序。

基本上,为了保存令牌,我们正在这样做:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *token = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""]; [[NSUserDefaults standardUserDefaults] setValue:token forKey:kDeviceTokenKey]; } 

但问题是,当应用程序从设备中删除,NSUserDefaults被抹去,但推设置不是。 所以它不会再询问,因此不要再调用委托方法,因此我没有这个标记了,但是仍然激活了。

在描述的场景中是否有机会获得令牌?

从推送通知编程指南

应用程序应该在每次启动时注册,并为其提供者提供当前令牌。 它调用registerForRemoteNotificationTypes:方法来启动注册过程。

每次启动应用程序时,通过请求设备令牌并将其传递给提供者,可以帮助确保提供者拥有设备的当前令牌。 如果用户将备份恢复到除创build备份以外的设备或计算机(例如,用户将数据迁移到新设备或计算机),则必须至less启动一次该应用程序再次收到通知。 如果用户将备份数据恢复到新设备或计算机,或者重新安装操作系统,则设备令牌将发生更改。 此外,永远不要caching设备令牌并将其提供给您的提供商; 每当需要时总是从系统获取令牌。 如果您的应用程序先前已注册,则调用registerForRemoteNotificationTypes:将导致操作系统立即将设备令牌传递给委托,而不会产生额外开销。

要回答你的问题:在每次启动时调用registerForRemoteNotificationTypes:并使用最新的标记。

每次启动应用程序时调用registerForRemoteNotificationTypes ,以便您的didRegisterForRemoteNotificationsWithDeviceToken方法获得调用,并且每次从APNS获取您的设备令牌。 您的应用程序的设备令牌在每次启动时都是相同的。