Android集成GoogleSignInClient遇ApiException:10开发者错误求助
解决GoogleSignInClient抛出ApiException:10(开发者错误)的方案
ApiException:10本质是客户端身份验证不匹配,结合你对接Fitness API的场景,按以下步骤排查修复:
1. 严格核对客户端ID与SHA1哈希的匹配性
- 打开Google Cloud Console,找到你的项目→API和服务→凭据,检查Android类型的OAuth客户端ID:
- 确认SHA1哈希值和当前调试/发布用的签名证书完全一致。调试版用
debug.keystore的SHA1,发布版用正式签名证书的SHA1。 - 获取SHA1的命令:
keytool -list -v -keystore 你的keystore路径 -alias 证书别名,调试版默认命令:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey(Windows路径为C:\Users\<你的用户名>\.android\debug.keystore)
- 确认SHA1哈希值和当前调试/发布用的签名证书完全一致。调试版用
- 绝对不能把Web类型的客户端ID用到Android代码中,Android端只能用Android类型的客户端ID。
2. 适配Fitness API配置GoogleSignInOptions
因为要对接Fitness API,必须在配置中添加对应权限Scope,同时确保ID Token使用正确的Android客户端ID。修改代码如下:
// 替换为你在Google Cloud Console获取的Android客户端ID val ANDROID_CLIENT_ID = "你的Android客户端ID.apps.googleusercontent.com" val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken(ANDROID_CLIENT_ID) // 对接Fitness API需验证身份,必须添加 .requestScopes(Scope("https://www.googleapis.com/auth/fitness.activity.read")) .build()
3. 清除本地缓存数据
本地缓存的旧配置可能导致验证失败,执行以下操作:
- 手机设置→应用→Google Play服务→存储→清除缓存+清除数据
- 清除你的应用的缓存和数据,重新启动测试。
4. 检查OAuth同意屏幕配置
- 确保OAuth同意屏幕的状态为「发布」(测试阶段可添加测试用户,将你的测试账号加入列表)
- 确认同意屏幕中已添加Fitness API的对应权限Scope,且状态为已保存。
5. 统一依赖版本避免冲突
在Module级别的build.gradle中,确保Google Sign-In和Fitness API的依赖版本一致,推荐使用最新稳定版:
implementation 'com.google.android.gms:play-services-auth:20.7.0' implementation 'com.google.android.gms:play-services-fitness:21.1.0'
内容的提问来源于stack exchange,提问作者Flarosa
相关产品推荐
相关产品推荐

