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

时间:2018-05-29 12:34:00

标签: ios swift health-kit

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

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

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

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

1 个答案:

答案 0 :(得分: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没有差异,我建议您不要使用核心数据,但如果您需要保留一些与{{1不支持的“锻炼相关的其他数据那么你必须设置一个自己的存储。

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

  

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

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