Flutter应用集成Google Fit获取步数、卡路里的授权问题咨询
Flutter Health包Google Fit授权失败解决方案
完整Google Fit API授权配置流程(Android端)
- Google Cloud控制台配置检查
- 确认创建的OAuth客户端ID为Android类型,填写的包名与
android/app/build.gradle中的applicationId完全一致,填写的SHA-1指纹与当前打包所用签名文件的指纹一致,debug和release版本需要分别配置对应签名的SHA-1 - 必须在Google Cloud控制台的「API和服务」→「启用API和服务」页面搜索启用Fitness API,缺少这一步会直接导致授权失败
- 若应用尚未完成OAuth同意屏幕审核发布,需要在OAuth同意屏幕页面将测试使用的Google账号添加到「测试用户」列表,未审核的应用仅名单内的账号可正常授权
- 确认创建的OAuth客户端ID为Android类型,填写的包名与
- 本地项目配置检查
- 从Google Cloud控制台下载的
google-services.json文件必须放置在android/app目录下,不可放错路径 - 项目级
android/build.gradle文件中要确认添加Google服务依赖:
版本可根据你的项目适配情况调整classpath 'com.google.gms:google-services:4.3.15' - app级
android/app/build.gradle文件最底部要添加Google服务插件应用代码:apply plugin: 'com.google.gms.google-services' AndroidManifest.xml中添加运动识别权限:<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" /> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
- 从Google Cloud控制台下载的
- Client ID补充说明
你使用的3.x版本health包无需在代码或其他配置文件中手动填写Client ID,只要google-services.json配置正确,Google服务插件会自动读取相关配置。
代码修正建议
你当前使用的示例代码有两处可调整:
- 无需单独使用permission_handler包申请权限,health包内部会自动处理权限和OAuth申请逻辑,重复申请可能导致权限状态冲突
- 调用
requestAuthorization方法时建议明确指定读取权限,修改对应代码如下:
bool accessWasGranted = await health.requestAuthorization(types, permissions: [ HealthDataAccess.READ, HealthDataAccess.READ, HealthDataAccess.READ, HealthDataAccess.READ, HealthDataAccess.READ, ]);
排障技巧
- 授权失败后先卸载应用重装,清除本地缓存的权限状态
- 确认测试手机安装了Google Fit应用,且测试用Google账号已登录Google Fit并同步过步数、卡路里等对应数据
- 确认测试设备的Google Play服务已更新到最新版本,旧版本服务可能导致OAuth授权流程异常
iOS端补充配置(适配iOS时需要)
- 在
Info.plist中添加健康数据读写权限描述:<key>NSHealthShareUsageDescription</key> <string>需要权限同步运动数据</string> <key>NSHealthUpdateUsageDescription</key> <string>需要权限读取运动数据</string> - 在Xcode项目的Signing & Capabilities中添加HealthKit能力。
内容的提问来源于stack exchange,提问作者Dipak Pd.
相关产品推荐
相关产品推荐

