HeathKit框架学习
本文结构
- 简介
- 用户数据安全及隐私
- HeathKit框架
- HeathKit使用
- 总结
简介
HeathKit
是Apple公司在推出iOS 8 系统时一块推出的关于健康信息的框架。如果iPhone手机系统升级到iOS8之后就会发现多了一个健康-app
,这就是Apple提供的一个记录用户健康信息的app,可以用它来分享健康和健身数据。还可以指定数据的来源,比如我们自己创建一个app,在我们的app中使用了HeathKit
框架之后只要经过用户的认证,就可以在我们的app之中给健康
分享数据或者从健康
中获取数据。
HeathKit
可以与健身设备一起工作,iPhone手机自身可以监控步数信息,会自动导入步数信息。但是其他信息或者设备需要配套的应该才能获取到数据并导入到HeathKit
中并在健康
中显示。
HeathKit
不能再iPad中使用,而且它也不支持扩展。
用户数据安全及隐私
由于用户的健康信息可能是敏感的,所以这些用户信息不能让开发者很随便的获取到。每条信息的读写都需要用户去选择是否同意,比如用户可以同意你获取到用户的身高体重,但是不同意读写生殖健康等其他用户不愿意公开的信息。为了防止信息泄露,我们是不知道用户是否禁止了某条信息是否被用户禁止读取的。简单的说,如果获取不到某条信息,就代表没有这条信息。
关于更多的关于隐私的信息,可以参考隐私
HeathKit框架
HeathKit
在各个应用之间提供了一种有意义的方式共享数据。因此,我们必须使用HeathKit
框架提供的数据类型和单位。这保证了数据存在的真正意义,我们不能自定义数据类型及单位。框架使用了子类化,例如HKObject
和HKObjectType
抽象类拥有很多有平行关系的子类,当使用Object
或者ObjectType
的时候,必须确保使用正确的子类。
在HeathKit
中能够存储的类都是HKObject
的子类,大部分HKObject
的子类都是不可变的。每个对象都有下面的属性:
- UUID:每个对象的标识符
- Source:数据的来源,来源可以是
HeathKit
的健康app,也可以是我们自己创建的app。当一个对象存储到HeathKit
中时会设置其来源。只有从HeathKit
中获取到的数据的来源才有效。 - Metadata:一个包含该对象额外信息的字典,元数据包含预定义的key和自定义的key,预定义的key用来帮助我们在应用间共享数据,而自定义的key用来扩展HeathKit,为对象添加针对应用的数据。
HeathKit
的对象主要分为特征和样本。特征对象代表用户的基本不变的数据,包括用户的生日、血型和性别等。我们创建的app不能修改这些信息,只能让用户在健康
中去修改或者添加个人特征信息。
样本对象代表某个特定时间的数据,所有的样本类型的对象都是HKSample
的子类。它们都有下面的特性:
- Type :样本类型,例如:睡眠分享、步行距离、心率样本等
- StartDate:样本开始时间
- EndDate:样本结束时间。如果是某一个时间的样本,则开始于结束时间相同,如果是某个时间段的样本,则结束时间在开始时间的后面。
样本类型又可以分为四个类型:
- 类别样本(
HKCategorySample
):在iOS 8 中,只有睡眠分析这一个类别样本。代表有限种类的样本. - 数量样本(
HKQuantitySample
):这种样本代表存储数据的样本,比如步数、距离、用户的体温等。它是HeathKit
中最常见的数据类型。 - 关系样本(
HKCorrelation
):代表复合数据,包括一个或者多个样本。在iOS 8 中,用correlation
代表食物和血压。在创建食物或血压时,需要用correlation
。 - 训练活动(
HKWorkout
):代表某种活动,比如走、跑步等。包含有开始时间、结束时间、运动类型、消耗能量、运动距离等属性。还可以为workout
关联许多详细的样本。不像correlation
,这些样本不包含在workout
中,但是可以通过workout
获取到。
再介绍一个HeathKit中经常用到的一些类。
HKSamle
每个HkSample
的子类都有对应的便利方法创建对应的对象。比如:
对于数量样本,需要创建HKQuantity
类的实例。而且数量的单位和类型标识符文档中描述的可用单位要相同。例如:HKQuantityTypeIdentifierHeight
文档中说明它使用长度单位,因此,你的数量必须使用厘米、米、英尺、英寸或者其他长度单位。
对应类别样本,需要创建HKCategorySample
的实例。它的值必须和类型标识符文档中描述的枚举值相关。例如, HKCategoryTypeIdentifierSleepAnalysi
s 文档中说明它使用的枚举值。因此你在创建样本时必须从这个枚举中传递一个值。
同样,你必须先创建correlation包含的所有样本。correlation的类型标识符描述了它可以包含的类型和对象的数量。不要把被包含的对象存进HealthKit。它们是以correlation的一部分存储的。
对于训练活动样本,首先,创建 HKWorkoutType
实例并不需要指定类型标识符。所有的workout都是用同样的类型标识符。第二,对于每个workout
你都需要提供一个 HKWorkoutActivityType
值。这个值定义了workout
中执行的活动的类型。最后,当workout
保存到HealthKit
后,你可以给workout
关联额外的样本。这些样本提供了workout
的详细信息。
HKQuery
HeathKit提供了许多查询读取数据的方法:
- 直接方法查询。对于特征样本,可以直接查询获取到,这些方法只能查询特征样本。更多信息: