下表包含数据类型的完整列表,其中包含多个列,可帮助您了解每种类型在 Google Health API 中的表示形式,以及每种类型在哪个范围内可用。
数据类型字段
Google Health API 数据类型表包含多个字段列,可帮助您了解每种数据类型的表示形式和要求。这些列如下:
| 字段 | 说明 |
|---|---|
dataType |
端点网址中使用的以连字符分隔的标识符(例如 active-minutes)。 |
filter 参数 |
用作每日汇总和汇总请求中 dataType 过滤条件参数值的标识符(例如 active_minutes),以下划线分隔。 |
| 记录类型 | 指明所记录数据的结构和格式。在后台,这与数据点的资源表示法一致。可能的值包括:
|
| 可用操作 | 列出数据类型支持的 API 方法(例如 list、create 和 rollUp)。 |
| 范围 | 访问数据类型所需的 OAuth 范围。 |
| Webhook 支持 | 表示该数据类型支持在同步新数据时使用网络钩子发送实时通知。 |
| 支持真正的零 | 表示数据类型支持记录显式零值,以区分活跃零值(例如零活跃分钟数)与缺失或未记录的数据。 |
| 存储分辨率 | 存储数据点的最小记录或采样间隔(例如,steps 为 1 分钟)。对于汇总,这表示建议的最小 windowSize,以确保均匀分布的聚合,而不会出现子间隔数据伪影。 |
| 兼容的设备 | 一个可展开的列表,其中列出了可记录此数据类型并将其同步到 Google Health API(使用 Fitbit 应用)的实体设备。 |
| 数据类型 | 可用的 操作 |
范围 |
|---|---|---|
|
活动消耗能量
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
活跃分钟数
dataType:
active-minutes过滤条件参数: active_minutes
记录类型: 间隔
存储分辨率 :1 分钟
兼容的设备
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
活跃区间分钟数
dataType:
active-zone-minutes过滤条件参数: active_zone_minutes
记录类型: 间隔
存储分辨率 :1 分钟
兼容的设备
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
活动级别
|
list、reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
海拔高度
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
血糖
|
list、get、reconcile、rollup、dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
体脂率
|
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
在心率区间内消耗的卡路里
|
rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
核心体温
|
list、get、reconcile、rollup、dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
每日心率变异性
dataType:
daily-heart-rate-variabilityfilter parameter: daily_heart_rate_variability
记录类型: 每日
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
每日心率区间
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
每日血氧饱和度
dataType:
daily-oxygen-saturation过滤条件参数: daily_oxygen_saturation
记录类型: 每日
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
每日呼吸频率
dataType:
daily-respiratory-rate过滤条件参数: daily_respiratory_rate
记录类型: 每日
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
每日静息心率
dataType:
daily-resting-heart-rate过滤条件参数: daily_resting_heart_rate
记录类型: 每日
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
每日睡眠温度偏差
dataType:
daily-sleep-temperature-derivations过滤条件参数: daily_sleep_temperature_derivations
记录类型: 每日
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
每日最大摄氧量
dataType:
daily-vo2-max过滤条件参数: daily_vo2_max
记录类型: 每日
兼容的设备
|
list、reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
距离
dataType:
distance过滤条件参数: distance
记录类型: 间隔
存储分辨率 :1 分钟
兼容的设备
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
心电图 (ECG)
dataType:
electrocardiogram过滤条件参数: electrocardiogram
记录类型: 练习
兼容的设备
|
list | .ecg.readonly |
|
锻炼
dataType:
exercise过滤条件参数: exercise
记录类型: 练习
兼容的设备
|
list、get、reconcile、create、update、batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
爬楼层数
|
reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
食品
|
list、get | .nutrition.readonly.nutrition.writeonly |
|
食物计量单位
dataType:
food-measurement-unit过滤条件参数: food_measurement_unit
记录类型: 饮食
兼容的设备
|
list、get | .nutrition.readonly.nutrition.writeonly |
|
心率
dataType:
heart-rate过滤条件参数: heart_rate
记录类型: 示例
存储分辨率 :1 秒
兼容的设备
|
list、reconcile、rollup、dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
心率变异性
dataType:
heart-rate-variability过滤条件参数: heart_rate_variability
记录类型: 示例
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
身高
|
list、get、reconcile、create、update、batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
饮水量记录
|
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete | .nutrition.readonly.nutrition.writeonly |
|
心律不齐通知
|
list | .irn.readonly |
|
月经期
|
create、update、batchDelete | .reproductive_health.writeonly |
|
氛围影调
|
create、update、batchDelete | .mindfulness.writeonly |
|
营养记录
dataType:
nutrition-log过滤条件参数: nutrition_log
记录类型: 练习
兼容的设备
|
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete | .nutrition.readonly.nutrition.writeonly |
|
排卵检测
|
create、update、batchDelete | .reproductive_health.writeonly |
|
血氧饱和度
dataType:
oxygen-saturation过滤条件参数: oxygen_saturation
记录类型: 示例
存储分辨率 :1 分钟
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
呼吸频率睡眠状况摘要
dataType:
respiratory-rate-sleep-summary过滤条件参数: respiratory_rate_sleep_summary
记录类型: 示例
兼容的设备
|
list、reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
跑步最大摄氧量
dataType:
run-vo2-max过滤条件参数: run_vo2_max
记录类型: 示例
兼容的设备
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
久坐时段
dataType:
sedentary-period过滤条件参数: sedentary_period
记录类型: 间隔
兼容的设备
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
体表温度传感器
v4beta |
list | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
睡眠
dataType:
sleep过滤条件参数: sleep
记录类型: 练习
兼容的设备
|
list、get、reconcile、create、update、batchDelete | .sleep.readonly.sleep.writeonly |
|
步骤
dataType:
steps过滤条件参数: steps
记录类型: 间隔
存储分辨率 :1 分钟
兼容的设备
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
游泳长度数据
dataType:
swim-lengths-data过滤条件参数: swim_lengths_data
记录类型: 间隔
兼容的设备
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
症状
|
create、update、batchDelete | .logged_symptoms.writeonly |
|
处于各心率区间的时长
|
list、reconcile、rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
总卡路里数
dataType:
total-calories过滤条件参数: total_calories
记录类型: 间隔
存储分辨率 :1 分钟
兼容的设备
|
rollup、dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
最大摄氧量
dataType:
vo2-max过滤条件参数: vo2_max
记录类型: 示例
兼容的设备
|
list、reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
重量
|
list、get、reconcile、rollup、dailyRollup、create、update、batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
查询限制
从 API 查询数据点、汇总数据或每日汇总数据时,请注意以下限制:
- 过滤条件要求:某些只读派生数据类型(例如
total-calories)需要使用过滤条件来指定时间间隔开始时间(使用物理时间或民用时间)。 - 查询范围限制:汇总和每日汇总聚合端点会根据数据类型强制执行最大查询范围限制:
calories-in-heart-rate-zone、heart-rate、active-minutes和total-calories的查询范围上限为 14 天。- 对于所有其他数据类型,查询范围上限为 90 天。
- 汇总时间范围大小:调用
rollUp端点时,windowSize持续时间必须至少为 1 秒 ("1s")。持续时间不足 1 秒的请求会被拒绝,并返回INVALID_ARGUMENT。此外,请选择等于或大于数据类型底层存储分辨率的windowSize(例如,对于 1 分钟间隔数据类型(如steps和distance),选择"60s"),以避免子间隔分布不均匀。如需了解详情,请参阅汇总窗口和存储分辨率。
每日数据类型与间隔数据类型
对于某些生理指标,例如心率变异性 (HRV) 或血氧饱和度 (SpO2),Google Health API 提供了两种不同的数据类型:Daily 版本和 Interval 版本。了解二者之间的区别是为您的应用场景选择合适指标的关键:
每日:全天单一、预先汇总的摘要。将此方法用于高级趋势和每日信息中心,以节省处理时间。
间隔:全天进行的高分辨率精细测量。您可以使用此功能绘制日内波动图表或执行深入的逐小时分析。
数据可用性
只有在用户同步其活动追踪器或手动将新数据输入 Google Health 应用后,用户的数据才会更新。当 Google Health 应用在移动设备上打开,且两个设备具有有效的数据连接并处于蓝牙范围内时,Fitbit 设备和 Google Health 应用可以每 15 分钟自动同步一次。如果用户使用 MobileTrack 追踪活动,只要应用处于打开状态,MobileTrack 就会每小时同步一次。
查询历史数据
Google Health API 的核心优势之一是能够长期跟踪用户的表现并监测其健康生命体征。 您可以查询用户自记录以来的数据;该 API 对应用可以使用的历史数据量没有任何限制或约束。
不过,查询历史数据仍受标准速率限制的约束。为了管理系统稳定性并防止负载过大,Google Health API 会使用自动分页功能,并根据端点设置页面大小。请注意以下边界和行为:
- 自动分页:如果您查询的数据跨度较长,API 将仅返回第一页结果(最多达到该端点的页面大小上限),并附带一个
nextPageToken。您必须使用nextPageToken请求后续页面。 - 可变页面大小:上限取决于端点和数据类型。对于大多数数据类型,页面大小上限为 10,000。
不过,对于某些数据类型(例如
exercise和sleep),默认和最大页面大小上限为 25。例如,如果客户端请求过去 10 年的所有睡眠数据,API 仍会在第一页上仅返回 25 个睡眠时段。 - 汇总日期范围限制:对于数据汇总和聚合端点(例如
rollUp和dailyRollUp),查询日期范围会根据数据类型受到限制:calories-in-heart-rate-zone、heart-rate、active-minutes和total-calories的最大范围为 14 天。- 对于所有其他汇总数据类型,最长日期范围为 90 天。
根据应用所需的历史数据量,检索整个数据集需要按顺序对页面进行分页。在设计应用的数据同步流程时,请牢记这一点。
为确保最佳性能并避免 API 错误,请在查询历史数据时遵循以下准则:
分阶段数据同步(热加载与冷加载)
- 初始“热”加载:在主要加载序列期间,仅提取和呈现最近 7-14 天的数据。这样可以确保用户立即看到数据,而无需等待长时间运行的查询。
- 后台“冷”加载:在主界面呈现后,将较旧的历史数据检索委托给异步、低优先级队列或后台进程。
查询分块以进行聚合
- 由于汇总和每日汇总端点会强制执行最大日期范围限制(14 天或 90 天,具体取决于数据类型),因此您必须将大型历史汇总查询拆分为这些限制范围内的较小连续时间间隔。
- 安全地对这些子查询进行批处理或排序,以遵守并发限制并保持稳定的界面进度指示器。
利用预先汇总的汇总数据
重构概览信息中心和趋势图,以使用预先汇总的摘要端点(例如 DailyRollUpDataPoints)。这将大幅减少后端的计算开销和到客户端的网络传输时间。
弹性错误处理(智能重试)
- 遇到速率限制 (
429 Too Many Requests) 和服务器网关超时 (504 Gateway Timeout) 时,请实施严格的指数退避算法处理。切勿立即重试失败的大型载荷。即时重试会加剧后端拥塞,并加剧系统性能下降。
第三方访问权限
Fitbit 设备无法直接与第三方应用或服务通信。这些设备只能与 Google Health 应用通信和同步。
设备会全天自动同步数据,只要 Google Health 应用处于打开状态,或者如果蓝牙处于启用状态且应用在后台运行,则每 15 分钟同步一次。此同步流程完成后,第三方服务便可通过 Google Health API 获取这些数据。
数据质量和有效性过滤
为了提供可靠的健康指标,而无需自定义客户端噪声过滤,Google Health API 会在返回响应之前验证传感器遥测数据并排除无效测量值:
- 对于分钟级血氧饱和度 (
oxygen-saturation),API 仅返回经过验证的读数,并会移除因手臂移动、腕带松动或传感器置信度得分低于 50% 而标记为无效的分钟数,以及无效读数前后 3 分钟的数据和短于 4 分钟的孤立有效时间段。因此,分钟级覆盖范围可能较为稀疏,并且预计会出现间隙。如需了解详情,请参阅分钟级 SpO2 过滤和数据有效性。
距离标准
锻炼距离(例如 elevationGainMillimeters)以毫米为标准单位进行测量,原因如下:
- 保持数据精度:使用毫米的最重要原因是为了确保我们读取和提供的数据不会丢失任何精度。使用毫米等精细单位,可以高精确度地表示测量值。
- 标准化:毫米是 Google 各项服务中设计的标准化单位。这种一致性有助于确保开发者在与 API 的不同部分交互时获得一致的体验。
- 广泛的测量系统支持:使用毫米等基本单位,开发者可以轻松转换为任何其他所选单位,无论他们使用的是公制、英制还是其他测量系统。
白昼时长可变
Health API 在处理时间时会优先考虑用户的时间,以应对夏令时或旅行导致的一天时长变化。每个数据点都存储有物理世界协调时间 (UTC) 时间戳和事件发生时有效的世界协调时间 (UTC) 偏移量。这样,系统便可以:
- 将事件映射到精确的物理瞬间。
- 根据用户的本地情境更正时间,以便进行汇总。
夏令时
当夏令时结束时,时间会“回拨”,导致民用日变为 25 小时,该日期的汇总数据将包含 25 小时的数据。“春季向前”会导致民用日变为 23 小时,时间会移回标准时间。
旅游
跨时区旅行可能会导致单个民用日的实际时长发生更显著的变化。
使用 dailyRollUp 端点来协调时区差异。它会根据用户的本地时间,自动将数据归因于记录数据的日历日,从而有效地将一天“拼接”在一起,而不受时区变化的影响。如需了解详情和示例,请参阅“汇总数据”指南中的跨日历日汇总。