APN设备令牌对每个单独的应用程序都是唯一的吗?

我在iTunes商店有两个应用程序 – 都实现推送通知。 当我testing向这些生产应用程序发送通知时,我注意到针对应用程序A的推送命名并打开了应用程序B.

这两个应用程序都安装在同一部手机上。 我查看了我的设备表,看到为这两个应用列出的设备令牌(当然还有设备ID)都是一样的。

根据需要,我在服务器上使用两个不同的证书 – 每个应用程序一个。 我有点认为设备令牌或证书会将消息路由到正确的应用程序,但显然不是。

我可以看到在NSLog中,从每个应用程序发送的令牌确实是相同的。

设备令牌应该是独一无二的每个应用程序? 如果是这样,任何想法如何我的testing手机可以将两个应用程序相同的设备令牌发送到我的服务器。 请记住,这是来自App Store上的两个应用程序。

谢谢你的帮助!

注意 :这是一个旧的答案,只适用于iOS <= 6。请参阅user1641761对当前方法的答案 。

弄清楚了。 设备令牌不是电话应用程序配对唯一的。 他们是唯一的手机。 如果您有多个应用程序在同一个电话上推送,他们将使用相同的设备令牌。 您用来发送通知的证书将决定它将转到哪个应用程序。

iOS 7处理这个不同。 现在是唯一的。

请参阅本文中的第1点: http : //urbanairship.com/blog/2013/10/03/how-ios-7-handles-push-differently

“在iOS 7之前,设备令牌在给定设备上的所有应用程序安装中是相同的。手机上的不同应用程序,无论是Tap Tap Revenge还是USA Today,都将使用相同的地址(即设备令牌)来路由推送通知给你,与消息配对的安全凭证可以确保将它传递给正确的应用程序在iOS 7上,Apple已经更进一步,确保每个应用程序安装中的设备令牌都不同。通过删除另一个电话级别的标识来进一步保护用户的隐私。“

另请参见ios 7设备令牌对于相同的设备是不同的

分享我对苹果开发者的理解和回答:

  • 设备令牌
    • 设备令牌是设备的唯一标识符。
    • APN使用唯一设备证书生成设备令牌(可能正在使用供应configuration文件)
    • 设备令牌可能会更改。 因此,请确保每次将更新的设备令牌发送到您的服务器。
    • 设备令牌与设备上的所有应用程序相同。
    • 它是设备特定的,而不是应用程序特定的。
    • 设备令牌可能与沙盒和生产有所不同。
      • 根据供应configuration文件(沙箱或生产),APN可能为同一设备的沙箱和生产产生不同的设备令牌。
    • 那么,推送通知如何在设备上进行区分呢? 它是哪个应用程序?
      • 它基于安装在服务器上的应用程序标识符和SSL证书(使用它将通知推送到APN服务器)。
  • 参考

这就是说,请记住,苹果保留权利,以他们认为合适的方式更改设备APNToken,所以不要用它来唯一标识设备/用户。

推送通知的设备令牌是特定于应用程序的。 不是设备特定的。 即设备令牌对于同一设备中的多个应用将是不同的和唯一的。

据苹果介绍,

通过支持远程通知,即使应用程序未运行,您也可以为应用程序的用户提供最新的信息。 为了能够接收和处理远程通知,您的应用程序必须:

  • 启用远程通知。

  • 注册Apple推送通知服务(APNs)并接收特定于应用程序的设备令牌。

  • 将设备令牌发送到您的通知提供商服务器。

  • 实施支持处理传入的远程通知。

应用程序特定的设备令牌是全球唯一的,并标识一个应用程序设备组合。 在您的应用程序中收到来自APN的设备令牌后,您有责任打开与您的提供商的networking连接。 在您的应用程序中,您也有责任将设备令牌以及要发送给提供商的任何其他相关数据一起转发。 当提供者稍后向APN发送远程通知请求时,它必须包括设备令牌以及通知有效载荷。 有关更多信息,请参阅APN概述。

切勿在您的应用中caching设备令牌; 相反,当你需要的时候,从系统中获取它们。 当某些事件发生时,APN向您的应用发布新的设备令牌。 例如,当用户从备份恢复设备,用户在新设备上安装应用程序以及用户重新安装操作系统时,设备令牌会有所不同。 获取令牌而不是依赖caching,可确保您拥有供应商与APN进行通信所需的当前设备令牌。 当您尝试获取设备令牌但没有更改时,获取方法会很快返回。

您可以在这里参考苹果文件本地和远程通知编程指南

你不能使用令牌作为唯一的标识符,但使用保存在keygen(从iTunes的帮助)删除旧的令牌,并删除旧的令牌,并添加一个新的数据库。