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

升级Firebase依赖后FirebaseInstanceId无法解析,如何获取Token?

解决Firebase升级后「FirebaseInstanceId Cannot resolve symbol」错误并获取FCM Token

问题背景

旧版Firebase依赖下代码可正常运行,升级至使用Firebase BOM(版本32.1.1)的新版依赖后,出现「FirebaseInstanceId Cannot resolve symbol」错误,原代码通过FirebaseInstanceId获取FCM Token。

旧版build.gradle配置

//Firebase
implementation 'com.google.firebase:firebase-auth:16.0.2'
implementation 'com.google.firebase:firebase-firestore:17.0.1'
implementation 'com.google.firebase:firebase-messaging:17.1.0'
implementation 'com.google.firebase:firebase-core:16.0.0'
//FirebaseUI
implementation 'com.firebaseui:firebase-ui-auth:7.2.0'

新版build.gradle配置

//Firebase
implementation platform('com.google.firebase:firebase-bom:32.1.1')
implementation 'com.google.firebase:firebase-firestore:'
implementation 'com.google.firebase:firebase-messaging:'
implementation 'com.google.firebase:firebase-auth:'
implementation 'com.google.firebase:firebase-core:'
//FirebaseUI
implementation 'com.firebaseui:firebase-ui-auth:7.2.0'

原获取Token代码

FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                public void onComplete(Task<InstanceIdResult> task) {
                    if (task.isSuccessful()) {
                        if (task.getResult() != null) {
                            String unused = LoginActivity.this.tokenid = task.getResult().getToken();
                        }
                        if (FirebaseAuth.getInstance().getCurrentUser() != null) {
                            String unused2 = LoginActivity.this.userid = FirebaseAuth.getInstance().getCurrentUser().getUid();
                        }
                        NoteUserData noteUserData = new NoteUserData();
                        noteUserData.setDoc_id(userid);
                        noteUserData.setToken(tokenid);
                        noteUserData.setUseremail(useremail);
                        noteUserData.setUserphone(userphone);
                        noteUserData.setAccountstatus("Approved");
                        noteUserData.setIdcheckstatus(false);
                        FirebaseFirestore.getInstance().collection(getResources().getString(R.string.dataUsers)).document(userid).set(noteUserData);
                    }
                }
            });

原因

从Firebase Messaging 21.0.0版本开始,FirebaseInstanceId类已被废弃,FCM Token的获取逻辑迁移至FirebaseMessaging类。

解决步骤

直接替换原Token获取代码为以下实现:

FirebaseMessaging.getInstance().getToken()
        .addOnCompleteListener(new OnCompleteListener<String>() {
            @Override
            public void onComplete(@NonNull Task<String> task) {
                if (!task.isSuccessful()) {
                    return;
                }
                // 获取到FCM Token
                if (task.getResult() != null) {
                    LoginActivity.this.tokenid = task.getResult();
                }
                // 以下保持原逻辑不变
                if (FirebaseAuth.getInstance().getCurrentUser() != null) {
                    LoginActivity.this.userid = FirebaseAuth.getInstance().getCurrentUser().getUid();
                }
                NoteUserData noteUserData = new NoteUserData();
                noteUserData.setDoc_id(userid);
                noteUserData.setToken(tokenid);
                noteUserData.setUseremail(useremail);
                noteUserData.setUserphone(userphone);
                noteUserData.setAccountstatus("Approved");
                noteUserData.setIdcheckstatus(false);
                FirebaseFirestore.getInstance().collection(getResources().getString(R.string.dataUsers))
                        .document(userid)
                        .set(noteUserData);
            }
        });

关键变化说明

  • 用FirebaseMessaging.getInstance().getToken()替代FirebaseInstanceId.getInstance().getInstanceId()
  • getToken()的返回任务直接携带String类型的Token,无需再通过InstanceIdResult获取
  • 移除了无用的unused变量赋值,简化代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:52:36