HealthKit 笔记

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 的注意事项

  1. 不要使用健康数据来打广告

  2. 除非获得了用户的允许,不要将健康数据给第三方机构

  3. 不能出售用户的健康数据

  4. 用户同意的话,你可以把健康数据提供给第三方机构以用于医学研究

  5. 你必须告诉用户你用健康数据的目的

健康数据分类

Health Store 中存储的健康数据分为下面几类

  • Characteristic data:这通常是不会改变的数据,包括用户的出生日期、血型、性别等,你可以直接通过 HKHealthStoredateOfBirth() 等方法直接访问

  • Sample data:大部分的数据都是这个类型的

  • Source data:关于健康数据的来源的信息。 HKSourceRevisionHKDevice 可以获得健康数据的来源于哪个 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

  1. 在 Xcode 中启用 HealthKit

  2. 调用 HKHealthStore.isHealthDataAvailable() 来确定设备是否可以用健康数据

  3. 如果可用,用 let healthStore = HKHealthStore() 获得 HealthStore 的实例。这个实例是 long lived 的,每个 app 只需要一个实例

  4. 获取使用健康数据的权限

  5. 在 Info.plist 中给出使用健康数据的理由

  6. 如果你没有请求权限,那么请求数据会导致错误 errorAuthorizationNotDetermined ;如果请求被拒绝了,会导致错误 errorAuthorizationDenied

  7. 向 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 是线程安全的

数字签名

不太清楚,主要是为了防止取出来的健康数据被修改

你可能感兴趣的:(HealthKit 笔记)