使用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
相关产品推荐
相关产品推荐

