如何为Flutter应用的多Flavor配置不同Firebase项目?
核心结论
每个Flavor必须对应独立的Firebase项目,且需要为每个Flavor放置专属的Firebase配置文件(Android的google-services.json、iOS的GoogleService-Info.plist),配合原生构建配置实现自动加载,这是最可靠且官方推荐的方案。以下是具体实现步骤:
Android端配置
创建Firebase项目并下载配置文件
为development、staging、production分别创建独立的Firebase项目,在每个项目中注册对应Flavor的Application ID(和你build.gradle中配置的applicationIdSuffix一致,比如原ID加.dev/.staging),然后下载每个项目的google-services.json。放置配置文件到对应目录
在Android项目的app/src目录下,创建和Flavor同名的文件夹:development、staging、production,将对应的google-services.json分别放入这些文件夹的根目录。目录结构示例:app/ src/ development/ google-services.json staging/ google-services.json production/ google-services.json main/ ...确认gradle配置
你的build.gradle中已经配置了正确的productFlavors,只需确保app/build.gradle顶部已应用google-services插件:apply plugin: 'com.google.gms.google-services'Gradle会自动根据当前构建的Flavor,加载对应目录下的
google-services.json,无需额外配置。
iOS端配置
注册Bundle ID并下载配置文件
在每个Firebase项目中注册对应Flavor的Bundle ID(和Android的Application ID规则一致,比如原ID加.dev/.staging),下载每个项目的GoogleService-Info.plist。配置Xcode加载对应文件
- 在Xcode中,确保每个Flavor有对应的Target(可通过Duplicate Target创建),将对应的
GoogleService-Info.plist添加到项目中。 - 进入
Build Phases->Copy Bundle Resources,为每个Flavor的Target移除无关的GoogleService-Info.plist,只保留当前Flavor对应的文件。 - 或者通过Xcode的配置文件(
.xcconfig),为每个Flavor指定GOOGLE_SERVICE_INFO_PLIST路径,示例:# development.xcconfig GOOGLE_SERVICE_INFO_PLIST = $(SRCROOT)/Runner/GoogleService-Info-Dev.plist
- 在Xcode中,确保每个Flavor有对应的Target(可通过Duplicate Target创建),将对应的
Flutter端初始化(可选优化)
原生配置完成后,Firebase会自动加载对应项目的配置,无需手动指定FirebaseOptions。如果需要做环境验证,可以借助package_info_plus包确认当前环境:
import 'package:firebase_core/firebase_core.dart'; import 'package:package_info_plus/package_info_plus.dart'; Future<void> initFirebase() async { final packageInfo = await PackageInfo.fromPackageInfo(); final packageName = packageInfo.packageName; // 仅做验证用,无需手动指定options,原生配置已处理 if (packageName.endsWith('.dev')) { print("当前为Development环境,加载Dev Firebase项目"); } else if (packageName.endsWith('.staging')) { print("当前为Staging环境,加载Staging Firebase项目"); } await Firebase.initializeApp(); }
验证配置有效性
运行对应Flavor的应用:
# 运行development环境 flutter run --flavor development # 运行staging环境 flutter run --flavor staging # 运行production环境 flutter run --flavor production
在Firebase控制台对应项目中查看数据(比如新增测试用户),确认数据仅出现在当前Flavor对应的项目中,无跨环境冲突。
常见问题排查
- 确保Firebase项目中注册的Application ID/Bundle ID和Flavor配置的完全一致,大小写、后缀都不能错。
- Android端清理缓存:执行
./gradlew clean后重新构建。 - iOS端清理缓存:执行
pod deintegrate && pod install,并删除Xcode的Derived Data后重新构建。 - 检查Xcode中每个Flavor的Target是否正确关联了对应的
GoogleService-Info.plist。
内容的提问来源于stack exchange,提问作者Dewa Prabawa

