如果APNS设备令牌过期会发生什么?

8
根据这篇论坛帖子APNS设备令牌一旦创建是否会改变?,设备令牌可能会过期或APNS会更改设备令牌。我的问题是,如果服务器将过期的令牌发送给Apple,APNS是否会使用过期的令牌进行通知?APNS能否将此过期令牌用于另一个设备?
1个回答

12

我个人没有遇到过设备令牌过期的情况,所以无法从我的个人经验告诉你答案。苹果的APNS文档也无法回答你的问题(我已经多次阅读了所有APNS文档)。

无论你的问题的答案是什么,你的应用和服务器都应该能够处理设备令牌的过期。

  1. 每次启动应用时都要调用 registerForRemoteNotificationTypes,并且如果该设备的最后一次令牌与之前不同,则将其发送到服务器。

  2. 为每个使用您的应用程序的设备分配另一个唯一标识符。让应用程序将该标识符与设备令牌一起发送到服务器。这样,如果设备令牌发生更改,您的服务器将知道它是现有设备的新设备令牌,而不是您的应用程序安装在新设备上。

  3. 遵循#1和#2,可以确保您的服务器具有最近启动您的应用程序的每个设备的当前设备令牌(在最近未启动您的应用程序的设备上,用户可能不太关心您的应用程序,因此我不确定向它们发送推送通知是否会有任何区别)。

  4. 如果您向旧设备令牌发送通知,如果它有效,那么一切都很好。如果不是,则会收到无效的令牌错误响应或在反馈服务中收到该设备令牌。在这两种情况下,您应停止向该令牌发送通知。

  5. 我假设APNS不会将过期的令牌重新用于另一个设备,但如果确实如此,则可以通过使用我在#2中建议的唯一标识符来识别它。在这种情况下,请确保您的服务器仅将设备令牌分配给另一个设备。


4
问题在于如何维护这个唯一标识符?如果用户安装/卸载应用程序,则此唯一标识符将丢失。如果操作系统更新,此唯一标识符(根据上述链接的设备令牌)也将丢失。是否存在设备中永远不会更改且始终唯一的唯一键? - Imran Qadir Baksh - Baloch
@user960567 唯一标识符应该存储在某个外部存储器中,当应用程序被卸载时不会被清除,并且在重新安装时可以重新使用(我知道在Android上是可能的,但不确定iOS是否支持)。我认为苹果不允许您使用设备的唯一密钥。 - Eran
如何在Android中完成这个操作? - Imran Qadir Baksh - Baloch
1
@user960567 在Android上,如果您的应用程序具有android.permission.WRITE_EXTERNAL_STORAGE权限,则可以在外部存储中创建文件。您可以在Environment.getExternalStorageDirectory().getAbsolutePath()下创建文件夹和文件。 - Eran
如果我有同一应用的多个帐户怎么办?所以在我的服务器中,我必须使用user_id、device_id和device_token来设置主键,对吗? 另外,服务器如何清理旧的令牌? @Eran - Olla Ashour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接