从 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 读取锻炼数据的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 WatchOS 上通过 HealthKit 访问锻炼?
如何从 HealthKit 跑步锻炼中获取海拔增益、节奏和跑步速度?