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

Seb*_*mba 8 objective-c apple-push-notifications ios

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

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

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

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

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

Mar*_*0ux 23

推送通知编程指南

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

通过每次启动应用程序时请求设备令牌并将其传递给提供程序,您可以帮助确保提供程序具有设备的当前令牌.如果用户将备份还原到创建备份的设备或计算机以外的设备或计算机(例如,用户将数据迁移到新设备或计算机),则他或她必须至少启动一次该应用程序再次收到通知.如果用户将备份数据还原到新设备或计算机,或重新安装操作系统,则设备令牌会更改.此外,永远不要缓存设备令牌并将其提供给您的提供商; 始终在需要时从系统获取令牌.如果您的应用程序先前已注册,则调用registerForRemoteNotificationTypes:

回答您的问题:registerForRemoteNotificationTypes:每次启动时都要调用,并使用最新的令牌.