【问题标题】:How to manage iOS apns token changes如何管理 iOS apns 令牌更改
【发布时间】:2016-03-20 17:31:36
【问题描述】:

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

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

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

我之所以这么问,是因为在我看来这是大多数 iOS 开发人员必须处理的事情,但我找不到 Apple 提供的任何解决此问题的最佳实践,因此我希望其他人可以分享他们在此问题上的经验。

【问题讨论】:

  • 用户是否需要登录或表明身份才能使用该应用并获得通知?
  • @ares 是的,但是每个用户可以连接多个设备,所以当用户连接时,我无法判断它是新设备还是重新安装后 APNS 发生变化。
  • 附加'[[UIDevice currentDevice] name];'怎么样到令牌元数据?
  • @Ares 设备名称不是唯一的(例如'Joe's iPhone')
  • @sahara108 我下班了,我明天试试再汇报,tnx

标签: ios apple-push-notifications devicetoken


【解决方案1】:

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

每次应用启动时:

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

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

【讨论】:

  • 我更喜欢使用identifierForVendor 键。在每次应用启动时,检查 appnameVendor 键的值是否存在。如果没有从系统加载它并写下来。将新令牌和appnamVendor 的值发布到服务器。服务器将负责创建一个新的或更新退出的一个基础值
  • @sahara108 我想过这样做(这就是我为 Android 所做的),但是因为我需要保存令牌以知道它是否已更改,所以我使用令牌而不是添加另一个存储变量在钥匙串中。
  • 两种方式只存储一个变量。唯一不同的是,如果您有多个应用程序,您可以重复使用identifierForVendor,因为它在您的应用程序中是相同的。
  • 这是大多数像 Braze 这样的供应商正在做的事情吗?我在文档中找不到他们指定的内容。
猜你喜欢
  • 2020-07-09
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 2021-12-21
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多