首页 > 解决方案 > Firebase InstanceId 未被删除

问题描述

我有一个带有 Firebase 通知服务的 Android 应用程序,目前正在部署中。与之关联的 google-services.json 文件有错误的条目。我修复了 .json 文件,firebase 服务现在对新安装的应用程序正常工作。但对于当前用户,它不起作用(因为它仍在使用旧令牌)。

当系统确定令牌需要刷新时调用。应用程序应调用 getToken() 并将令牌发送到所有应用程序服务器。

这不会被非常频繁地调用,它是密钥轮换和处理实例 ID 更改所必需的,原因如下:

  • 应用删除实例 ID
  • 应用程序在新设备上恢复
  • 用户卸载/重新安装应用程序
  • 用户清除应用数据

系统将限制所有设备的刷新事件,以避免应用程序服务器因令牌更新而过载。

我尝试以编程方式删除 instanceId(所以我得到了一个新令牌);它被删除(不抛出异常),但新令牌与旧令牌相同。

更改 google-services.json 不应该自动触发令牌更改吗?

如何在不为当前用户重新安装应用程序的情况下解决此问题(更新时)?

我正在使用最新版本的 Firebase 和 google-services(在 Gradle 中)。

标签: androidfirebasefirebase-cloud-messagingdelete-fileinstanceid

解决方案


您可以通过将新的 apk 提交到 Play 商店来更新您的应用程序。因此,在老客户更新您的 apk 后,旧客户将被新的 apk 和新的 google-services.json 文件替换。确保编写代码以调用 onRefreshToken() 方法并获取新令牌并将其发送到您的服务器以进行进一步通信。当这个更新。您的所有新客户都将能够收到通知。

@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.d("NEW_TOKEN",s);
}

推荐阅读