从 HealthKit 读取锻炼数据的最佳方法

Posted

技术标签:

【中文标题】从 HealthKit 读取锻炼数据的最佳方法【英文标题】:Best approach to reading workout data from HealthKit 【发布时间】:2018-05-29 12:33:59 【问题描述】:

我想将锻炼的心率信息上传到我的服务器。问题是,我不确定如何获取这些信息。

当我结束锻炼时,我会保存心率和能量消耗信息。我可以在此处包含其他代码,这些代码也将这些信息写入 Core Data,然后基本上立即将其拉出并与 ios 应用程序同步,后者将其与服务器同步。这是最好的方法吗?

在 iOS 中是否可以查询 HealthKit 锻炼会话,并在每次更新时提取心率读数列表?

不是很相关,但为了澄清我上面提到的即时同步。它不会总是立即与服务器同步,因为当 Watch 超出范围时,用户可以创建其他锻炼会话,这些会话将相关数据存储在 Core Data 中,然后在返回范围时立即同步。

【问题讨论】:

【参考方案1】:

当我结束锻炼时,我会保存心率和能量消耗信息。我可以在此处包含其他代码,这些代码也将这些信息写入 Core Data,然后基本上立即将其拉出并与 iOS 应用程序同步,后者将其与服务器同步。这是最好的方法吗?

我建议创建一些HealthKitService,负责获取数据并将其保存到HKHealthStorage。 使用PONSO 对象来描述您将在应用程序的不同层中传递的DTO

它看起来像这样:

struct Workout 
    let date: Date
    let sets: Double
    let reps: Double
    let heartRate: Double


protocol HealthKitService: class 
    func saveWorkout(_ workout: Workout, completion: (() -> ())?)
    func fetchWorkouts(by date: Date, completion: (([Workout]) -> ())?)

为简单起见,如果您的数据模型与 HKWorkout 没有不同,我建议不要使用 Core Data,但如果您需要保留一些与锻炼相关的额外数据,而 HealthKit 不支持,那么您必须设置自己的存储。

如果您想将用户的健康数据发送到您自己的服务器,请查看Protecting User Privacy 文档,以防止您的应用在 App Store Review 期间被拒绝。

在 iOS 中是否可以查询 HealthKit 锻炼会话,并在每次更新时提取心率读数列表?

是的,这是可能的。查看HKWorkout 的官方文档。 基本上,您需要一个HKHealthStorage 来将与HKWorkout 关联的心率保存为HKSample。 然后你可以执行查询来接收数据,这里是reference。

【讨论】:

以上是关于从 HealthKit 读取锻炼数据的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

HealthKit:与提供的锻炼相关的样本删除问题

HealthKit:与提供的锻炼相关的样本删除问题

如何在 WatchOS 上通过 HealthKit 访问锻炼?

如何从 HealthKit 跑步锻炼中获取海拔增益、节奏和跑步速度?

如何从 HealthKit 跑步锻炼中获取海拔增益、节奏和跑步速度?

HealthKit 锻炼查询似乎真的很慢