使用FlutterFire关联Firebase项目时出现FormatException如何解决?
问题
在Windows系统下将现有Flutter项目部署到Firebase时,执行flutterfire configure --project=PROJECT触发FormatException,错误原因是Firebase CLI返回欢迎界面而非预期的JSON响应,具体错误日志如下:
Fetching available Firebase projects... Failed to parse JSON response from Firebase CLI. JSON response: # Welcome to... ######## #### ######## ######## ######## ### ###### ######## ## ## ## ## ## ## ## ## ## ## ## ###### ## ######## ###### ######## ######### ###### ###### ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ######## ######## ## ## ###### ######## # Let's make sure your Firebase CLI is ready... > FormatException: Unexpected character (at character 1) #
已尝试的无效操作:
- 将Firebase独立二进制文件重命名为firebase.exe
- 重装多个版本的64位NodeJs(14.21.3、18.5.0、20.12.2、22.0.0)
- 将npm路径添加至系统和用户环境变量
- 执行
firebase init未生成lib/firebase_options.dart - 检查操作步骤完整性
- 在PowerShell及独立二进制环境中运行Firebase
解决方案
1. 完成Firebase CLI的登录初始化
独立二进制版Firebase CLI首次运行会弹出欢迎引导界面,需先完成登录授权:
- 直接在终端执行
firebase login,按提示在浏览器中完成账号登录与授权 - 登录成功后执行
firebase projects:list,验证是否能正常返回JSON格式的项目列表
2. 手动指定Firebase CLI路径给FlutterFire CLI
若FlutterFire CLI无法识别正确的Firebase二进制文件路径,可通过参数强制指定:
flutterfire configure --project=PROJECT --firebase-cli-path="C:\实际路径\firebase.exe"
将命令中的路径替换为你本地Firebase独立二进制文件的实际存储路径。
3. 清理并重装FlutterFire CLI
缓存异常可能导致交互错误,执行以下命令重置FlutterFire CLI:
dart pub global deactivate flutterfire_cli dart pub cache clean dart pub global activate flutterfire_cli
4. 手动生成firebase_options.dart
如果上述方法均无效,可绕过FlutterFire CLI手动创建配置文件:
- 打开Firebase控制台进入目标项目,点击「添加应用」选择Flutter,获取Android的
google-services.json和iOS的GoogleService-Info.plist - 在项目的
lib目录下创建firebase_options.dart,参考以下模板填充配置:
import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/foundation.dart'; DefaultFirebaseOptions get currentPlatform { if (kIsWeb) { throw UnsupportedError( 'DefaultFirebaseOptions have not been configured for web - ' 'you can reconfigure this by running the FlutterFire CLI again.', ); } switch (defaultTargetPlatform) { case TargetPlatform.android: return DefaultFirebaseOptions.android; case TargetPlatform.iOS: return DefaultFirebaseOptions.ios; case TargetPlatform.macOS: return DefaultFirebaseOptions.macOS; case TargetPlatform.windows: return DefaultFirebaseOptions.windows; case TargetPlatform.linux: return DefaultFirebaseOptions.linux; default: throw UnsupportedError( 'DefaultFirebaseOptions are not supported for this platform.', ); } } class DefaultFirebaseOptions { static FirebaseOptions get android { return FirebaseOptions( apiKey: '你的Android项目API_KEY', appId: '你的Android项目APP_ID', messagingSenderId: '你的消息发送者ID', projectId: '你的Firebase项目ID', storageBucket: '你的存储桶地址', ); } static FirebaseOptions get ios { return FirebaseOptions( apiKey: '你的iOS项目API_KEY', appId: '你的iOS项目APP_ID', messagingSenderId: '你的消息发送者ID', projectId: '你的Firebase项目ID', storageBucket: '你的存储桶地址', iosClientId: '你的iOS客户端ID', iosBundleId: '你的iOS包名', ); } // 按需添加macOS、Windows、Linux平台的配置信息 }
将模板中的占位符替换为Firebase控制台提供的对应项目参数。
5. 调整环境变量优先级
确保Firebase独立二进制文件所在路径在系统环境变量中的优先级高于NodeJs的npm路径,避免FlutterFire CLI误调用npm安装的损坏版本。
内容的提问来源于stack exchange,提问作者Age Brouwer
相关产品推荐
相关产品推荐

