使用Google Fit REST API无法读取血糖数据问题排查
问题:Google Fit REST API 无法返回手动录入的血糖数据
已在Google Fit应用(路径:Fit应用>浏览>生命体征>血糖)中手动录入血糖数据,使用OAuth 2.0 Playground调用dataset:aggregate接口尝试获取数据,具体参数如下:
- 权限范围:
.../auth/fitness.blood_glucose.read - 请求示例:
POST /fitness/v1/users/me/dataset:aggregate HTTP/1.1 Host: www.googleapis.com Content-length: 193 Content-type: application/JSON Authorization: Bearer y**
- 请求体:
{ "aggregateBy": [{"dataTypeName": "com.google.blood_glucose"}], "bucketByTime": { "durationMillis": 86400000 }, "startTimeMillis": 1663180200000, "endTimeMillis": 1665772200000 }
调用无报错,但响应中所有point数组为空,而这些数据在Google Fit应用中可见。仅血糖数据存在此问题,其他健康数据均可正常获取。
解决方案
1. 补充数据源定义
手动录入的血糖数据属于原始用户输入,仅指定dataTypeName可能无法匹配到正确的数据源。尝试在aggregateBy中添加数据源ID或类型:
- 使用合并数据源ID:
{ "aggregateBy": [ { "dataTypeName": "com.google.blood_glucose", "dataSourceId": "derived:com.google.blood_glucose:com.google.android.gms:merged" } ], "bucketByTime": { "durationMillis": 86400000 }, "startTimeMillis": 1663180200000, "endTimeMillis": 1665772200000 }
- 或指定原始数据源类型:
{ "aggregateBy": [ { "dataTypeName": "com.google.blood_glucose", "dataSourceType": "raw" } ], "bucketByTime": { "durationMillis": 86400000 }, "startTimeMillis": 1663180200000, "endTimeMillis": 1665772200000 }
2. 验证时间范围准确性
确认startTimeMillis和endTimeMillis完全覆盖手动录入数据的时间戳。可以暂时扩大时间范围(比如将起始时间设为录入日期前一天),测试是否能返回数据。
3. 重新确认权限授权
在OAuth 2.0 Playground中,检查已授权的权限列表是否包含fitness.blood_glucose.read,且授权账号与Google Fit应用中录入数据的账号一致。若存在疑问,重新完成授权流程。
4. 用dataset:get接口直接验证数据
调用dataset:get接口获取原始血糖数据,确认云端是否存在该数据:
GET /fitness/v1/users/me/dataSources/raw:com.google.blood_glucose:com.google.android.gms:user_input/datasets/1663180200000-1665772200000 HTTP/1.1 Host: www.googleapis.com Authorization: Bearer y**
如果此接口返回数据,说明aggregate接口的聚合规则需要调整;若仍为空,需检查Google Fit应用的数据同步状态。
5. 检查数据同步状态
打开Google Fit应用,进入设置页面确认数据同步已开启,退出并重新登录应用触发同步,确保手动录入的数据已上传至云端。
内容的提问来源于stack exchange,提问作者Rakshit Pandey
相关产品推荐
相关产品推荐

