多环境Flutter项目集成Firebase谷歌登录出现PlatformException如何解决?
Flutter 多Flavor环境谷歌登录PlatformException报错解决方案
1. Firebase配置校验
- 确认dev flavor对应的应用ID与Firebase dev环境项目登记的应用ID完全一致,多flavor场景下dev环境常带包名后缀(如
com.demo.app.dev),需避免仅配置生产环境包名的问题 - 检查dev环境对应的谷歌服务配置文件放置路径是否正确:
- 安卓端
google-services.json需放在android/app/src/dev/目录下,不可与生产环境配置混用 - iOS端
GoogleService-Info.plist需在Xcode的Build Phases配置中绑定dev编译环境,避免编译时引入生产环境配置
- 安卓端
- 确认Firebase dev环境项目的「Google登录」认证提供商已启用,且已录入dev环境打包用的签名证书SHA-1、SHA-256指纹,debug调试场景需额外添加本地
debug.keystore的对应指纹
2. 代码逻辑校验
- 确认
main.dart中已根据当前flavor初始化对应环境的Firebase实例,参考逻辑如下:
void main() async { WidgetsFlutterBinding.ensureInitialized(); const flavor = String.fromEnvironment('FLAVOR'); if (flavor == 'dev') { // 初始化dev环境Firebase实例 await Firebase.initializeApp( options: const FirebaseOptions( apiKey: "dev环境对应apiKey", appId: "dev环境对应appId", messagingSenderId: "dev环境对应messagingSenderId", projectId: "dev环境对应projectId", ), ); } else { // 初始化生产环境Firebase实例 await Firebase.initializeApp(); } runApp(const MyApp()); }
- 检查谷歌登录调用逻辑是否使用当前已初始化的Firebase实例,未硬编码其他环境的客户端ID
3. 端侧配置校验
- iOS端需检查Xcode的Signing & Capabilities中已添加对应dev环境的URL Schemes,取值为dev环境
GoogleService-Info.plist中的REVERSED_CLIENT_ID字段 - 安卓端需检查
AndroidManifest.xml中的谷歌认证元数据配置,多flavor场景可通过占位符动态替换不同环境的客户端ID
4. 错误精确定位
如果以上步骤排查后问题仍存在,可通过try-catch捕获PlatformException的code、message字段,根据错误码定位问题:
API_NOT_CONNECTED:Firebase配置不匹配SIGN_IN_CANCELLED:用户主动取消登录,为正常流程NETWORK_ERROR:网络无法访问谷歌服务,检查网络环境
内容的提问来源于stack exchange,提问作者Nguyen Khac Sam
相关产品推荐
相关产品推荐

