我们是否应该在应用程序启动期间每次注册iOS推送通知?

问题描述 投票:4回答:1

我们在iOS应用程序中使用远程通知,我们正在注册应用程序内的APNS服务器:didFinishLaunching:delegate方法。这意味着每次应用程序刚刚启动时,它都将在APNS服务器上注册。以下是代码段。

[[UIApplication sharedApplication] registerForRemoteNotifications]

我们注意到设备令牌(由APNS服务器交付给我们)每次都是相同的。因此,我们认为我们可以在NSUserDefaults中保存令牌并在以后使用它。在application:didFinishLaunching:方法中,我们可以检查NSUserDefaults中是否存在设备令牌。如果它可用,我们可以使用相同而不是注册到APNS。否则,我们可以选择向APNS注册。

但是,从Apple文档中可以看出,“他们鼓励我们在每次新推出应用程序时注册远程通知”。以下是文档的截图。

设备令牌值何时实际更改?我是否能够将设备令牌存储在NSUserDefaults中并在以后使用它而不是每次都注册?请帮忙!!提前致谢!!

ios xcode
1个回答
10
投票

用一些苹果文档回答你的问题:

令牌信任的这一阶段的形式确保只有APN生成它稍后才会尊重的令牌,并且它可以确保设备传递给它的令牌与之前为该特定设备配置的令牌相同 - 并且仅对于那个设备。

如果用户将备份数据还原到新设备或重新安装操作系统,则设备令牌会更改。

这意味着您不应该将令牌真正存储在NSUserDefaults中。

但是,如果你想保存它,我建议将它保存在钥匙串中。请参阅此示例如何执行此操作:Store Device Token in Keychain

Apple文档的另一个引用:

“通过每次启动应用程序时请求设备令牌并将其传递给提供程序,您可以帮助确保提供程序具有设备的当前令牌。如果用户将备份还原到备份所属的设备之外的设备为(例如,用户将数据迁移到新设备)创建,他或她必须至少启动一次应用程序才能再次接收通知。如果用户将备份数据恢复到新设备或重新安装操作系统,此外,永远不要缓存设备令牌并将其提供给您的提供者;总是在需要时从系统获取令牌。如果您的应用程序先前已注册,则调用registerForRemoteNotificationTypes:iOS中的结果将设备令牌传递给代理立刻不会产生额外的开销。“

编辑:看起来上面链接到Apple的文档已被打破。这是一个更新的链接(感谢@Enrico Cupellini):https://developer.apple.com/library/content/technotes/tn2265/_index.html

© www.soinside.com 2019 - 2024. All rights reserved.