android - Firebase InstanceId 未被删除
问题描述
我有一个带有 Firebase 通知服务的 Android 应用程序,目前正在部署中。与之关联的 google-services.json 文件有错误的条目。我修复了 .json 文件,firebase 服务现在对新安装的应用程序正常工作。但对于当前用户,它不起作用(因为它仍在使用旧令牌)。
当系统确定令牌需要刷新时调用。应用程序应调用 getToken() 并将令牌发送到所有应用程序服务器。
这不会被非常频繁地调用,它是密钥轮换和处理实例 ID 更改所必需的,原因如下:
- 应用删除实例 ID
- 应用程序在新设备上恢复
- 用户卸载/重新安装应用程序
- 用户清除应用数据
系统将限制所有设备的刷新事件,以避免应用程序服务器因令牌更新而过载。
我尝试以编程方式删除 instanceId(所以我得到了一个新令牌);它被删除(不抛出异常),但新令牌与旧令牌相同。
更改 google-services.json 不应该自动触发令牌更改吗?
如何在不为当前用户重新安装应用程序的情况下解决此问题(更新时)?
我正在使用最新版本的 Firebase 和 google-services(在 Gradle 中)。
解决方案
您可以通过将新的 apk 提交到 Play 商店来更新您的应用程序。因此,在老客户更新您的 apk 后,旧客户将被新的 apk 和新的 google-services.json 文件替换。确保编写代码以调用 onRefreshToken() 方法并获取新令牌并将其发送到您的服务器以进行进一步通信。当这个更新。您的所有新客户都将能够收到通知。
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.d("NEW_TOKEN",s);
}
推荐阅读
- raku - 如何将 2 元素列表的列表变成哈希?
- r - 尝试使用 ggplot2 编辑二元逻辑回归图时解决“提供给连续刻度的离散值”错误
- angular - 用尽 RxJs retryWhen 运算符尝试后如何抛出异常?
- reactjs - 我的组件正在尝试访问尚不存在的数据,“无法读取未定义的属性‘数据’”
- node.js - 无法使用 sequelize 更新表
- go - 如果条件为真,如何检查条件,停止代码并退出应用程序,如果条件不成立,则发生超时退出应用程序
- flutter - 我可以使用 Flutter 计算当前速度吗?
- directx - 如果我使用顶点着色器对对象进行所有操作,那么常量缓冲区可以为空吗?
- visual-studio-code - 如何批量重命名 VS Code 中的文件?
- amazon-web-services - VPN VPC 中的 DNS 名称