Flutter集成Firebase Messaging报错:找不到FirebaseInstanceId符号
解决Firebase Messaging编译错误(找不到FirebaseInstanceId符号)
核心原因
firebase_messaging 9.x版本与新版Firebase SDK存在API兼容性冲突,FirebaseInstanceId在新版Firebase中已被废弃,相关功能迁移至FirebaseMessaging类,但旧插件版本仍在调用废弃API,导致编译失败。
解决办法
方法1:升级firebase_messaging到兼容版本
这是最稳妥的解决方案,直接将插件升级到适配新版Firebase SDK的版本,建议升级到10.0.0及以上:
- 修改项目根目录下
pubspec.yaml中的依赖配置:firebase_messaging: ^10.0.0 # 可替换为更高稳定版本 - 执行命令更新依赖:
flutter pub get - 清理缓存并重新构建项目:
flutter clean flutter run
方法2:降级Firebase核心SDK(临时应急方案)
如果暂时无法升级插件,可在安卓项目的android/build.gradle文件中指定旧版Firebase核心依赖,强制使用兼容FirebaseInstanceId的版本:
- 在
buildscript的dependencies代码块中添加:classpath 'com.google.firebase:firebase-core:17.5.0' classpath 'com.google.firebase:firebase-messaging:20.2.4' - 同步Gradle配置后重新运行项目。
方法3:手动修改插件代码(不推荐,维护成本高)
找到本地插件存储路径中的FlutterFirebaseMessagingPlugin.java文件(通常路径为~/.pub-cache/hosted/pub.dartlang.org/firebase_messaging-9.1.4/android/src/main/java/io/flutter/plugins/firebase/messaging/FlutterFirebaseMessagingPlugin.java),将第166行代码替换为新版API:
// 原代码 String token = FirebaseInstanceId.getInstance().getToken(senderId, "*"); // 替换为 String token = FirebaseMessaging.getInstance().getToken().getResult();
注意:该修改会在插件更新后被覆盖,仅适合临时解决问题。
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

