Google One Tap登录时正常时抛错误码10,求助排查
Google One Tap Sign-In 无规律触发 ApiException: 10 的解决方案
问题背景
已完成Google One Tap Sign-In功能集成,配置了Web应用凭证、Android调试及发布凭证,初期运行正常。无代码变更情况下,功能出现不稳定:时而正常运行,时而抛出com.google.android.gms.common.api.ApiException: 10: Developer console is not set up correctly,异常无规律自行恢复。2023-07-08更新:授权弹窗后的步骤也会触发相同错误。
排查与修复步骤
1. 验证Google Cloud Console凭证配置
- 确认Android凭证的SHA-1指纹包含所有环境的签名信息:调试版本(本地
debug.keystore)和发布版本(正式签名密钥)的SHA-1都需添加到对应Android凭证中,缺一不可。 - 核对代码中
SERVER_CLIENT_ID是否为Web应用的Client ID,不要误填Android平台的Client ID。 - 若为生产环境,确保OAuth同意屏幕已发布(状态为「已发布」),未发布的同意屏幕仅支持添加的测试用户,可能导致随机校验失败。
2. 清除Google Play服务缓存
时好时坏的异常常与Google Play服务本地缓存异常有关:
- 进入设备「设置」→「应用」→「Google Play服务」→「存储」→「清除缓存」(不要清除数据)。
- 测试设备可尝试重启,或更新Google Play服务至最新版本。
3. 调整重试逻辑,避免掩盖真实问题
代码中针对DEVELOPER_ERROR关闭autoSelect的重试逻辑与错误码10无直接关联,建议暂时移除该逻辑,直接抛出错误并记录详细日志,便于定位根因:
.addOnFailureListener { val statusCode = (it as? ApiException)?.statusCode when { statusCode == CommonStatusCodes.CANCELED && launchSignInOptions.filterByAuthorizedAccounts -> { launchLogIn(launchSignInOptions.copy(filterByAuthorizedAccounts = false), onError) } else -> { // 直接抛出错误,不做autoSelect重试 onError(it) } } }
4. 确认APK签名与配置一致
- 用以下命令获取当前运行APK的SHA-1指纹,与Google Cloud Console中配置的对比,确保完全匹配:
keytool -list -v -keystore /path/to/your/keystore/file - 检查打包配置,避免发布版本误用调试签名,或调试版本误用发布签名。
5. 添加详细日志辅助排查
在setResult的异常捕获块中添加日志,记录异常信息及Google Play服务版本,便于定位问题:
fun setResult(data: Intent?, onError: (Throwable) -> Unit) { try { val credential = oneTapClient.getSignInCredentialFromIntent(data) loadUser(credential.id, credential.googleIdToken) } catch (e: ApiException) { Log.e("AuthDebug", "Code: ${e.statusCode}, Message: ${e.message}, GMS Version: ${GoogleApiAvailability.getInstance().getApkVersion(activity)}") onError(e) } }
内容的提问来源于stack exchange,提问作者Ircover
相关产品推荐
相关产品推荐

