这是保持 APNS 设备令牌更新的标准方法吗?

Is this the standard way for keeping APNS device token updated?

我想确保我的服务器始终具有最新的 APNS 设备令牌,该令牌在特定情况下可能会发生变化。

我是否应该将它保存到钥匙串,并在启动时检查它是否不同,如果不同,然后更新服务器?

这是最好的方法吗?

没问题,您需要在每次启动应用程序时注册推送通知。正如 Apple 的文档所说,您永远不知道令牌 can/will 何时以及为何更改。

其次,您确实可以使用一些代码在本地存储令牌,以防在您尝试将令牌发送到服务器时发生服务器错误或互联网丢失。并且此逻辑可以延迟重试和最大尝试次数。但这太过分了,不像 KISS。

您可以做的是从 didRegisterForPushNotification 获取它并在本地存储它后立即发送它,并且每次您的应用程序的用户进行 "update settings" 调用时也同时发送它。

Apple 实际上说不要在本地存储设备令牌。当您需要设备令牌时,您可以调用 registerForRemoteNotifications()。来自苹果:

Never cache a device token; always get the token from the system whenever you need it. If your app previously registered for remote notifications, calling the registerForRemoteNotifications method again does not incur any additional overhead, and iOS returns the existing device token to your app delegate immediately. In addition, iOS calls your delegate method any time the device token changes, not just in response to your app registering or re-registering.

所以您需要做的是在启动时注册远程通知,并将该令牌发送到您的服务器。来自苹果: Device tokens can change, so your app needs to reregister every time it is launched and pass the received token back to your server.

您可以在此处找到更多文档:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW25