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

Android项目从GCM迁移至FCM后Token生成失效,onTokenRefresh未触发

排查FCM onTokenRefresh()未调用的问题

我之前迁移GCM到FCM时也碰到过一模一样的问题,给你整理几个实用的排查方向,应该能解决:

  • 核对Manifest配置完整性
    你提到配置了MyFirebaseMessagingService,但要确保两个关键的Service配置都到位:

    <!-- 处理消息推送的Service -->
    <service android:name=".Commonclass.MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    
    <!-- 触发Token刷新的Service(onTokenRefresh的关键) -->
    <service android:name=".Commonclass.MyFirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>
    

    尤其注意INSTANCE_ID_EVENT这个action,少了它onTokenRefresh根本不会被触发。

  • 确认依赖版本匹配
    检查app/build.gradle里的FCM依赖是否为稳定版,同时保证google-services插件版本适配:

    // app模块的依赖
    implementation 'com.google.firebase:firebase-messaging:23.0.0' // 可替换为当前最新稳定版
    
    // 根目录build.gradle的插件
    classpath 'com.google.gms:google-services:4.3.10'
    

    版本不匹配经常会导致初始化异常。

  • 手动触发Token获取测试
    如果自动刷新没反应,直接在App启动时手动获取Token,验证是否能拿到:

    FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(task -> {
            if (!task.isSuccessful()) {
                Log.w("FCM_TAG", "获取Token失败", task.getException());
                return;
            }
            String token = task.getResult().getToken();
            Log.d("FCM_TAG", "当前FCM Token: " + token);
        });
    

    要是手动能拿到,说明自动刷新的触发条件没满足;拿不到的话就是配置或依赖有问题。

  • 再次核对SHA1和包名
    哪怕你已经关联过,也要再确认Firebase控制台里的SHA1(包括debug和release签名的)和项目使用的完全一致,包名要和build.gradle里的applicationId丝毫不差,大小写、符号都不能错。

  • 清除App缓存后重启
    旧的GCM缓存可能干扰FCM初始化,试试清除App的存储数据,重启后再观察onTokenRefresh是否触发。

  • 检查是否禁用了自动初始化
    有些项目会在Manifest里加这个配置禁用自动初始化:

    <meta-data
        android:name="firebase_messaging_auto_init_enabled"
        android:value="false" />
    

    如果有,把value改成true,或者在代码里手动开启:FirebaseMessaging.getInstance().setAutoInitEnabled(true);


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:28:01