构建多设备协同的健身应用
Build a multi-device workout app
2023年6月5日
一句话判断
HealthKit 新增了 Watch-iPhone 训练镜像 API,让 Apple Watch 上的训练数据实时同步到 iPhone 显示——骑行时把手机当码表用的场景终于有了官方支持。iPad 上也迎来了 HealthKit 和健康 App。
这场 Session 讲了什么
Session 介绍了 HealthKit 在 iOS 17/watchOS 10 中的三项重要更新:训练镜像(Workout Mirroring)、新的骑行数据类型、以及 HealthKit 登陆 iPad。
训练镜像允许 Apple Watch 上运行的训练会话在配对的 iPhone 上实时显示和控制。Watch 端使用 HKWorkoutSession 管理训练生命周期(开始、暂停、停止),iPhone 端通过新的镜像 API 接收实时心率、距离、速度等指标。用户可以把 iPhone 固定在自行车把手上当码表使用,不用把手离开车把就能看到数据。
新的骑行数据类型包括骑行速度(Cycling Speed)、功率(Power)、踏频(Cadence)和功能阈值功率(FTP)。这些数据通过 HealthKit 的新 HKQuantityType 收集,支持跨设备同步。
HealthKit 来到 iPad:用户在 iCloud 登录的 iPad 上可以看到通过 HealthKit 同步的健康数据。这为健康和训练数据的展示提供了更大的屏幕空间,适合做训练后的详细分析。
值得深挖的点
镜像 API 的双向控制:不只是单向显示——iPhone 端也可以控制 Watch 上的训练(暂停、恢复、停止)。这意味着你可以设计更丰富的控制界面,比如在 iPhone 上展示训练区间选择器,然后传给 Watch 执行。
骑行功率的标准化:功率数据之前是第三方 App 各自为政,现在通过 HealthKit 标准化后,不同 App 之间可以共享功率数据。FTP 的引入让功率区间训练成为可能。
iPad HealthKit 的授权模型:iPad 上的 HealthKit 授权与 iPhone 类似,但考虑到 iPad 的家庭共享场景,授权细节需要特别注意。
代码片段
在 iPhone 端镜像 Watch 训练(概念示例):
import HealthKit
// 在 iPhone 端创建训练镜像连接
let workoutSession = HKWorkoutSession(
healthStore: healthStore,
configuration: workoutConfiguration
)
// 监听来自 Apple Watch 的训练事件
let mirror = HKLiveWorkoutDataSource(
healthStore: healthStore,
workoutConfiguration: workoutConfiguration
)
// 收集新的骑行指标
let cyclingSpeedType = HKQuantityType(.cyclingSpeed)
let cyclingPowerType = HKQuantityType(.cyclingPower)
let cyclingCadenceType = HKQuantityType(.cyclingCadence)
// 订阅实时数据更新
// 在 iPhone 上显示:速度、功率、踏频、心率等
最佳实践
- 利用镜像 API 为运动场景设计 iPhone 端的大屏数据展示
- 骑行类 App 应尽快接入新的功率和踏频数据类型
- iPad 端适合展示训练后的详细分析,而非实时运动界面
- 跨设备同步依赖 iCloud,确保在网络不佳时也有本地缓存策略
- 测试时验证 Watch-iPhone 连接断开后的恢复行为
还有什么值得关注
- 训练镜像 API 在第三方训练设备上的支持
- FTP 的计算和更新策略
- iPad 上 HealthKit 数据的隐私和共享设置
- 跨设备训练数据的冲突解决机制