Android基于GoogleSignInClient实现任意谷歌账号登录报12500错误
谷歌登录报 code=12500 异常的修复方案
错误码
12500对应Google Sign-In定义的通用登录失败状态,结合“仅创建Google Cloud项目的绑定账号可正常登录”的现象,问题90%以上出在云项目的OAuth配置环节,代码逻辑问题占比极低。
优先排查的配置类问题
- OAuth同意屏幕处于测试状态
这是和你遇到的现象匹配度最高的根因:当OAuth应用处于测试发布阶段时,仅手动添加到测试用户白名单内的谷歌账号可以完成登录,其余所有账号都会被直接拦截返回12500错误。
调整方式:- 若需支持任意用户登录,需将OAuth应用状态切换为生产发布模式,按照页面提示补全应用名称、开发者联系邮箱、应用归属域名等必填信息,完成对应授权范围的合规校验
- 若暂时处于开发调试阶段,需将所有需要测试的谷歌账号手动添加到测试用户列表中,单项目最多支持添加100个测试账号
- Android OAuth客户端配置信息不匹配
检查对应Android类型OAuth客户端的两项核心配置:- 应用签名:必须同时录入调试包、正式包、各渠道包对应的SHA-1签名值,不能仅录入开发机的调试签名
- 应用包名:必须和项目build.gradle中声明的applicationId完全一致,不存在大小写差异、前后多余空格的问题
代码侧可优化的点
你当前代码中请求的Scope(Scopes.PLUS_ME)属于已废弃的Google+接口权限,该权限从2019年起就不再对非测试状态的OAuth应用开放,非白名单账号发起授权时会直接被拒绝返回错误,需要将该权限请求移除。
调整后的GoogleSignInOptions初始化参考实现:
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestScopes( Scope(Scopes.PROFILE), Scope(Scopes.EMAIL), // 移除已废弃的 PLUS_ME 权限请求 Scope(YouTubeScopes.YOUTUBE) ) .build()
其他容易遗漏的校验项
- 完成Cloud控制台的配置修改后,等待5分钟左右的配置同步周期再测试登录,不要修改后立刻发起请求
- 确认测试设备上的Google Play服务为最新版本,已登录的谷歌账号未被系统标记为受限的工作资料账号
- 确认生产环境打包的应用没有误开
android:debuggable=true调试开关
内容的提问来源于stack exchange,提问作者Τζιότι
相关产品推荐
相关产品推荐

