【问题标题】:Is there a way to force your iOS push notification deviceToken to change?有没有办法强制你的 iOS 推送通知 deviceToken 改变?
【发布时间】:2016-02-17 17:34:53
【问题描述】:

Apple 的文档对设备的 deviceToken 何时可以更改有点含糊。防御性地编写代码并测试代码是值得的。

我已经编写了我的应用程序,以便在启动时注册推送通知并处理 didRegisterForRemoteNotificationsWithDeviceToken 回调。

我的didRegisterForRemoteNotificationsWithDeviceToken 将最后一个设备令牌保存到用户默认值,如果令牌仍然相同,则继续。如果它根本没有保存的令牌,或者令牌不匹配,它会将新令牌上传到我们的服务器。

我还有一种机制可以让我用人类可读的名称命名我的测试设备,例如“4s_1”“5s_1”“5s_2​​”等。我有一个服务器命令行工具,它采用人类可读的设备名称,看起来从中查找设备的“identifierForVendor”,然后使用标识符查找设备令牌。然后它会触发沙盒通知。

似乎删除应用程序并重新安装它会导致“identifierForVendor”发生变化,但deviceToken 不会发生变化,这与我希望测试发生的情况完全相反。我想要一些永远不会改变的值来唯一地标识测试设备,并改变设备令牌以便我可以测试我的代码。

编辑:自从写这篇文章以来,我已经更改了应用程序以生成它自己的 UUID,并将其保存到钥匙串中,正如 Wain 在他的回答中所建议的那样。

有没有办法强制 Apple 的 APN 更改设备的令牌,以便我可以测试我的代码(客户端和服务器端)以处理令牌更改的情况?

【问题讨论】:

    标签: ios push-notification devicetoken


    【解决方案1】:

    我不相信。

    如果你想要一个唯一的标识符,那么你应该明确地创建一个并将其存储在钥匙串中,然后你可以存储设备名称和所有其他详细信息,这样你就有了一个单一的事实。

    您存储在钥匙串中的任何标识符都将继续存在,直到它被明确删除或设备从没有该钥匙串内容的备份中恢复。

    【讨论】:

    • 我在考虑走钥匙串路线。钥匙串条目在删除给定开发者帐户中的所有应用程序后肯定会保留下来?
    • 从开发者帐户中删除?钥匙串在应用程序从设备中删除后仍然存在。
    • 酷。我担心应用程序钥匙串条目就像共享用户默认条目一样,并且在删除开发人员帐户中的最后一个应用程序时被清除,但它们确实存在。感谢您的建议。
    【解决方案2】:

    我不确定这种方法是否也会重置令牌,但您可以尝试reset the permission

    在 iOS 上重置推送通知权限警报 当支持推送的应用注册推送通知时,iOS 会询问 用户是否希望接收该应用程序的通知。一旦用户 已对此警报做出响应,除非 设备已恢复或应用已卸载至少一天。

    如果您想模拟您的应用的首次运行,您可以离开 该应用程序卸载了一天。您可以在没有的情况下实现后者 按照以下步骤实际等待一天:

    从设备中删除您的应用。完全关闭设备并 重新打开它。转到设置 > 常规 > 日期和时间并设置 提前一天或更长时间约会。再次完全关闭设备,然后 重新打开它。

    关于设备标识符的更改:您可以在测试设备上安装第二个应用程序(来自同一发行商的空白应用程序)。如果您重新安装实际应用,identifierForVendor 不应更改。

    【讨论】:

    • 我刚刚尝试了您概述的步骤,它重置了推送通知权限标志,以便您再次收到提示(“此应用程序想要向您发送推送通知。好吗?”),但它没有改变设备令牌。 :(
    • 太糟糕了。无论如何,感谢您试一试。
    【解决方案3】:

    您可以测试客户端正在更改存储的设备令牌。

    终止设备中的应用程序

    • 下载(xcode 设备窗口)容器。
    • 在 Library/Perferences/app bundle plist 中查找默认值。
    • 编辑 plist 中的条目。
    • 替换容器(xcode 设备窗口)

    重要提示:我发现需要重启设备才能使更改生效。

    然后在重新启动时,您的旧设备令牌将不正确,并且可以执行所需的任何操作。

    我在调试一个我没有 src 代码的临时应用程序时使用了它。但是,如果您有 src 代码,则可能更容易使 deviceTokens 的比较失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多