一旦创建,APNS设备令牌是否会发生变化?

001*_*001 95 objective-c apple-push-notifications

一旦创建,推送通知设备令牌是否会发生变化?

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

Rob*_*man 137

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

要明确的是,Apple声明"应用程序应在每次启动时注册[使用APN服务器]并向其提供商提供当前令牌". 我全心全意地同意; 这样做可以保护您的应用程序免受错误假设或异常情况的影响.

针对单个设备的所有应用程序中的推送通知令牌的答案之一是什么?表示设备令牌对于"操作系统安装"是唯一的; 从备份恢复到设备将保留令牌,但擦除设备将导致它获得新令牌.这完全符合Apple对无缝操作和隐私的意图:擦除设备非常严重,可能需要保证新的关联,但是在操作系统更新后恢复图像的用户希望保留其现有通知.如果我在iPad上回忆起最近的iOS5更新,我在升级后恢复了最新的备份,因此这将保持我的通知令牌的一致性.[编辑:将备份还原到其他设备不会复制令牌.]

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


更新(2012年6月):

我最近有机会与Apple工程师交谈并且b>运行一些真实世界的测试,我想呈现结果:

为了完成,当我谈到返回一个APN令牌时,我假设一个包标识符/应用程序的上下文.

首先,Apple工程师表示,两台设备不可能返回相同的APN.尽管有以下评论,但我无法确定失败的情况.

其次,这是升级测试序列和结果:

  1. 从iPhone4上安装的iOS4开始; iTunes中的备份设备

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

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

  4. 重置iOS(干净设备)
    APN令牌更改

  5. 将其他手机备份到iTunes并将该备份恢复到测试设备; 基本上,我正在恢复"错误"备份,好像我正在切换手机.
    APN令牌再次改变; 此外,它是独特的,与原始令牌或"克隆"令牌的令牌不匹配.

  6. 将"正确"备份恢复到设备.
    APN令牌现在与步骤1相同.

  7. 最后,我将手机升级到iOS6(beta2),恢复备份,并重新测试.正如所料,令牌继续与步骤1中的令牌匹配.

此时,我非常有信心APN令牌不能在不同设备之间复制; 也许这可能是早期版本的iOS中的一个错误,但我确信iOS5(可能是iOS6)正确处理APN令牌.


更新(2012年8月)

我刚刚意识到我没有添加这个:设备令牌改变.其中一位Apple开发者与我分享了令牌实际上已经过期(我认为2年后).出于许多目的,这足够长,可以被认为是不变的.

[我不担心每两年我是否需要使用新令牌更新我的测试脚本,特别是因为我每年都会更换手机.]


mal*_*ois 70

来自[Apple文档ApplePushService] 2

令牌信任的这一阶段的形式确保只有APN生成它稍后才会尊重的令牌,并且它可以确保设备传递给它的令牌与之前为该特定设备配置的令牌相同 - 并且仅对于那个设备.

如果用户将备份数据还原到新设备或重新安装操作系统,则设备令牌会更改.


Nik*_*ach 46

如果我重新安装应用程序,我刚刚使用iOS9和设备令牌更改进行了测试.

  • 我可以证实这一点 (6认同)

SG1*_*SG1 22

是的,设备令牌可以改变.

只要您的应用收到令牌,它就应该存储它.然后,每当收到一个新令牌(最终发生)时,将新令牌与存储的令牌进行比较,如果它们不同:

  1. 更新设备的本地存储(包括可能nil)
  2. 更新设备上使用令牌以识别新令牌的任何内容
  3. 将任何知道此令牌的API更新为新令牌.

实际上,最后一步最有可能是非平凡的.例如,如果您有一项服务根据设备订阅的邮政编码向设备令牌发送天气警报,那么您需要old_token将该new_token服务传递给所述服务,以便更新交付.

一般而言,100%接受"设备令牌"的API也必须具有UPDATE该令牌的某种设施.为了建立,这是建立误交付和未交付的通知.


Nit*_*tya 7

设备令牌确实从iOS 8及更高版本更改

请在Apple网站上查看以下文字.注册,安排和处理用户通知

设备令牌是您在特定设备上向应用发送推送通知的关键.设备令牌可以更改,因此您的应用程序需要在每次启动时重新注册,并将收到的令牌传递回您的服务器.如果您无法更新设备令牌,则远程通知可能无法进入用户的设备.当用户将备份数据还原到新设备或计算机或重新安装操作系统时,设备令牌始终会更改.将数据迁移到新设备或计算机时,用户必须启动应用程序一次,然后才能将远程通知传送到该设备.

  • 网址已死!请修复它。 (2认同)

And*_*kha 5

我认为值得一提的是,没有人会在您调用unregisterForRemoteNotifications. registerForRemoteNotifications下次调用时令牌不同。我未能在 Apple 文档中找到对此的任何确认,但我亲眼目睹了这种行为。请记住这一点