Objective c 一旦创建,APNS设备令牌是否会更改?

Objective c 一旦创建,APNS设备令牌是否会更改?,objective-c,apple-push-notifications,Objective C,Apple Push Notifications,推送通知设备令牌创建后是否会更改 示例应用程序何时更新?或者,在任何其他情况下,它都可以更改???它不应该更改,除非您的应用程序被还原到新设备上(此时不会要求它再次接受推送通知,只需向您发送注册呼叫,此时您应该接受新令牌) 但苹果并不保证它不会改变(因此文档中从未提及)。你最好做最坏的打算,并假设它有一天会改变。此外,通过定期向服务器发送令牌,您可以删除一段时间未注册的令牌,这些令牌可能已经卸载了您的应用程序或不久前失去了兴趣(文档确实将此指定为需要的行为!)。 此阶段令牌信任的形式确保只有AP

推送通知设备令牌创建后是否会更改


示例应用程序何时更新?或者,在任何其他情况下,它都可以更改???

它不应该更改,除非您的应用程序被还原到新设备上(此时不会要求它再次接受推送通知,只需向您发送注册呼叫,此时您应该接受新令牌)

但苹果并不保证它不会改变(因此文档中从未提及)。你最好做最坏的打算,并假设它有一天会改变。此外,通过定期向服务器发送令牌,您可以删除一段时间未注册的令牌,这些令牌可能已经卸载了您的应用程序或不久前失去了兴趣(文档确实将此指定为需要的行为!)。

此阶段令牌信任的形式确保只有APN生成 它将在以后兑现的代币,它可以保证 设备交给它的令牌与以前的令牌相同 为该特定设备设置,并且仅为该设备设置

如果用户将备份数据恢复到新设备或重新安装 在操作系统中,设备令牌发生更改


苹果的官方文件对此并不清楚。我观察到的是:对于给定的设备、应用程序和域(生产与沙箱),令牌是不变的。我认为,为了使系统可靠地工作,这一点必须保持不变。考虑应用程序更新触发新APN令牌的情况;如果我使用的是最棒的类似Twitter的新应用程序,并且启用了通知功能,那么当我从iTunes更新我的应用程序时会发生什么?我是否应该期望,即使在我将更新“同步”到我的设备上之后,我还没有运行应用程序,它仍将继续发送通知?更改应用程序的行为不会影响APN系统,因为即使您尚未运行更新的应用程序,操作系统也可以代表您接收通知

明确地说,苹果声明“应用程序每次启动时都应该[向APN服务器]注册,并向其提供商提供当前令牌”。我完全同意;这样做将保护您的应用程序免受错误假设或异常情况的影响

对的回答之一表明,每个“操作系统安装”的设备令牌都是唯一的;从备份恢复到设备将保留令牌,但擦除设备将使其获得新令牌。这与苹果无缝操作和隐私的意图完全一致:擦除设备的严重程度可能足以保证新的关联,但在操作系统更新后恢复图像的用户希望保留其现有通知。如果我回忆起iPad上最近的iOS5更新,我在升级后恢复了最新的备份,因此这将保持我的通知令牌的一致性。[编辑:将备份还原到其他设备不会复制令牌。]

警告: 我没有关于这个主题的明确知识,只是一些与APN(作为第三方开发人员)合作的合理经验。一如既往,最好验证您的假设


更新(2012年6月): 我最近有机会a>与苹果工程师交谈,b>运行一些真实世界的测试,我想展示结果:

完整地说,当我谈到返回APN令牌时,我假设的是单个绑定标识符/应用程序的上下文

首先,苹果的工程师说,两台设备不可能返回相同的APN。尽管有以下评论,我仍无法确定这一点失败的情况

其次,以下是升级测试顺序和结果:

  • 从安装在iPhone4上的iOS4开始;iTunes中的备份设备

  • 升级到iOS5
    从以前的测试中,我知道APN令牌现在不同了

  • 将备份还原到设备
    APN令牌现在与步骤1相同

  • 重置iOS(清洁设备)
    APN令牌更改

  • 将不同的手机备份到iTunes,并将备份恢复到测试设备;基本上,我正在恢复“错误”的备份,就好像我在换电话一样。
    APN令牌再次改变;此外,它是不同的,与原始令牌或“克隆”令牌不匹配

  • 将“正确”的备份还原到设备。
    APN令牌现在与步骤1相同

  • 最后,我将手机升级到iOS6(beta2),恢复了备份并重新测试。正如预期的那样,令牌继续与步骤1中的令牌匹配

  • 在这一点上,我非常确信APN令牌不能在不同的设备之间复制;也许这在早期版本的iOS中是一个bug,但我相信iOS5(可能还有iOS6)能够正确处理APN令牌


    更新(2012年8月) 我刚刚意识到我没有添加这个:设备令牌将发生变化。一位苹果开发者告诉我代币确实过期了(我想是两年后)。出于许多目的,这足够长,可以认为是不变的


    [如果我必须每两年用新的代币更新测试脚本,我并不担心,特别是因为我每年都更换手机。]

    是的,设备代币可以更改

    只要你的应用程序收到令牌,它就应该存储它。然后,无论何时接收到新令牌(最终会发生),将新令牌与存储的令牌进行比较,如果它们不同:

  • 更新设备的本地存储(可能包括到
    nil
  • 更新设备上使用令牌的任何内容以了解新令牌
  • 将任何知道此令牌的API更新为新令牌
  • 作为一名实用型硕士