推送通知:将设备令牌与设备关联

当这种情况发生时,我的应用程序正在接收与以前的应用程序用户帐户关联的推送通知:

  1. 玩家安装应用程序并注册为“bob”
  2. bob的设备令牌在Web服务中注册
  3. 玩家重新安装了应用程序并注册为“phil”(在同一设备上)
  4. phil的设备令牌在Web服务中注册

即使玩家现在以“phil”身份login,他们仍将继续接收与“bob”以及“phil”相关的帐户的推送通知。

如果我使用的是UDID,我可以确保每个设备只注册一个设备令牌,因此从玩家旧的Web服务帐户“bob”中删除UDID和设备令牌,从而确保每个设备只有一个活动帐户。 当玩家注册为“phil”时,会发生这种情况,并且networking服务器可以看到玩家已经注册了具有相同UDID的新帐户,然后从具有该UDID的任何旧帐户中移除UDID和设备令牌(即“bob”帐户)。 没有更多的推送通知将被发送到鲍勃帐户,直到有人再次login到该帐户(在同一设备上,或一个新的)。

但是,使用CFUDIDCreate时,这是不可行的,因为它可能会在安装之间改变。

如何确保只接收当前login用户的推送通知? 或者,换句话说,我如何确保我的Web服务器每个设备只存储一个设备令牌?

您可以使APNS令牌成为关键的服务器端,而不是设备特定的标识符。 当重新安装应用程序时,您将用(APNS令牌,“phil”)replace现有的(APNS令牌,“bob”)logging,从而在重新安装应用程序时移除令牌和bob的帐户之间的链接。

据我所知,APNS令牌不会改变应用程序的重新安装,所以这应该工作。 (如果它在未来版本的iOS中重新安装之间发生了变化,这不会是一个问题,因为旧的令牌不再有效,所以设备不会收到发送给bob的通知)。

在重新安装应用程序的情况下,生成的设备令牌和以前一样吗? 我想不是。 你有两个不同的设备令牌在你的服务器上注册,一个是'bob',另外一个是'phil',或者不是?

在这种情况下,令牌指的是“bob”无效,您可以使用APNS反馈服务进行过滤, APNS反馈服务会不断更新,“每个应用程序列表中包含失败传递尝试的设备。以二进制格式编码的设备令牌标识,供应商应定期查询反馈服务,获取其应用程序的设备令牌列表,每个设备令牌都由其主题标识,然后在validation应用程序最近未被重新validation之后,注册在已识别的设备上,供应商应该停止向这些设备发送通知。“

祝你好运!

在iOS 9.x之后,设备令牌在应用程序的每次安装中始终是唯一且唯一的。 您可以将UUId标记保存到Keychain。 甚至在重新安装应用程序之后,钥匙串始终保持着令牌。 您可以在这里find钥匙链文件