旧Android项目Google登录失败:result.isSuccess()返回false,状态码10
嘿,我来帮你梳理下这个问题——错误码10对应的是DEVELOPER_ERROR,结合你的旧项目3个月未维护的背景,大概率是下面几个常见原因导致的,咱们一步步排查:
1. SHA-1证书指纹不匹配(最常见)
旧项目重启后,如果你换了开发电脑、重新生成了签名密钥,或者之前的debug/release指纹没在Google Cloud控制台正确配置,就会出现这个验证失败的问题。Google登录会校验你的应用签名指纹和控制台配置的是否一致,不匹配就直接返回错误码10。
解决方法:
- 获取当前项目的SHA-1指纹:
- Debug版指纹可以用这个命令(默认debug keystore):
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - Release版指纹用你自己的签名文件替换上面的路径即可。
- Debug版指纹可以用这个命令(默认debug keystore):
- 打开Google Cloud控制台,找到你的项目→API和服务→凭据→找到对应的OAuth 2.0客户端ID,更新里面的SHA-1指纹,保存后等待几分钟让配置生效。
2. 依赖版本过于陈旧
你用的11.6.2版本是2017年的旧版本,Google Play Services和Firebase的服务已经更新了很多次,旧版本的SDK可能和当前的Google登录服务端不兼容,导致验证失败。而且compile关键字早就被废弃了,现在应该用implementation。
解决方法:
更新到最新的稳定版本,修改app模块的build.gradle:
// 替换原来的compile为implementation,更新版本号 implementation 'com.google.firebase:firebase-auth:22.3.1' implementation 'com.google.android.gms:play-services-auth:20.7.0'
同时记得更新根目录build.gradle里的Google服务插件版本:
classpath 'com.google.gms:google-services:4.4.1'
同步Gradle后重新构建项目。
3. google-services.json文件过期或配置错误
如果你的项目在Google Cloud控制台的配置有变动(比如包名修改、SHA-1更新),旧的google-services.json文件就会失效,导致验证失败。
解决方法:
重新从Google Cloud控制台下载最新的google-services.json,替换到项目的app目录下,确保文件里的包名、SHA-1和当前项目一致。
4. 增加错误日志排查(辅助)
你可以在handleSignInResult的else分支里打印更详细的错误信息,帮你定位具体问题:
private void handleSignInResult(GoogleSignInResult result) { if (result.isSuccess()) { // 原有成功逻辑 } else{ // 新增错误日志 Log.e("GoogleSignInError", "Code: " + result.getStatus().getStatusCode() + ", Message: " + result.getStatus().getStatusMessage()); Toast.makeText(this, "no success", Toast.LENGTH_SHORT).show(); } }
通过日志里的错误信息,能更精准地判断问题所在。
优先排查前两点(SHA-1和依赖版本),这是旧项目重启后Google登录失效的最常见原因,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Hamed Salimian

