实例ID服务是不是在应用升级时发起回调onTokenRefresh()?

Posted

技术标签:

【中文标题】实例ID服务是不是在应用升级时发起回调onTokenRefresh()?【英文标题】:Does Instance ID service initiate callback onTokenRefresh() on app upgrade?实例ID服务是否在应用升级时发起回调onTokenRefresh()? 【发布时间】:2017-06-07 12:12:06 【问题描述】:

实例ID服务是否在应用升级时发起回调onTokenRefresh()?

参考doc 指出 “令牌是唯一且安全的,但在出现安全问题或用户在设备恢复期间卸载并重新安装您的应用时,您的应用或实例 ID 服务可能需要刷新令牌。您的应用必须实现一个侦听器以响应令牌来自 Instance ID 服务的刷新请求。”

    谁能确认令牌刷新是否必须由应用处理或实例 ID 服务在应用升级时启动回调 onTokenRefresh()? 如果它由Instance ID服务处理,如果旧应用使用旧库进行gcm注册(gcm.register)并且新应用使用新库(Instance ID)升级后令牌刷新场景如何处理

【问题讨论】:

当令牌发生变化时,图书馆的服务会通过回调通知你。您可以在您的服务器或任何地方处理它 嗨,蒂姆,是的,这在文档中很清楚。但是,问题是 GCM 注册令牌是否会在应用升级时发生变化,从而导致回调被调用?在之前的 gcm 库中,应用程序更新必须在应用程序中单独处理,如 here 所述。但是,新库 doc 没有说明应用更新用例。 【参考方案1】:

    onTokenRefresh() 仅出于特定原因触发,其中更新应用程序不是其中之一。看我的回答here。

    您在cmets中提到的link是不推荐的生成注册令牌(GCM2/waaay old GCM)的方式,它不同于InstanceID生成的令牌(preFCM和FCM)。请参阅 Ian Barber 的回答 here。

    我不确定你在这里问什么。我理解流程的方式是 FCM 识别是否需要刷新令牌,如果是,它会调用 InstanceID 服务(与客户端分开)来生成一个新的。一旦它生成令牌并且应用程序上线,它会触发onTokenRefresh() 让您知道新令牌。您如何处理令牌取决于您。

就这么简单。 AFAIK 没有特殊情况。

【讨论】:

您对问题第二部分的回答本质上不是处理应用升级场景[旧应用使用旧库进行 gcm 注册(gcm.register),新应用使用新库(实例 ID)]。由于我找不到任何迁移指南,因此我们在此应用升级期间重新注册了 GCM。 This 建议 c2dm 到 gcm3.0 迁移也是如此。对于后续的应用升级,我们不会在 GCM 进行任何重新注册,因为从文档中可以清楚地看出,应用升级时令牌不会更改。 @ian-barber 既然你在谷歌工作,你能回答我问题的第二部分吗?铝。可能是对的。但是,我找不到任何适用于这种情况的官方迁移指南。 如果应用程序从preFCM升级到FCM,则无需处理。两个版本都使用相同的 InstanceID 服务。在 C2DM-to-InstanceID 中重新注册是 AFAIK 的正确方法,因为它们是两种不同的服务。令牌没有迁移指南,因为您不需要迁移它们,令牌是 backwards/forwards compatible。 PS:如果用户尚未与帖子互动,您将无法标记他,因此在此处标记 Ian Barber 不会通知他。我只在 styling 我的答案时使用 。

以上是关于实例ID服务是不是在应用升级时发起回调onTokenRefresh()?的主要内容,如果未能解决你的问题,请参考以下文章

cocoalibspotify:music_delivery下播放回调时崩溃

Django实现自动发布(3发布-升级和回退)

在 SP 回调中确定是 IDP 发起还是 SP 发起?

ZooKeeper客户端源码——向服务端发起请求(顺序响应+同步阻塞+异步回调)

ZooKeeper客户端源码——向服务端发起请求(顺序响应+同步阻塞+异步回调)

ZooKeeper客户端源码——向服务端发起请求(顺序响应+同步阻塞+异步回调)