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

数字签名

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容