当您第一次安装应用并想要注册推送通知时,应用会询问您是否要接收提醒。即使在删除应用程序后,这也会永久保存在设置中。
基本上,为了保存令牌,我们这样做:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *token = [[[deviceToken description]
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" " withString:@""];
[[NSUserDefaults standardUserDefaults] setValue:token forKey:kDeviceTokenKey];
}
但问题是,当从设备中删除应用程序时,NSUserDefaults会被删除,但推送设置却没有。因此它不会再次询问,因此不再调用委托方法,因此我不再拥有令牌,但仍然激活了推送。
有没有机会在描述的场景中取回令牌?
答案 0 :(得分:23)
来自Push Notification Programming Guide
应用程序应在每次启动时注册并提供 提供当前令牌。它叫做 registerForRemoteNotificationTypes:开始的方法 注册过程。
通过请求设备令牌并将其传递给提供者 您的应用程序启动时,您可以帮助确保提供程序 拥有设备的当前令牌。如果用户将备份还原到 设备或计算机,而不是为其创建备份的设备或计算机 (例如,用户将数据迁移到新设备或计算机),他 或者她必须至少启动一次申请才能收到 再次通知。如果用户将备份数据还原到新设备 或计算机,或重新安装操作系统,设备令牌 变化。此外,永远不要缓存设备令牌并将其提供给您 供应商;始终在需要时从系统获取令牌。 如果您的申请已经注册,请致电 registerForRemoteNotificationTypes:操作系统中的结果 将设备令牌立即传递给代理人而不会产生任何影响 额外的开销。
回答你的问题:每次发布时都要调用registerForRemoteNotificationTypes:
,并使用最新的令牌。
答案 1 :(得分:3)
每次启动您的应用程序时都会调用registerForRemoteNotificationTypes
,以便您的didRegisterForRemoteNotificationsWithDeviceToken
方法获得通话,每次从APNS获取您的设备令牌。每次启动时,应用程序的设备令牌都是相同的。