Flutter谷歌登录出现ApiException:10错误,请求问题排查
谷歌登录报错:PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10:)
Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)
背景与疑问
- 正在从零重写一款已有应用,新旧应用使用同一个Firebase账号,原应用已集成谷歌登录并上线
- 新应用初期使用了错误包名,后续改为和原应用一致的正确包名
- 此前新应用使用独立Firebase项目+不同包名时,谷歌登录完全正常
- 疑问:当前报错是否和新旧应用共享同一Firebase项目有关?
已完成的排查操作
- 在Firebase后台配置了对应应用的SHA1和SHA256指纹
- 确认Firebase项目中谷歌登录功能已启用
- 执行
flutter clean、flutter doctor,清理缓存并重启开发环境 - 验证应用包名与Firebase后台配置完全一致
- 下载并替换了最新的
google-services.json文件
问题分析与解决方案
核心结论
这个报错确实大概率和新旧应用共享同一Firebase项目有关,根源是谷歌开发者控制台的OAuth 2.0客户端ID配置冲突,而非Firebase本身的限制。
具体原因
当你给同一Firebase项目添加多个包名(包括曾经配置过的错误包名),Firebase会自动在谷歌开发者控制台为每个包名生成对应的OAuth客户端ID。当你把新应用包名改为和线上应用一致后,可能出现两种冲突:
- 错误包名对应的OAuth客户端ID未被删除,导致谷歌登录请求时出现包名与客户端ID不匹配的隐性冲突
- 同一包名对应了多个客户端ID(原应用的+新应用误配置后生成的),谷歌服务无法正确匹配
修复步骤
- 删除谷歌开发者控制台中冗余的OAuth客户端ID
- 打开谷歌开发者控制台,找到对应Firebase项目关联的项目
- 进入「API和服务」→「凭据」页面
- 找到所有类型为「Android客户端」的凭据,删除以下两类:
- 对应错误包名的客户端ID
- 同一正确包名下重复生成的客户端ID(保留原应用线上使用的那一个即可)
- 重新生成并替换google-services.json
- 回到Firebase后台,删除当前应用配置后重新添加(或直接重新下载配置文件)
- 彻底清理应用缓存与构建产物
- 执行
flutter clean后,删除Android项目下的build文件夹 - 卸载设备上的测试应用,重新构建安装
- 执行
额外验证点
- 确认本地签名用的SHA1/SHA256和Firebase后台配置的完全一致(包括debug和release环境的指纹)
- 检查谷歌开发者控制台中「OAuth同意屏幕」的配置是否正常,确保应用名称、范围等信息未被修改
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

