如何管理 iOS apns 令牌更改

How to manage iOS apns token changes

我遇到了一个问题,用户在卸载并重新安装我的应用程序后开始收到双重通知,因为设备向我的服务器发送了 2 个不同的 APNS 令牌 - 一个来自第一次安装,另一个在重新安装应用程序后。由于令牌不同,我不知道这是同一台设备。

直到iOS9出来,每次卸载重装APP,得到的APNS都是一样的,所以很容易就知道这是用户之前使用的同一台设备。自 iOS 9 以来,APNS 令牌似乎在每次安装时都会更改。

我的问题是如何判断客户端是否卸载并重新安装应用程序,并更新他的 APNS 令牌而不是添加新令牌?

我想问的是,这听起来像是大多数 iOS 开发人员必须处理的事情,但我无法从 Apple 找到任何关于如何解决这个问题的最佳实践,所以我希望其他人可以分享他们在这个问题上的经验。

这就是我们最终解决问题的方式:

在每次应用启动时:

  1. 创建推送通知令牌
  2. localstorage中有token吗?
    • 是 - 将令牌与本地存储进行比较。它们相同吗?
      • 是 - return
      • 否 - 使用新令牌更新服务器,并在服务器响应 'OK' 后将其保存在本地存储和钥匙串中
    • 否 - 检查钥匙串中是否有令牌
      • 是 - 将令牌与钥匙串进行比较。它们相同吗?
        • 是 - 在本地存储中保存令牌并且 return
        • 否 - 使用新令牌更新服务器,并在服务器响应 'OK' 后将其保存在本地
          存储和钥匙串
    • 否 - 使用新令牌更新服务器,并在服务器响应 'OK' 后将其保存在本地存储和钥匙串中

如果有人有更优雅的解决方法,我很想听听