You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用Web端Google Sign-In正常,Android端登录失败报ApiException 10错误

Android端Google Sign-In报ApiException: 10的解决方案

该错误本质是开发者身份校验未通过,Web端登录正常是因为Web端完全不依赖Android应用的签名校验链路,和Android端的校验逻辑相互独立。你已经配置SHA1、替换了google-services.json但依然报错,说明还有配置链路的遗漏点,按以下步骤逐一排查即可:

基础配置一致性校验

  • 首先核对google-services.json中记录的应用包名,必须和Android工程android/app/build.gradle内的applicationId完全一致,不能存在大小写差异、渠道后缀差异——比如后台配置的是com.xxx.myapp,但工程里实际写的是com.xxx.myapp.dev,就会直接触发10号错误。
  • 核对提交的SHA1密钥类型:如果你是在debug调试模式下运行应用,必须把本地debug签名的SHA1值上传到后台,不能只上传了正式发布包的SHA1。获取debug签名SHA1的命令为:
    keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
    注意不同开发环境下的debug.keystore路径不同,不要跨设备复用SHA1值。
  • 如果使用了Flutter的多渠道构建(Flavor),每个渠道对应的独立applicationId、对应签名的SHA1,都要单独在Google后台配置对应条目,不能只配默认主渠道的信息。

工程配置遗漏排查

  • 确认android/app/build.gradle文件的插件部分已经引入Google服务插件,缺失该配置会导致google-services.json的内容根本不会被编译进应用,等于配置完全无效,需要加上:
    apply plugin: 'com.google.gms.google-services'
  • 检查项目根目录下android/build.gradle的仓库配置,必须加入Google官方Maven仓库地址,否则google_sign_in依赖的Google Play服务组件会拉取异常。
  • 检查AndroidManifest.xml中是否有自定义的scheme、host配置,存在和Google登录回调地址冲突的拦截规则时,会直接导致登录流程中断。

代码实现的常见坑

  • 不要在按钮点击的回调里临时初始化Firebase、临时实例化GoogleSignIn对象,正确的做法是把Firebase.initializeApp()放到应用启动的main函数中提前执行,GoogleSignIn实例做成全局单例,频繁重建登录实例会导致身份校验上下文丢失。
  • 给所有登录相关的await操作加上try-catch异常捕获,你当前的代码没有做异常拦截,一旦登录过程中出现用户取消、校验失败的情况,就会抛出未处理的PlatformException,看不到更细节的报错定位信息。
  • 不要在初始化GoogleSignIn的时候手动添加额外的请求权限(Scopes),默认的基础登录权限就足够获取idToken和accessToken,未在后台配置的额外权限会触发校验拒绝。

生效验证

  • 所有配置修改完成后,不要直接热重载/热重启运行,先执行flutter clean清理build目录下的旧配置缓存,再重新构建安装应用到测试设备。
  • 测试前确认设备上已经登录了有效Google账号,且设备的Google Play服务为最新版本,没有被系统禁用。

内容的提问来源于stack exchange,提问作者Bill_The_Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 03:06:04