You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCM迁移FCM后生产构建无法触发onTokenRefresh()获取token求助

解决FCM生产签名后onTokenRefresh()不触发的问题

我之前帮不少开发者排查过类似的GCM转FCM的适配问题,结合你提到的「调试版正常、生产签名后失效」的情况,且你已经完成了SHA1、包名、App ID的基础配置,给你几个针对性的排查和解决方向:

1. 确认Firebase配置的SHA1是生产环境实际生效的签名指纹

很多人在这里踩了坑:如果你的应用通过Google Play App Signing发布,那Firebase控制台需要添加的不是你本地keystore的SHA1,而是Google Play后台「应用签名」页面里显示的上传密钥或应用签名密钥的SHA1。

  • 操作步骤:打开Google Play Console → 你的应用 → 发布 → 应用签名 → 复制对应指纹,添加到Firebase控制台的项目设置中,再重新下载google-services.json替换到项目里。

2. 不要被动依赖onTokenRefresh(),主动触发Token获取

onTokenRefresh()仅在Token首次生成、旧Token失效/更新时才会被调用,生产环境可能因系统缓存或限制不会主动触发回调。建议在应用启动阶段主动调用获取Token的方法:

// Firebase Messaging 21.0.0及以上版本推荐写法
FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
            if (!task.isSuccessful()) {
                Log.w(TAG, "获取Token失败", task.getException());
                return;
            }
            // 获取到的有效Token
            String token = task.getResult();
            // 这里处理Token上传至服务器等逻辑
        }
    });

3. 清除生产应用的缓存数据,重新测试

生产环境安装的应用可能残留了旧的GCM/FCM缓存,导致Token生成逻辑异常。可以尝试:

  • 完全卸载应用后重新安装生产签名包
  • 进入应用设置,清除缓存和数据后重启应用

4. 检查生产编译的依赖与混淆配置

确保生产build的配置没有影响FCM的正常工作:

  • 确认google-services.json已正确替换到生产环境的资源目录
  • 在混淆规则文件(proguard-rules.pro)中添加FCM的保护规则:
-keep class com.google.firebase.** { *; }
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.firebase.**

内容的提问来源于stack exchange,提问作者Kirill Kulakov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:45:08