集成Google Fit API时Google Sign in请求始终失败,求助排查
排查Google Fit授权失败的关键步骤&代码优化建议
看起来你已经完成了基础配置,但Google Fit授权失败通常是几个容易忽略的细节导致的,我帮你梳理一下排查方向,顺便优化下代码逻辑:
1. 确认OAuth consent screen配置完整
这是绝大多数开发者会漏掉的核心步骤:
- 登录Google Cloud Console找到你的项目,进入APIs & Services > OAuth consent screen
- 必须填写完整的应用信息:应用名称、用户支持邮箱、开发者联系邮箱都不能空
- 在Scopes模块,手动添加Google Fit需要的权限范围:
https://www.googleapis.com/auth/fitness.activity.read(对应你请求的步数读取权限) - 测试阶段一定要把你的测试邮箱添加到Test users列表里,否则非测试用户(包括你自己)无法完成授权
2. 核对SHA-1密钥的一致性
- 确保Firebase项目设置和Google Cloud Console里配置的SHA-1完全一致,debug和release环境的密钥要区分开
- 可以用命令重新生成debug密钥的SHA-1验证:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
3. 修复代码中的GoogleSignIn初始化逻辑
你的代码里用了GoogleSignIn.getLastSignedInAccount(this),但如果之前没有用户登录过,这个方法会返回null,直接调用requestPermissions会导致流程出错。建议修改为更稳妥的逻辑:
private fun connectToGoogleFit() { Log.e("GOOGLE_FIT", "google fit init") val fitnessOptions = FitnessOptions.builder() .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ) .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ) .build() // 创建适配Fitness权限的GoogleSignInClient val googleSignInClient = GoogleSignIn.getClient(this, fitnessOptions) val lastSignedInAccount = GoogleSignIn.getLastSignedInAccount(this) if (lastSignedInAccount != null && GoogleSignIn.hasPermissions(lastSignedInAccount, fitnessOptions)) { Log.e("GOOGLE_FIT", "has permission") accessGoogleFit() } else { Log.e("GOOGLE_FIT", "no permission / no signed in account") // 直接启动登录授权流程,覆盖未登录/无权限两种情况 startActivityForResult(googleSignInClient.signInIntent, GOOGLE_FIT_PERMISSIONS_REQUEST_CODE) } }
4. 检查依赖版本兼容性
确保build.gradle中的Google服务依赖是最新稳定版,旧版本可能存在权限流程兼容问题:
implementation 'com.google.android.gms:play-services-fitness:21.1.0' implementation 'com.google.android.gms:play-services-auth:20.7.0'
5. 验证设备的Google Play服务版本
测试设备上的Google Play服务必须是最新版本,旧版本可能不支持Google Fit的新授权机制,建议用户在Google Play商店更新后再测试。
如果以上步骤都排查过还是失败,可以查看Logcat中GoogleSignIn或Fitness相关的详细报错日志,里面会给出具体的失败原因(比如权限未配置、SHA-1不匹配等)。
内容的提问来源于stack exchange,提问作者Suneesh Ambatt
相关产品推荐
相关产品推荐

