Flutter Android端Firebase Google登录失败(ApiException:10)求助
Flutter Android端Firebase Google登录报错ApiException:10的解决方案
问题描述
Android端调用Google登录时触发以下异常:
Exception has occurred. PlatformException (PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null))
iOS端登录功能正常,已完成以下操作:
- 通过
./gradlew signedReport获取SHA1和SHA256密钥并配置到Firebase后台 - 下载并替换项目中的
google-services.json文件 - 更新
AndroidManifest.xml添加相关meta-data - 配置了根目录、settings.gradle及APP目录的build.gradle文件
- 实现了Google登录代码
排查与解决步骤
1. 验证SHA密钥配置
- 确保debug和release环境的SHA1、SHA256密钥都已添加到Firebase项目的Android应用配置中,不要遗漏任一环境。
- 核对Firebase后台Android应用的
applicationId与APP目录build.gradle中的applicationId完全一致,包括大小写。 - 修改SHA密钥后,必须重新下载最新的
google-services.json替换旧文件,执行flutter clean后重新构建项目。
2. 检查ClientId配置
- 代码中硬编码的
clientId需使用Firebase后台的Web类型OAuth 2.0客户端ID,而非Android客户端ID。可在Firebase控制台「项目设置」→「常规」→「OAuth 2.0客户端ID」中找到该ID。 - 建议移除硬编码的clientId,让
GoogleSignIn自动读取google-services.json中的配置,避免手动配置错误。
3. 调整Gradle插件顺序与版本
- 插件顺序修正:APP目录build.gradle中
com.google.gms.google-services插件需放在最后应用,正确顺序如下:plugins { id "com.android.application" id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" id 'com.google.gms.google-services' // 放在最后 } - 版本升级:将根目录build.gradle中的google-services插件版本升级至最新稳定版(如
4.4.1),Firebase BOM版本升级至最新稳定版(如33.5.0),避免依赖兼容问题。
4. 确认签名配置
- 若使用debug模式测试,可手动指定debug签名配置,确保使用的keystore与生成SHA密钥的一致:
android { // ... 其他配置 signingConfigs { debug { storeFile file('~/.android/debug.keystore') // 根据实际路径调整 storePassword 'android' keyAlias 'androiddebugkey' keyPassword 'android' } } // ... 其他配置 } - 若测试release版本,需确认release签名配置正确,且对应的SHA密钥已添加到Firebase后台。
5. 优化登录代码
移除硬编码clientId并添加异常捕获,便于排查问题:
Future<UserCredential> signInWithGoogle() async { print("Initiating"); final GoogleSignIn _googleSignIn = GoogleSignIn(); print("Went through"); try { final googleUser = await _googleSignIn.signIn(); if (googleUser == null) { throw Exception("用户取消登录"); } final GoogleSignInAuthentication? googleAuth = await googleUser.authentication; final credential = GoogleAuthProvider.credential( accessToken: googleAuth?.accessToken, idToken: googleAuth?.idToken, ); return await FirebaseAuth.instance.signInWithCredential(credential); } catch (e) { print("Google登录错误: $e"); rethrow; } }
内容的提问来源于stack exchange,提问作者Gurmay Malvai
相关产品推荐
相关产品推荐

