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

时间:2013-06-07 10:44:11

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

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

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

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

但问题是,当从设备中删除应用程序时,NSUserDefaults会被删除,但推送设置却没有。因此它不会再次询问,因此不再调用委托方法,因此我不再拥有令牌,但仍然激活了推送。

有没有机会在描述的场景中取回令牌?

2 个答案:

答案 0 :(得分:23)

来自Push Notification Programming Guide

  

应用程序应在每次启动时注册并提供   提供当前令牌。它叫做   registerForRemoteNotificationTypes:开始的方法   注册过程。

     

通过请求设备令牌并将其传递给提供者   您的应用程序启动时,您可以帮助确保提供程序   拥有设备的当前令牌。如果用户将备份还原到   设备或计算机,而不是为其创建备份的设备或计算机   (例如,用户将数据迁移到新设备或计算机),他   或者她必须至少启动一次申请才能收到   再次通知。如果用户将备份数据还原到新设备   或计算机,或重新安装操作系统,设备令牌   变化。此外,永远不要缓存设备令牌并将其提供给您   供应商;始终在需要时从系统获取令牌。   如果您的申请已经注册,请致电   registerForRemoteNotificationTypes:操作系统中的结果   将设备令牌立即传递给代理人而不会产生任何影响   额外的开销。

回答你的问题:每次发布时都要调用registerForRemoteNotificationTypes:,并使用最新的令牌。

答案 1 :(得分:3)

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