【问题标题】:Is the APN Device Token unique to each individual app?APN 设备令牌是否对每个单独的应用程序都是唯一的?
【发布时间】:2011-01-21 05:59:30
【问题描述】:

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

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

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: iphone apple-push-notifications devicetoken


    【解决方案1】:

    注意:这是一个旧答案,仅适用于 iOS user1641761's answer。

    想通了。设备令牌不是电话-应用配对所独有的。它们是手机独有的。如果您在同一部手机上有多个推送应用程序,它们都将使用相同的设备令牌。您用于发送通知的证书将决定它发送到哪个应用程序。

    【讨论】:

    • 感谢您的问题和答案,知道这很有用。每个+1。手机将使用服务器证书决定哪个应用程序是有道理的,作为对开发人员意图的验证。
    • 嗨@Mups。在开头的问题中,您说:“根据需要,我在服务器上使用了两个不同的证书 - 每个应用程序一个”。然后,在你的回答中你说:“你用来发送通知的证书将决定它去哪个应用程序”......那么,为什么它不起作用?我即将为我的后端实施类似的设置,我想确定一下。谢谢。
    • 另外,请注意设备令牌因构建类型而异。开发版本有一个设备令牌,分发(生产)版本有另一个。当用户重新安装操作系统时,设备令牌也会重置为其他内容。
    • 这是一个旧答案,适用于旧 iOS,即 iOS 6 及更低版本。从 iOS 7 开始,苹果改变了规则,设备令牌不再是设备唯一的。与 iOS 6 及更低版本不同,同一设备上的所有应用都将具有不同的令牌。
    • 投反对票,因为它不再是最新的。请参阅 user1641761 的回答。
    【解决方案2】:

    也就是说,请记住,Apple 保留根据他们认为合适的方式更改设备 APNToken 的权利,因此不要使用它来唯一标识设备/用户。

    【讨论】:

      【解决方案3】:

      iOS 7 以不同方式处理此问题。它现在是独一无二的。

      请看本文第一点: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 device token is different for same device

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 错误或过时的答案。根据苹果文档,您的答案不再有效。请参考这里的文档developer.apple.com/library/content/documentation/…
        • 设备令牌对于设备上的所有应用程序都是相同的。不,就像 - 成功注册后,APNs 会向设备发送一个特定于应用程序的设备令牌。
        【解决方案5】:

        您不能使用令牌作为唯一标识符,而是使用 keygen 中的保存删除旧令牌(来自 iTunes 的帮助)并删除旧令牌并在数据库中添加新令牌。

        【讨论】:

          【解决方案6】:

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

          根据苹果,

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

          • 启用远程通知。

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

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

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

          特定于应用的设备令牌是全球唯一的,可识别一个 应用-设备组合。在收到来自 APNs 的设备令牌时 您的应用程序,您有责任打开网络连接到 您的提供商。在您的应用程序中,您也有责任到那时 转发设备令牌以及您想要的任何其他相关数据 发送给提供者。当提供者稍后发送远程 对 APNs 的通知请求,它必须包含设备令牌,以及 带有通知有效负载。有关这方面的更多信息,请参阅 APNs 概述。

          永远不要在您的应用中缓存设备令牌;相反,从 系统在您需要时。 APNs 向您的应用发出新的设备令牌 当某些事件发生时。设备令牌保证为 不同,例如,当用户从备份中恢复设备时, 当用户在新设备上安装您的应用程序时,以及当用户 重新安装操作系统。获取令牌,而不是 依靠缓存,确保您拥有当前的设备令牌 您的提供商需要与 APNs 通信。当您尝试 获取设备令牌但它没有改变,获取方法返回 很快。

          你可以在这里参考苹果文档Local and Remote Notification Programming Guide

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-06-13
            • 2011-10-19
            • 2011-06-15
            • 1970-01-01
            相关资源
            最近更新 更多