【问题标题】:What Happen If a APNS Device Token Expired?如果 APNS 设备令牌过期会怎样?
【发布时间】:2013-12-13 03:15:01
【问题描述】:

根据此论坛帖子Does the APNS device token ever change, once created? 设备令牌可能已过期或 APNS 可能会更改设备令牌。我的问题是,如果服务器将此过期令牌发送给 Apple,APNS 是否会使用过期令牌进行通知? APNS 可以将此过期令牌用于其他设备吗?

【问题讨论】:

    标签: objective-c push-notification apple-push-notifications


    【解决方案1】:

    我从来没有遇到过过期的设备令牌,所以我无法根据我的个人经验告诉你。我也不能从 Apple 的 APNS 文档中告诉你,因为他们没有回答你的问题(而且我不止一次阅读了他们所有的 APNS 文档)。

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

    1. 在您的应用启动时始终调用registerForRemoteNotificationTypes,如果它与您的应用在该设备上获得的最后一个设备令牌不同,则将设备令牌发送到服务器。

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

    3. 遵循 #1 和 #2 将确保您的服务器将拥有最近启动您的应用程序的每台设备的当前设备令牌(在最近未启动您的应用程序的设备上,用户可能没有)不太关心你的应用,所以我不确定向他们发送推送通知会有什么不同)。

    4. 如果您确实向旧设备令牌发送通知,如果它有效,那么一切都很好。如果没有,您将收到 Invalid Token 错误响应,或者您会在反馈服务中获得该设备令牌。在这两种情况中的任何一种情况下,您都应该停止向该令牌发送通知。

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

    【讨论】:

    • 问题是这个唯一标识符是如何维护的?如果用户安装/卸载应用程序,此唯一标识符将丢失。如果操作系统更新,这个唯一标识符(和设备令牌,根据上面的链接)将丢失。设备中是否有任何唯一密钥永远不会更改并且对于该设备保持唯一?
    • @user960567 唯一标识符应该存储在一些外部存储中,在卸载应用时不会被擦除,并且可以在重新安装时重新使用(我知道在 Android 上是可能的,虽然不确定iOS)。我认为 Apple 不允许您使用设备的唯一密钥。
    • 如何在 Android 中做到这一点?
    • @user960567 在 Android 上,如果您的应用具有 android.permission.WRITE_EXTERNAL_STORAGE 权限,您可以在外部存储中创建文件。您可以在Environment.getExternalStorageDirectory().getAbsolutePath()下创建文件夹和文件。
    • 如果我有多个帐户用于同一个应用程序怎么办?所以在我的服务器中,我必须使用 user_id、device_id 和 device_token 来设置主键,对吗?此外,服务器将如何清理旧令牌? @Eran
    猜你喜欢
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多