详细介绍参考 https://developer.apple.com/documentation/healthkit
简介
HealthKit 为 iPhone 和 Apple Watch 上的健康和健身数据提供了一个中央存储库。在用户许可的情况下,应用程序与 HealthKit 通信以访问和共享此数据:
-
收集和存储健康和健身数据
-
分析和可视化数据
-
社交互动
下图来自于苹果开发者网站
HealthKit 管理和合并来自多个来源的数据,用户可以在健康应用中查看和管理他们的所有数据,包括添加数据、删除数据和更改应用的权限;用户还可以编辑每种数据类型的分享权限。
隐私
由于健康数据可能包含敏感的个人信息,因此应用程序必须获得用户的许可才能从 HealthKit 存储区读取数据或向其写入数据,并且应用程序还必须始终采取措施保护这些数据。
HealthKit 为用户提供了更细粒度的数据权限控制。用户必须明确授予每个应用对 HealthKit 存储区读取和写入数据的权限。用户可以针对每种类型的数据分别授予或拒绝权限。例如,用户可以让允许应用读取步数数据,但不允许读取血糖水平。
数据加密存储
用户的设备在本地存储所有 HealthKit 数据。为了安全起见,当用户锁定设备时,设备会加密 HealthKit 存储。因此,应用在后台运行时可能无法HealthKit存储中读取数据。但是手机被锁定时,应用程序仍然可以写入HealthKit存储。HealthKit 会临时缓存数据,并在用户解锁手机后立即将其保存到加密存储中。
指定应用如何使用健康数据
除非应用旨在提供健康或健身服务,否则应用不得访问 HealthKit API(注意:影响应用上架
)。此外,作为健康和健身服务的角色必须在营销文本和用户界面中明确。具体来说,以下指南适用于所有 HealthKit 应用程序:
- 您的应用不得将通过使用 HealthKit 框架获得的信息用于广告或类似服务。
仍然可以在使用 HealthKit 框架的应用程序中投放广告,但不能使用 HealthKit中的数据来投放广告
- 未经用户明确许可,不得将通过 HealthKit 获得的任何信息透露给第三方。即使获得许可,也只能将信息分享给向用户提供健康或健身服务的第三方。
- 不能将通过 HealthKit 获得的信息出售给广告平台、数据经纪人或信息经销商。
- 如果用户同意,可以与第三方共享他们的 HealthKit 数据以进行医学研究。
- 必须向用户明确披露您和您的应用将如何使用他们的 HealthKit 数据。
提供隐私政策
必须为使用 HealthKit 框架的任何应用程序提供隐私政策。可以在以下站点找到有关创建隐私政策的指南:
- 个人健康记录模型(适用于非 HIPAA 应用程序):http : //www.healthit.gov/policy-researchers-implementers/personal-health-record-phr-model-privacy-notice
- HIPAA 模型(适用于 HIPAA 涵盖的应用程序):http : //www.hhs.gov/ocr/privacy/hipaa/modelnotices.html
这些模型由美国国家卫生信息技术协调办公室 (ONC) 开发,旨在通过简单的语言来帮助用户易于理解。这些模型解释了应用程序如何收集和共享用户数据。这些模型仅供参考,Apple 明确表示不对您使用此类模型承担任何责任。
应用程序
Info.plist
对于使用 HealthKit 框架的应用程序,需要在Info.plist中设置以下键值
-
NSHealthShareUsageDescription ,一个简短描述,向用户解释为什么需要HealthKit读取权限,用于读取HealthKit数据。
-
NSHealthUpdateUsageDescription,一个简短描述,向用户解释为什么需要HealthKit写入权限,用于写入HealthKit数据。
如果不设置相应的键值,那么应用程序在调用相关API时会触发崩溃。
请求权限
- 获取权限状态
HealthData.healthStore.getRequestStatusForAuthorization
- 请求权限
HealthData.healthStore.requestAuthorization
let allTypes = Set([HKObjectType.workoutType(),
HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)!,
HKObjectType.quantityType(forIdentifier: .distanceCycling)!,
HKObjectType.quantityType(forIdentifier: .distanceWalkingRunning)!,
HKObjectType.quantityType(forIdentifier: .heartRate)!])
healthStore.requestAuthorization(toShare: allTypes, read: allTypes) { (success, error) in
if !success {
// Handle the error here.
}
}
当请求新权限时,系统会弹出一下界面
下图来自于苹果开发者网站
读取数据
访问数据的主要方式有以下三种:
- 直接方法调用。HealthKit 存储提供了直接访问特征数据的方法。
- 查询。查询从 HealthKit 存储中返回所请求数据的当前快照。
- 长时间运行的查询。这些查询会继续在后台运行,并在 HealthKit 存储发生更改时通知应用程序。
查询
查询返回 HealthKit 存储中数据的当前快照。所有查询都在匿名后台队列上运行。查询完成后,它会在后台队列上执行结果处理程序。HealthKit 提供了不同类型的查询,每个查询都旨在从 HealthKit 存储中返回不同类型的数据。
- 样本查询。这是一个通用查询。使用示例查询访问任何类型的示例数据。当您想要对结果进行排序或限制返回的样本总数时,样本查询特别有用。有关更多信息,请参阅
HKSampleQuery
- 锚定对象查询。使用此查询来搜索已添加到HealthKit存储或从存储中删除的对象。第一次运行锚定查询时,它会返回当前存储中的所有匹配样本。在后续运行中,它仅返回自上次运行以来已添加或删除的项目。有关更多信息,请参阅
HKAnchoredObjectQuery
- 统计查询。使用此查询对匹配样本集执行统计计算。可以使用统计查询来计算集合中的总和、最小值、最大值或平均值。有关更多信息,请参阅
HKStatisticsQuery
- 统计收集查询。使用此查询可在一系列固定长度的时间间隔内执行多个统计查询。创建图表时经常使用这些查询。它们提供了一种计算事物的简单方法,例如每天消耗的卡路里总数或每五分钟间隔内所采取的步数。有关更多信息,请参阅
HKStatisticsCollectionQuery
- 关联查询。使用此查询对关联数据执行复杂搜索。这些查询可以包含存储在关联样本类型的单独谓词。如果您只想匹配相关类型,请改用
样本查询
。有关更多信息,请参阅HKCorrelationQuery
- 来源查询。使用此查询来搜索已将匹配样本保存到 HealthKit 存储的来源(应用程序和设备)。来源查询列出了保存特定样品类型的所有源。有关更多信息,请参阅
HKSourceQuery
- 活动汇总查询。使用此查询来搜索用户的活动摘要信息。每个活动摘要对象都包含给定日期的用户活动摘要。您可以查询一天或几天的范围。有关更多信息,请参阅
HKActivitySummaryQuery
- 文档查询。使用此查询来搜索健康文件。有关更多信息,请参阅
HKDocumentQuery
长时间运行的查询
长时间运行的查询会继续运行匿名后台队列,并在 HealthKit 存储发生更改时通知应用程序。此外,观察者查询可以注册后台任务。这让 HealthKit 在发生更新时在后台唤醒对应的应用程序。
Healthkit 提供以下长时间运行的查询:
- 观察者查询。这个长时间运行的查询会监控 HealthKit 存储并通知匹配样本的任何更改。当您希望收到有关存储更改的通知时,请使用观察者查询。您可以注册观察者查询以进行后台任务。有关更多信息,请参阅
HKObserverQuery
- 锚定对象查询。除了返回修改数据的当前快照之外,锚定对象查询还可以充当长时间运行的查询。如果启用,它将继续在后台运行,在匹配样本添加到存储或从存储中删除时提供更新。与观察者查询不同,这些更新包括已添加或删除的项目列表;但是,锚定对象查询不能注册用于后台任务。有关更多信息,请参阅
HKAnchoredObjectQuery
- 统计收集查询。除了计算统计集合的当前快照之外,此查询还可以充当长时间运行的查询。如果将匹配的样本添加到存储或从存储中删除,此查询将重新计算统计信息收集并更新您的应用程序。无法注册统计收集查询以进行后台任务。有关更多信息,请参阅
HKStatisticsCollectionQuery
- 活动汇总查询。除了计算用户活动摘要的当前快照之外,此查询还可以充当长时间运行的查询。如果用户的活动摘要数据发生更改,此查询将重新计算活动摘要并更新您的应用。无法注册活动摘要查询以进行后台任务。有关更多信息,请参阅
HKActivitySummaryQuery
一个例子
示例主要读取以下数据
- 步数
- 步行+跑步距离
- 已爬楼层
对应枚举为
HKQuantityTypeIdentifier.stepCount
HKQuantityTypeIdentifier.distanceWalkingRunning
HKQuantityTypeIdentifier.flightsClimbed
查询方式为统计收集查询HKStatisticsCollectionQuery
。相关表格和图表显示使用TableView
、CollectionView
和OCKCartesianChartView