HealthKit
ios/framework
数据来源
HealthKit 中的数据来源主要有
-
Health and fitness devices
-
M7 motion coprocessor
健康数据被保存在叫 Health Store 的数据库中,而且被加密了,可以使用 HKHealthStore
类来访问。这个数据库存在于 iPhone 和 Apple Watch 中,他俩会自动同步,但是 Apple Watch 中的数据有可能会被系统自动清除以节省空间
隐私问题
用户可以控制 APP 可以访问哪些数据,但是 APP 自己不知道自己能访问什么数据。APP 只能向用户提出请求,用户可以允许或拒绝 APP 的请求,APP 自己却不知道用户到底是允许还是拒绝了请求。比如用户拒绝了APP 获取血压数据的请求,就算用户的健康数据中有血压数据,对于 APP 来说,血压数据是不存在的
关于使用 HealthKit 的注意事项
-
不要使用健康数据来打广告
-
除非获得了用户的允许,不要将健康数据给第三方机构
-
不能出售用户的健康数据
-
用户同意的话,你可以把健康数据提供给第三方机构以用于医学研究
-
你必须告诉用户你用健康数据的目的
健康数据分类
Health Store 中存储的健康数据分为下面几类
-
Characteristic data:这通常是不会改变的数据,包括用户的出生日期、血型、性别等,你可以直接通过
HKHealthStore
的dateOfBirth()
等方法直接访问 -
Sample data:大部分的数据都是这个类型的
-
Source data:关于健康数据的来源的信息。
HKSourceRevision
和HKDevice
可以获得健康数据的来源于哪个 app 或者设备 -
Deleted objects:不懂
HKObject
是所有 Sample 类数据的 superclass。每个这样的类都有下面的属性
-
UUID
-
Metadata
-
Source Revision:Sample 数据的来源
-
Device:产生 Sample 数据的设备
所有的 Sample 数据都是 HKSample
的子类。他有下面的属性
-
Type:表示数据类型,比如这是步数数据、睡眠数据
-
Start date:Sample 数据的起始时间
-
End date:Sample 数据的结束时间
Sample 还可以分为下面 4 种
-
Category samples:
HKCategorySample
-
Quantity samples:可以表示成数字的健康数据,大多数的数据都是这个类型,
HKQuantitySample
-
Correlations:多个 Quantity samples 的组合数据。HealthKit 中的食物和血压数据是这个类型的,
HKCorrelation
-
Workouts:健身数据,
HKWorkout
使用 HealthKit
-
在 Xcode 中启用 HealthKit
-
调用
HKHealthStore.isHealthDataAvailable()
来确定设备是否可以用健康数据 -
如果可用,用
let healthStore = HKHealthStore()
获得HealthStore
的实例。这个实例是 long lived 的,每个 app 只需要一个实例 -
获取使用健康数据的权限
-
在 Info.plist 中给出使用健康数据的理由
-
如果你没有请求权限,那么请求数据会导致错误
errorAuthorizationNotDetermined
;如果请求被拒绝了,会导致错误errorAuthorizationDenied
-
向 HealthStore 中写入和查询数据
获取健康数据
有 3 种获取健康数据的方法
-
Direct method calls:这主要用于获得 characteristic data,see
HKHealthStore
-
Queries:返回现在 HealthStore 中的数据的快照。它在另外一个 queue 中执行查询,提供一个 completion handler
-
Sample query:最常用的 query,所有的 sample data 都可以通过这个来获得。可以对查询的结果排序,对查询的范围进行限制。see
HKSampleQuery
-
Anchored object query:不太清楚,see
HKAnchoredObjectQuery
-
Statistics query:用于对查询的结果进行统计,例如统计健康数据的总数、平均数等。see
HKStatisticsQuery
-
Statistics collection query:对定长时间内的健康数据进行统计,比如每天消耗的卡路里数、每 5 分钟内走过的步数等。see
HKStatisticsCollectionQuery
-
Correlation query:进行与 correlation 相关的查询,see
HKCorrelation
-
Source query:对健康数据的来源(app 或者设备)进行查询,see
HKSourceQuery
-
Activity summary query:获得对用户的活动的 summary,可以是对一天或是对多天的 summary,see
HKActivitySummaryQuery
-
Document query:获取 health documents,see
HKDocumentQuery
-
Long running queries:这是运行在 anonymous background queue 的查询,当 HealthStore 的健康数据有更新、并且你也注册了 background delivery,它就能唤醒你的 APP
-
Observer query:当 HealthStore 的健康数据有更新、并且你也注册了 background delivery,它就能唤醒你的 APP,see
HKObserverQuery
-
Anchored object query:与上面的 Anchored object query 类似,可以运行在 anonymous background queue 中,但是不能注册 background delivery,see
HKAnchoredObjectQuery
-
Statistics collection query:与上面的 Statistics collection query 类似,可以运行在 anonymous background queue 中,但是不能注册 background delivery,see
HKStatisticsCollectionQuery
-
Activity summary query:与上面的 Activity summary query 类似,可以运行在 anonymous background queue 中,但是不能注册 background delivery,see
HKActivitySummaryQuery
单位与数量
类 HKUnit
表示一种单位,包括公制单位和英氏单位。single unit 表示简单的单位,如米、秒等;complex unit 表示由 single unit 组合而成的单位,如米每秒(m/s)等。更多的信息请看 HKUnit
类 HKQuantity
表示一次查询的结果,它所给出的值会与它所使用的单位有关,因此你可以非常方便的在不同单位之间转换,see HKQuantity
线程
HealthStore 是线程安全的
数字签名
不太清楚,主要是为了防止取出来的健康数据被修改
网友评论