iOS 7设备上同一设备的设备令牌不同。

16

我有两个应用在一个设备上。对于iOS 7,这两个应用程序都发送不同的设备令牌,但对于iOS 6,两个应用程序都发送相同的设备令牌。

据我理解,在一个设备中,所有应用的设备令牌必须相同。iOS 7和iOS 6有什么不同吗?

3个回答

21

更新:

我想我太快阅读了这篇文章。请注意我的修改。如果答案符合您的用例,请随意接受它。

根据您的描述,我建议在iOS6和iOS7之间生成令牌时发生了潜在的更改。为了更详细地研究这种行为,我建议您查看《本地和远程通知编程指南》。在该指南中的“调度、注册和处理通知”一节中,您将找到苹果公司的以下声明。

设备令牌可能会更改。 您的应用程序需要每次启动时重新注册——在 iOS 中通过调用 UIApplication 的 registerForRemoteNotificationTypes: 方法,在 OS X 中通过调用 NSApplication 的 registerForRemoteNotificationTypes: 方法。传递给该方法的参数指定应用程序希望接收的初始通知类型。用户可以在任何时候使用 iOS 中的“设置”或 OS X 中的“系统偏好设置”修改启用的通知类型。您可以使用 UIApplication 的 enabledRemoteNotificationTypes 属性或 NSApplication 的 enabledRemoteNotificationTypes 属性查询当前启用的通知类型。即使在通知负载中指定了这些通知类型,如果这些通知类型没有为您的应用程序启用,则系统不会徽章图标、显示警报消息或播放警报声音。

参考文献:

当用户同意从 Apple 推送服务接收远程通知时,苹果使用设备令牌。

通常情况下,可以通过以下方法访问设备令牌:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

deviceToken设备令牌是一个用于识别设备的标识符。该令牌是一种不透明的数据类型,因为提供程序在将通知发送到设备时需要将该形式提交给APS服务器。为了性能考虑,APS服务器要求使用二进制格式。

请注意,deviceToken与UIDevice的uniqueIdentifier属性不同,因为出于安全和隐私原因,在设备被擦除时,deviceToken必须更改。

在Apple推送通知服务中使用的设备令牌

UIDevice标识符也有显著更改(Apple限制了使用)。我建议阅读以下内容:


15
这篇文章也很有帮助。请参见文章中的第1点:https://support.urbanairship.com/customer/portal/articles/1321513-how-ios-7-handles-push-differently 在iOS 7之前,设备令牌在给定设备上的所有应用程序安装中是相同的。您手机上的不同应用程序(如Tap Tap Revenge或USA Today)将利用相同的地址(即设备令牌)将推送通知路由到您。您与消息配对的安全凭据将确保它到达正确的应用程序。在iOS 7上,苹果更进一步,确保每个应用程序安装中的设备令牌现在都是不同的。这有助于通过删除另一个基于电话的标识符进一步保护用户的隐私。

3
这篇文章实际上回答了这个问题,因此这个答案应该被接受。也许你应该将文章的主要观点复制到这个答案中,因为仅提供链接的答案在这里不被鼓励。 - Eran
仅提供链接的答案是不被鼓励的,原因有很多,其中之一就是链接失效。事实上,上述文章已经移动到https://support.urbanairship.com/customer/portal/articles/1321513-how-ios-7-handles-push-differently。 - John Cummings
我还添加了那篇文章的段落。 - Paragon

2
虽然这是一个很晚的答案,但我想分享一下我对i0S 9.2.1进行的测试。 设备令牌对于设备中的每个应用程序都是唯一的。每次安装应用程序时都会生成一个新的设备令牌。据我所知,自从苹果发布iOS7后,他们已经改变了设备令牌的政策。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接