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


76

我在iTunes商店中有两个应用程序-都实现推送通知。在测试向这些生产应用发送通知的过程中,我注意到有一个针对应用A的推送已命名并打开了应用B。

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

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

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

设备令牌应该对每个应用程序都是唯一的吗?如果是这样,则不知道我的测试电话如何将两个应用程序的相同设备令牌发送到我的服务器。请记住,这来自当前在应用商店中的两个应用。

谢谢你的帮助!

Answers:


90

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

弄清楚了。设备令牌不是电话应用程序配对唯一的。它们仅对电话是唯一的。如果您在同一部手机上按下了多个应用程序,则它们都将使用相同的设备令牌。您用于发送通知的证书将决定其使用的应用程序。


1
感谢您提出的问题和答案,这很有用。每个+1。手机可以使用服务器证书来确定目标应用为开发者的意图,这很有意义。

3
嗨,@ Mups。在开头的问题中,您指出:“根据需要,我正在服务器上使用两个不同的证书-每个应用程序一个。” 然后,在您的答案中说:“您用于发送通知的证书将决定该证书转到哪个应用程序。”...。为什么它不起作用?我将为后端实现类似的设置,并且我想确定。谢谢。
tompave 2012年

2
另外,请注意,设备令牌因构建类型而异。开发版本具有一个设备令牌,而分发(生产)版本具有另一个设备令牌。当用户重新安装操作系统时,设备令牌也会重置为其他名称。
radesix

7
这是一个旧答案,适用于旧iOS(即iOS 6及更低版本)。从iOS 7开始,苹果更改了规则,并且设备令牌不再是设备唯一的。与iOS 6及以下版本不同,同一设备上的所有应用程序都将具有不同的令牌。
Kameshwar Sheoran

2
否决此意见,因为它已不再是最新。请参阅user1641761的答案。
丹尼尔(Daniel)

52

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设备令牌对于同一设备是不同的


16

分享我的理解和Apple Developers的一些答案:

  • 设备令牌
    • 设备令牌是设备的唯一标识符。
    • APN使用唯一的设备证书生成设备令牌(可能正在使用供应配置文件)
    • 设备令牌可能会更改。因此,请确保每次都将更新的设备令牌发送到服务器。
    • 设备令牌对于设备上的所有应用都是相同的。
    • 它是特定于设备的,而不是特定于应用程序的。
    • 对于沙盒和生产,设备令牌可能会有所不同。
      • 基于供应配置文件(沙箱或生产),APN可以为沙箱和同一设备的生产生成不同的设备令牌。
    • 然后,如何在设备上区分推送通知?它适用于哪个应用程序?
      • 它基于服务器上安装的应用程序标识符和SSL证书(通过通知将其推送到APNs服务器)来执行此操作。
  • 参考文献

1
错误或过时的答案。根据Apple文档,您的答案不再有效。请点击这里参阅文件developer.apple.com/library/content/documentation/...
奥古斯丁PA

设备令牌对于设备上的所有应用都是相同的。不,这就像-成功注册后,APN会将特定于应用程序的设备令牌发送到设备。
Nico


1

推送通知的设备令牌是特定于应用程序的。并非特定于设备。也就是说,设备令牌对于同一设备中的多个应用将是不同的且是唯一的。

根据苹果的说法,

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

  • 启用远程通知。

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

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

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

特定于应用的设备令牌在全球范围内是唯一的,并且标识一个应用与设备的组合。从应用程序中的APN接收到设备令牌后,您有责任打开与提供商之间的网络连接。然后,您有责任在应用中转发设备令牌以及您要发送给提供商的其他任何相关数据。当提供者以后将远程通知请求发送到APN时,它必须包括设备令牌以及通知有效负载。有关更多信息,请参阅APNs概述。

切勿在您的应用程序中缓存设备令牌;而是在需要时从系统中获取它们。当某些事件发生时,APN会向您的应用发布新的设备令牌。保证设备令牌是不同的,例如,当用户从备份中还原设备时,当用户在新设备上安装您的应用程序以及当用户重新安装操作系统时。获取令牌而不是依赖缓存,可确保您拥有提供者与APN通信所需的当前设备令牌。当您尝试获取设备令牌但未更改时,fetch方法将快速返回。

您可以在此处参考Apple文档本地和远程通知编程指南


0

您不能将令牌用作唯一标识符,但可以使用keygen中的save(来自itunes的帮助)删除旧令牌,并删除旧令牌并在数据库中添加新令牌。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.