使用HKWorkoutRouteBuilder时如何将心率数据同步保存至HealthKit
解答
心率数据是否需要作为元数据保存?
不需要。
HealthKit 中 HKWorkout 的元数据仅用于存储描述运动特征的非样本类信息(如环境温度、运动场地类型、设备信息等)。心率属于独立的生理指标样本,有专属的HKQuantityType类型定义,最佳实践是将心率样本作为关联样本绑定到 Workout 下,而非存入元数据。这种存储方式可以让健康App正常识别心率数据,直接生成心率曲线展示给用户。
如果你确实有特殊需求需要在元数据中存入心率统计值(如平均心率、最大心率),可以使用系统预定义的元数据键,不要自定义键。
如何从Apple Watch获取实时心率
- 首先需要申请健康数据相关权限:在App的Info.plist中添加
NSHealthShareUsageDescription(写入权限)和NSHealthUpdateUsageDescription(读取权限),并填写清晰的用途说明 - 构造心率查询对象来监听实时更新:使用
HKAnchoredObjectQuery或者HKObserverQuery监听心率类型的样本更新,心率的类型标识为HKObjectType.quantityType(forIdentifier: .heartRate),单位默认是次/分钟(count/min) - 如果是在WatchOS端的App直接采集,可以使用
HKWorkoutConfiguration开启运动会话后,系统会自动提高心率采样频率,获取到的样本会自动携带Apple Watch的来源标识,无需额外校验
心率相关的系统元数据键
如果你确实需要将心率统计值存入元数据,可使用以下系统内置键:
- 平均心率:
HKMetadataKeyAverageHeartRate - 最大心率:
HKMetadataKeyMaximumHeartRate - 心率恢复值:
HKMetadataKeyHeartRateRecoveryOneMinute
注意:直接存储原始心率样本到Workout的关联样本列表是官方推荐的标准方案,元数据仅建议存储统计类指标,不要存储全量原始心率数据。
内容的提问来源于stack exchange,提问作者Nic Hubbard
相关产品推荐
相关产品推荐

