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

使用App Bundle发布Google Play后GoogleSignInAccount返回null

问题根因

本地直接构建APK测试时Google登录正常,上传App Bundle到Google Play发布后选择账号返回null,和Proguard代码混淆无关,核心是Google登录的签名校验规则不匹配:

  • Google登录的安全校验要求,你在配置中使用的OAuth 2.0客户端ID,必须绑定应用实际安装到设备上的签名证书SHA-1指纹,校验不通过时就无法返回有效的账号信息
  • 本地测试APK使用的是本地debug签名、或是你自行生成的release签名,对应的SHA-1已经提前配置到了Google服务后台,所以功能正常
  • 上传AAB到Google Play时,Play应用签名为默认强制开启项,Google会用平台托管的正式发布证书对你的安装包重签名,这个证书的SHA-1没有被加入OAuth客户端的允许列表,校验失败就会返回空结果。
解决步骤
  • 第一步:登录Google Play Console,进入对应应用的管理页面,找到「应用完整性」栏目下的应用签名模块,复制应用签名密钥对应的SHA-1指纹值,注意不要和上传密钥的SHA-1混淆。
  • 第二步:打开Google Cloud控制台,进入对应项目的「API和服务-凭据」页面:
    • 确认你代码中Setting.GetGoogleClientId()获取到的ID是Web应用类型的OAuth 2.0客户端ID,requestIdToken()方法不支持传入Android类型的客户端ID
    • 新建一个Android类型的OAuth 2.0客户端,填写你应用的正式包名,SHA-1值填入刚才从Play Console复制的应用签名密钥SHA-1,保存配置。
  • 第三步:等待配置全局生效(通常几分钟即可,最长不超过数小时),重新构建AAB上传到Play的内部测试渠道验证,登录功能即可恢复正常。
调试优化建议

你当前的登录结果处理代码没有做异常捕获,遇到错误时无法定位具体原因,建议补充异常捕获逻辑,后续排查问题可以直接看错误码:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CALL_GOOGLE) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            GoogleSignInAccount account = task.getResult(ApiException.class);
            // 登录成功,处理账号信息逻辑
        } catch (ApiException e) {
            // 打印错误码定位问题,常见错误码12501即代表签名不匹配、客户端ID配置错误
            Log.e("GoogleSignIn", "Login failed, error code: " + e.getStatusCode(), e);
        }
    }
}

额外注意:如果后续你要做本地release包测试,也需要把你本地release签名的SHA-1加到同一个Android OAuth客户端的指纹列表里,否则本地打release包测试也会出现登录失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:06:22