概述
通过使用HealthKit框架在应用之间共享健康和健身数据。HealthKit将数据类型和单位限制为预定义列表,而不是让开发者创建自定义数据类型和单位。这确保所有应用都能理解数据的含义及其使用方式。
此外,该框架使用大量子类,产生了深层次的相似类层次结构。这些类之间往往有细微但重要的差异。例如,您使用HKQuantitySample对象来存储具有数值的数据,而使用HKCategorySample对象来存储从枚举中选择的值。
HealthKit还使用一对密切相关的类,需要一起使用。例如,HKObject和HKObjectType抽象类具有基本平行的具体子类层次结构。在处理对象和对象类型时,必须使用匹配的子类。
健康数据
HealthKit在HealthKit Store中保存多种数据类型:
特征数据
通常不会改变的特征,如用户的出生日期、血型、生物性别和皮肤类型。您可以使用dateOfBirth()、bloodType()、biologicalSex()和fitzpatrickSkinType()方法直接从HealthKit Store读取这些数据。您的应用无法保存特征数据,用户必须通过Health应用输入或修改这些数据。
样本数据
表示特定时间点测量值的样本。所有样本类都是HKSample类的子类,而HKSample类又是HKObject类的子类。有关更多信息,请参见样本。
锻炼数据
存储有关健身和锻炼活动信息的样本。虽然HKWorkout是HKSample的子类,但它的行为与其他样本子类有所不同。有关更多信息,请参见锻炼数据。
来源数据
有关样本来源的信息。HKSourceRevision对象包含有关保存样本的应用或设备的信息。HKDevice对象包含生成数据的硬件设备的信息。
删除的对象
表示在从HealthKit Store中删除后样本的对象。HealthKit使用HKDeletedObject实例临时存储已删除样本的UUID。您可以使用删除的对象来响应用户或其他应用程序删除对象的操作。有关更多信息,请参见HKAnchoredObjectQuery和HKDeletedObject。
对象和样本的属性
HKObject类是所有HealthKit样本类型的超类。所有HKObject子类都是不可变的。每个对象具有以下属性:
-
UUID:该特定条目的唯一标识符。
-
元数据:包含有关条目的附加信息的字典。元数据可以包含预定义键和自定义键。预定义键便于应用之间的数据共享,自定义键帮助扩展给定的HealthKit对象类型,为条目添加特定于应用的数据。
-
来源修订:样本的来源。来源可以是直接将数据保存到HealthKit的设备或应用。HealthKit在将数据保存到HealthKit Store时,会自动记录每个对象的来源和版本。此属性仅在从Store中检索的对象上可用。
-
设备:生成存储在该样本中的数据的硬件设备。
HKSample类
HKSample类是HKObject的子类。样本对象表示特定时间点的数据,所有样本对象都是HKSample类的子类。它们具有以下属性:
-
类型:样本类型,例如睡眠分析样本、高度样本或步数样本。
-
开始日期:样本的开始时间。
-
结束日期:样本的结束时间。如果样本表示单个时间点,结束时间应等于开始时间。如果样本表示在时间间隔内收集的数据,结束时间应发生在开始时间之后。
样本进一步分为四个具体子类:
-
类别样本: 可以分类为有限类别的数据。参见HKCategorySample。
-
数量样本: 可以存储为数值的数据。数量样本是HealthKit中最常见的数据类型,包括用户的身高和体重,以及其他数据,如步数、用户体温和脉搏率。参见HKQuantitySample。
-
相关性: 包含一个或多个样本的复合数据。HealthKit使用相关性来表示食物和血压。当创建食物或血压数据时,您应该始终使用相关性。参见HKCorrelation。
-
锻炼: 表示身体活动的数据,如跑步、游泳或玩耍。锻炼通常具有类型、持续时间、距离和燃烧能量等属性。您还可以将锻炼与其他细粒度样本关联。与相关性不同,锻炼不包含这些样本;但是,您可以使用锻炼查询它们。有关更多信息,请参见HKWorkout。
线程
HealthKit Store是线程安全的,大多数HealthKit对象是不可变的。一般来说,您可以在多线程环境中安全地使用HealthKit。这意味着您可以在多个线程中同时访问和操作HealthKit数据,而不会导致数据竞争或不一致的问题。这种设计使得开发者能够在复杂的应用程序中有效地管理健康和健身数据。
设备间数据同步
HealthKit 自动在不同设备间同步。
设置HealthKit
概述
在使用HealthKit之前,您必须执行以下步骤:
-
在应用中启用HealthKit:在您的应用的设置中启用HealthKit功能。
-
确保当前设备支持HealthKit:检查当前设备是否支持HealthKit框架。
-
创建应用的HealthKit Store:实例化HKHealthStore对象,以便与HealthKit进行交互。
-
请求读取和共享数据的权限:向用户请求访问特定健康数据类型的权限,以便读取和写入数据。
启用HealthKit
在使用HealthKit之前,您必须为您的应用启用HealthKit功能。在Xcode中,选择项目并添加HealthKit能力。
确保当前设备支持HealthKit
调用方法isHealthDataAvailable()
,来确认当前设备是否可用。
if HKHealthStore.isHealthDataAvailable() {
// Add code to use HealthKit here.
}
在调用HealthKit其他方法前,调用此方法。如果设备不支持,其他方法会报errorHealthDataUnavailable
错误。如果HealthKit被禁用,会报errorHealthDataRestricted
错误。
创建应用的HealthKit Store
如果HealthKit支持并且启用,实例化HKHealthStore
let healthStore = HKHealthStore()
每个应用只需要一个HealthKit Store。这些是长期存在的对象;您只需创建一次Store,并保留一个引用以供后续使用。
示例项目
创建移动端健康应用:
Creating a Mobility Health App | Apple Developer D