Flutter中health 3.2.0包获取健康数据为空及oAuth配置问题咨询
数据返回长度为0的排查方案
- 先校验平台配置是否完整
- iOS端:必须在Xcode的「Signing & Capabilities」中添加HealthKit能力,同时在Info.plist中添加
NSHealthShareUsageDescription和NSHealthUpdateUsageDescription对应的权限说明文案,确保你需要读取的所有数据类型都在HealthKit权限范围内 - 安卓端:首先确认设备搭载了可正常使用的Google Play服务,国内无GMS的设备无法通过该包对接Google Fit读取数据;需要在AndroidManifest.xml中添加
ACTIVITY_RECOGNITION权限,安卓13及以上版本还需单独动态申请该权限
- iOS端:必须在Xcode的「Signing & Capabilities」中添加HealthKit能力,同时在Info.plist中添加
- 确认授权范围完整
requestAuthorization方法只要用户同意了任意一项权限就会返回true,不代表你申请的所有数据类型都拿到了授权,你可以调用healthFactory.hasPermissions(types)方法校验你指定的4类数据是否都获得了读取权限 - 校验是否存在对应数据
先手动将查询时间范围缩小到最近7天,同时在系统健康APP/Google Fit中手动添加几条步数、体重类的测试数据后再重试,很多场景下返回空是因为对应时间段内确实没有存储的健康数据 - 版本适配
3.2.0版本存在部分安卓设备无法读取血糖、体重类数据的已知问题,可以尝试升级health包到最新稳定版后再测试
OAuth 相关文件说明
- 这两个文件仅用于安卓端对接Google Fit的OAuth认证,iOS端无需配置
- 你不需要将完整的client_secret.json文件放入项目中,只需要将申请到的OAuth client ID配置到安卓项目的
android/app/src/main/res/values/strings.xml文件内,添加如下配置即可:
health包会自动读取该配置完成Google Fit的身份认证,注意申请OAuth client ID时填写的包名、签名指纹必须和你当前运行的应用完全一致,debug和release环境的签名指纹不同需要分别申请对应client ID。<string name="health_client_id">你申请到的OAuth客户端ID值</string>
你的代码逻辑本身没有问题,按上述项逐一排查即可解决数据为空的问题。
内容的提问来源于stack exchange,提问作者saad
相关产品推荐
相关产品推荐

