我在iTunes商店有两个应用程序 - 都实现推送通知。当我测试向这些制作应用程序发送通知时,我注意到针对应用A的推送标题并打开了应用B.
这两个应用都安装在同一部手机上。我查看了我的设备表,看到为两个应用程序列出的设备令牌(当然,设备ID)都是相同的。
根据需要,我在服务器上使用两个不同的证书 - 每个应用程序一个。我有点假设设备令牌或证书会将消息路由到正确的应用程序,但显然不是。
我可以在NSLog中看到从每个应用程序发送的令牌确实是相同的。
设备令牌是否应该是每个应用程序的唯一?如果是这样,任何想法我的测试手机如何将两个应用程序的相同设备令牌发送到我的服务器。请注意,这是来自应用商店目前的两个应用。
感谢您的帮助!
答案 0 :(得分:90)
注意 :这是一个旧答案,仅适用于iOS&lt; = 6。有关当前方法,请参阅user1641761's answer。< / em>的
想出来。设备令牌并非手机 - 应用程序配对所独有。它们仅限于手机。如果您在同一部手机上推送多个应用,则他们将使用相同的设备令牌。您用来发送通知的证书将决定它转到哪个应用程序。
答案 1 :(得分:51)
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更进一步确保设备令牌在每个应用程序安装中都不同这有助于通过删除另一个电话级标识符来进一步保护用户的隐私。“
答案 2 :(得分:15)
与Apple Developers分享我的理解和答案:
答案 3 :(得分:8)
也就是说,请记住,Apple保留根据自己的意愿更改设备APNToken的权利,因此请勿使用它来唯一标识设备/用户。
答案 4 :(得分:1)
推送通知的设备令牌是特定于应用的。不是设备特定的。即设备令牌对于同一设备中的多个应用程序将是不同且唯一的。
根据苹果的说法,
通过支持远程通知,您可以提供最新信息 即使应用未运行,也会向您的应用用户提供相关信息。至 能够接收和处理远程通知,您的应用必须:
启用远程通知。
注册Apple推送通知服务(APN)并接收特定于应用的设备令牌。
将设备令牌发送到通知提供商服务器。
实施对处理传入远程通知的支持。
特定于应用的设备令牌是全局唯一的,并标识一个 app-device组合。从APN收到设备令牌后 您的应用程序,您有责任打开网络连接 你的提供者。在您的应用中,这也是您的责任 转发设备令牌以及您想要的任何其他相关数据 发送给提供商。当提供者稍后发送远程 对APN的通知请求,必须包括设备令牌 使用通知有效负载。有关详细信息,请参阅APN概述。
永远不要在您的应用中缓存设备令牌;相反,从他们那里得到他们 系统,当你需要它们。 APN会向您的应用发出新的设备令牌 当某些事件发生时。设备令牌保证是 不同的,例如,当用户从备份恢复设备时, 当用户在新设备和用户上安装您的应用时 重新安装操作系统。获取令牌,而不是 依赖缓存,确保您拥有当前设备令牌 您的提供商需要与APN进行通信。当你尝试 获取设备令牌但它没有改变,fetch方法返回 快。
您可以在此处参考苹果文档Local and Remote Notification Programming Guide
答案 5 :(得分:0)
您不能将令牌用作唯一标识符,但可以使用keygen中的save(itunes帮助)删除旧令牌,并删除旧令牌并在数据库中添加新令牌。