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

Best approach to reading workout data from HealthKit

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

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

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

不是很相关,但对于我在上面提到的即时同步的一些澄清。它不会总是立即与服务器同步,因为当手表超出范围时,用户可以创建其他锻炼会话,这些会话具有存储在核心数据中的相关数据,然后在回到范围内时立即同步。

When I end the workout, I save the heart rate, and energy burned info. I could include other code here that also writes this information to Core Data, then basically immediately pulls it out and syncs it with the iOS app, which syncs it with the server. Is this the best approach?

我建议创建一些 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,但如果您需要保留一些与锻炼相关的额外数据,而 [=16] 不支持=] 然后你必须设置一个自己的存储。

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

In iOS is it possible to query HealthKit workout sessions, and extract a list of heart rate readings at each update?

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