Flutter Health Package生产模式连接Google Fit遇Access Denied问题求助
解决Flutter Health 4.3.0生产模式下Google Fit授权"Access Denied"问题
核心排查与修复步骤
测试模式正常、生产模式报错,问题基本集中在生产环境的配置差异上,逐一核对以下内容:
1. 核对OAuth 2.0客户端ID的生产配置
- 确认生产用的OAuth客户端ID是针对Android应用创建,且包名、签名指纹完全匹配生产环境:
- 包名必须和
android/app/build.gradle中applicationId完全一致 - 签名指纹需使用生产签名文件的SHA-1值(禁止用调试版指纹),生成命令:
keytool -list -v -keystore 你的生产签名文件路径.jks -alias 你的签名别名
- 包名必须和
- 检查Google Cloud Console中该客户端ID是否已启用Google Fit API权限,无额外限制
2. 确认Google Fit API的发布状态
- 登录Google Cloud Console找到Google Fit API,确保其状态为已发布:
- 测试模式下API默认仅对测试用户开放,生产环境需将API发布为公开状态,否则普通用户授权会被拒绝
3. 检查Android Manifest权限与配置
- 确认生产环境
AndroidManifest.xml已添加必要权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" /> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - 确保正确配置Google Play Services版本meta-data:
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
4. 匹配Flutter Health的Scope与OAuth权限
- 确认代码中请求的Health数据类型Scope,与OAuth客户端ID配置的权限范围完全一致,示例:
final types = [ HealthDataType.STEPS, HealthDataType.HEART_RATE, // 其他需要的类型 ]; final permissions = types.map((type) => HealthDataAccess.READ_WRITE).toList(); - 禁止请求OAuth客户端ID未开启的Scope,否则会触发权限拒绝
5. 验证生产打包签名配置
- 确认
android/app/build.gradle中release打包使用了正确的生产签名:signingConfigs { release { keyAlias '你的签名别名' keyPassword '你的密钥密码' storeFile file('你的生产签名文件路径.jks') storePassword '你的存储密码' } } buildTypes { release { signingConfig signingConfigs.release // 其他打包配置 } } - 签名不匹配会直接导致Google授权验证失败
6. 重置授权状态测试
- 卸载生产版本应用,在Google账号设置中移除该应用的授权记录,重新安装生产包后再次尝试授权
内容的提问来源于stack exchange,提问作者İbrahim Talha DEMİR
相关产品推荐
相关产品推荐

