有没有办法强制你的iOS推送通知deviceToken改变?

时间:2015-11-16 15:04:40

标签: ios push-notification devicetoken

当设备的deviceToken可以更改时,苹果文档有点模糊。它可以防御代码并测试代码。

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

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

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

似乎删除应用程序并重新安装它会导致标识符'Forendor'要改变,而不是deviceToken,这与我想要测试的完全相反。我想要一些永远不会改变的值来唯一地标识测试设备,然后改变设备令牌以便我可以测试我的代码。

编辑:自写这篇文章以来,我已经改变了应用程序以生成它自己的UUID,并按照Wain在答案中的建议将其保存到钥匙串中。

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

3 个答案:

答案 0 :(得分:3)

我不相信。

如果你想要一个唯一的标识符,那么你应该明确地创建一个标识符并将其存储在钥匙串中,然后你可以存储设备名称和所有其他细节,以便你有一个真实点。

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

答案 1 :(得分:2)

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

  

重置iOS上的推送通知权限警报第一个   时间推送启用的应用程序注册推送通知,iOS询问   用户是否希望收到该应用的通知。一旦用户   已响应此警报,除非是,否则不再显示   设备已恢复或应用程序已卸载至少一天。

     

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

     

从设备中删除您的应用。完全关闭设备   把它重新打开。转到设置>一般>日期&时间和设定   提前一天或更长时间。再次完全关闭设备   把它重新打开。

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

答案 2 :(得分:0)

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

终止设备中的应用

  • 下载(xcode设备窗口)容器。
  • 在“库/参考/应用程序捆绑包” plist中查找默认值。
  • 在plist中编辑条目。
  • 替换容器(xcode设备窗口)

重要:我发现必须重新启动设备才能使更改生效。

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

我在调试我没有src代码的即席应用程序时使用了此功能。但是,如果您有src代码,则使deviceTokens比较失败可能会更容易。