如何pipe理iOS的apns令牌更改

我有一个问题,在卸载并重新安装我的应用程序后,用户开始接收双重通知,因为设备发送给我的服务器2个不同的APNS令牌 – 一个是从第一个安装,另一个是重新安装应用程序。 由于令牌是不同的,我不知道这是同一个设备。

在iOS 9出来之前,每次我卸载并重新安装应用程序,我总是得到相同的APNS,所以很容易知道这是用户使用的设备。 从iOS 9开始,似乎每个安装都会更改APNS令牌。

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

我在问,这听起来像是大多数iOS开发人员必须处理的事情,但是我无法从苹果公司find任何有关如何解决这个问题的最佳做法,所以我希望其他人可以分享他们在这个问题上的经验。

这就是我们最终解决的方法:

每次启动应用程序时:

  1. 创build推送通知令牌
  2. 本地存储中是否有令牌?
    • 是 – 将令牌与本地存储进行比较。 他们是一样的吗?
      • 是的 – 返回
      • 没有更新服务器与新的令牌,服务器响应后,“确定”将其保存在本地存储和钥匙串本地
    • 没有检查钥匙串中是否有令牌
      • 是 – 将令牌与钥匙串进行比较。 他们是一样的吗?
        • 是的 – 在本地存储中保存令牌并返回
        • 没有更新服务器与新的令牌,服务器响应后,“确定”保存在本地本地
          存储和钥匙链
    • 没有更新服务器与新的令牌,服务器响应后,“确定”将其保存在本地存储和钥匙串本地

如果有人有一个更优雅的方式来解决它,我很乐意听到它