使用Google SignIn时遇ApiException:10错误,求技术解决方案
解决Google SignIn的ApiException:10错误
嘿,这个com.google.android.gms.common.api.ApiException: 10:错误我太熟了!这几乎都是配置环节不匹配导致的,和你写的初始化/登录代码关系不大,咱们一步步来排查:
核心排查步骤
检查SHA-1指纹是否正确配置
这是最常见的原因!Google需要验证你的应用签名指纹:- 如果你用的是debug包,运行这条命令获取指纹:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - 如果你是release包,替换成你自己的签名文件路径和密码。
- 打开Google Cloud控制台,找到你的项目→API和服务→凭据,确保对应的Android客户端ID已经添加了这个SHA-1指纹。
- 如果你用的是debug包,运行这条命令获取指纹:
确认Server Client ID的类型正确
你的代码里调用了requestIdToken(getString(R.string.server_client_id)),这里的ID必须是Web应用类型的客户端ID,不是Android类型的!很多人会把Android客户端ID填进去,直接导致错误10。
去控制台的凭据页面,找到标记为「Web应用」的客户端ID,复制到你的strings.xml里。检查Google登录API是否启用
去Google Cloud控制台→API和服务→库,搜索「Google Sign-In API」,确保它处于已启用状态。如果没启用,API请求会直接失败。核对包名一致性
控制台里Android客户端ID对应的包名,必须和你项目build.gradle里的applicationId完全一致,大小写、拼写都不能错。清理缓存并重新安装
- 先在Android Studio里点击「File→Invalidate Caches...」,重启IDE。
- 卸载设备上的旧应用,重新编译安装新包(避免旧的配置缓存干扰)。
代码补充:正确处理登录结果
另外,确保你在onActivityResult里正确解析结果,方便后续排查:
private const val RC_SIGN_IN = 1001 // 自定义请求码 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == RC_SIGN_IN) { val signInTask = GoogleSignIn.getSignedInAccountFromIntent(data) try { val account = signInTask.getResult(ApiException::class.java) // 登录成功,获取ID Token处理后端验证 val idToken = account.idToken Log.d(TAG, "Google ID Token: $idToken") } catch (e: ApiException) { Log.e(TAG, "登录失败,错误码: ${e.statusCode}") // 错误码10就是咱们上面排查的配置问题 } } }
按照上面的步骤走一遍,基本就能解决这个错误了!
内容的提问来源于stack exchange,提问作者Solution Soni
相关产品推荐
相关产品推荐

