16

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

根据我的理解,一个设备中的所有应用程序的设备令牌必须相同。iOS7 与 iOS 6 有什么不同吗?

4

3 回答 3

21

更新:

我想我读这个有点太快了。请注意我的修改。如果答案符合您的用例,请随时接受。

根据您的描述,我建议 iOS6 和 iOS7 之间的令牌生成发生了潜在的变化。为了更仔细地检查这种行为,我建议您查看本地和推送通知编程指南。在“计划、注册和处理通知”部分的指南中,可以找到 Apple 的这一声明。

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

参考:

当用户同意接收来自 Apple 推送服务的远程通知时,Apple 会使用设备令牌。

通常通过以下方法访问设备令牌:

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

deviceToken 向 APS 标识设备的令牌。令牌是一种不透明的数据类型,因为这是提供者在向设备发送通知时需要提交给 APS 服务器的形式。出于性能原因,APS 服务器需要二进制格式。

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

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

UIDevice Identifier 也有重大变化(Apple 已限制使用)。我建议以下内容:

于 2013-10-22T18:05:07.643 回答
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 上,Apple 更进一步,确保设备令牌现在在每个应用程序安装中都不同。这有助于通过删除另一个电话级别的标识符来进一步保护用户的隐私。”

于 2013-10-22T21:30:51.767 回答
2

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

于 2016-02-04T19:46:27.580 回答