编程技术记录

世界你好!

详细介绍参考 https://developer.apple.com/documentation/healthkit

Demo下载

简介

​ 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 框架的任何应用程序提供隐私政策。可以在以下站点找到有关创建隐私政策的指南:

这些模型由美国国家卫生信息技术协调办公室 (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。相关表格和图表显示使用TableViewCollectionViewOCKCartesianChartView



参考

https://developer.apple.com/documentation/healthkit

© Beli. All Rights Reserved.