HealthKit的简单实用

HealthKit的简单实用,第1张

HealthKit为iPhone和Apple Watch上的健康和健身数据提供了一个中央存储库。在用户的许可下,应用程序与HealthKit商店通信,以访问和共享这些数据

HealthKit框架旨在以一种有意义的方式在应用程序之间共享数据。框架将数据和单陪昌者元的类型限制在一个预定义的列表中,确保所有应用程序都理解数据的含义以及如何使用数据。开发人员不能创建自定义数据类型或单元。相反,HealthKit提供了多种数据类型和单元。

此外,框架使用大量子类,产生类似类的深层层次结构。通常,这些类之间有细微但重要的区别。例如,HKQuantitySample对象用于存储带有数值的数据,而HKCategorySample对象用于存储从枚举中选择的值。

HealthKit保存了多种数据类型:

HKObject 类是所有 HealthKit 样本类型的父类。 所有 HKObject 子类都是不可变的。 每个对象都具有以下属性:

HKSample 类是 HKObject 的子类。 样本对象表示特定时间点的数据,所有样本对象都是 HKSample 类的子类。

HKSample 进一步划分为四个具体子类:

HealthKit存储是线程安全的,大多数HealthKit对象是不可变的。 通常,可以在多线程环境中安全地使用HealthKit。

在使用HealthKit之前,必须执行以下步骤:

在使用HealthKit之前,必须为应用添加HealthKit功能。 在Xcode中,选择项目并打开HealthKit功能

调用 isHealthDataAvailable 方法来确保HealthKit在用户设备上是否可用。

在调用HealthKit其他方法之前先调用该方法。如果设备上没有HealthKit(比如在iPad上),调用其他的方法会报 errorHealthDataUnavailable 错误;如果HealthKit受限制(比如,在企业环境中),调用其他方法会报 errorHealthDataRestricted 错误。

如果HealthKit可用且已经开启,实例化一个 HKHealthStore 对象:

每个App只需要一个HealthKit Store,它是long-lived 对象。

为了保护用户的隐私,HealthKit需要精细的授权。在尝试保存和访问数据之前,必须申请芦薯读取和分享数据的权限。

此外,还需要在info.plist文件中设置两个key:

如果用户同意共享某种类型的数据,则可以创建该类型的样本并将其保存到HealthKit Store中。但是,在保存任何数据之前,最好调用 authorizationStatusForType: 方法来检查是否有该权限。如果还没有申请过该权限,保存数据将会抛出 HKErrorAuthorizationNotDetermined 错误。如果用户拒绝了该权限申请,尝试保存数据将会抛出 HKErrorAuthorizationDenied 错误。

为了保护用户隐私,我们的App将不会知道用户是否授权或者拒绝读取HealthKit的权限。如果用户拒绝了,那在从HealthKit中查询数据时,将只会返回我们自己的App成功保存到HealthKit Store的样本数据。

如果App需要访问特定的临床记录数据才能正常运行,在info.plist文件中添加 NSHealthRequiredReadAuthorizationTypeIdentifiers key,该key定义了app必须拥有读取权限的数据类型。

我们的App可以创建新的样本,并将其保存到HealthKit Store。尽管所有的样本类型都遵守相似的过程,但每种类型都有自己的变体:

每个 HKSample 子类都有自己的便迅神捷方法来实例化对象,

对于数量样本,创建 HKQuantity 类的实例。数量的单位必须与类型标识符文档中描述的单位想对应。比如, HKQuantityTypeIdentifierHeight 声明长度单位,因此,数量必须使用厘米,米,英尺或英寸或者其他兼容的单位。可以参阅 HKQuantitySample

对于类别样本(category samples),样本的值必须与类型标识符文档中声明的枚举相对应。比如, HKCategoryTypeIdentifierSleepAnalysis 表明它使用 HKCategoryValueSleepAnalysis 枚举。因此,在创建此样本时,必须从该枚举中选值。更多信息可以参阅 HKCategorySample

将数据保存到HealthKit Store时,通常需要在使用单个样本表示数据还是多个较小样本之间拆分数据做选择。从性能角度来说,使用单个样本更好,但是,多个样本可以让用户更详细的了解他们的数据如何随时间变化。理想情况是能够找到合适的样本大小,以便为用户提供有用的历史数据。

在记录锻炼数据时,可以使用高频数据(每分钟一个样本)来提供强度图标,并以其他方式分析用户在锻炼中的表现。对于不太密集的活动,比如每日步数,一小时或者更短时间的样本通常更好一些。

App应该避免保存24小时或更长时间的样本。

健康App允许用户访问其HealthKit Store中的所有数据。用户可以查看、添加、删除和管理他们的数据。

具体来说,用户可以

因此,健康App对开发HealthKit有一些重要影响。用户可以在我们的app之外修改数据,甚至修改我们app的读写权限,因此,我们的应用应该始终查询HealthKit Store中的当前数据

其次,我们也可以在健康App中查看我们的app保存到Health Store的数据。这在早期测试中很有用。

有三种主要的方法来从HealthKit Store读取数据

Queries返回HealthKit Store中数据的当前快照(snapshot)。所有的queries都是在匿名后台队列运行的。当queries完成后,他将在后台队列上处理结果。HealthKit提供了不同类型的queries来返回不同类型的数据。

Long-running queries 会在匿名后台队列持续运行,并在对HealthKit Store进行更改时更新我们的app。另外,observer queries可以注册为后台交付。这样,当发生更新时,HealthKit就会在后台唤醒我们的app。

HealthKit 提供以下的long-running queries:

HealthKit使用 HKObjectType 的子类来标识存储在HealthKit中数据的不同类型:

创建类型对象,需要调用相应的 HKObjectType 类方法,并传入所需的类型标识。

可以使用生成的对象类型来请求访问数据的权限,将新数据保存到HealthKit存储中或从HealthKit存储中读取数据。

大部分健康和健身数据是使用 HKSample 的子类来保存到HealthKit Store中。所有的 Sample 子类都在指定的时间记录信息。如果 sample 的 startDate 和 endDate 属性相同,则样本表示时间点。如果 endDate 在 startDate 之后,则样本表示一个时间间隔。

HealthKit使用不同的 HKSample 子类来存储不同类型的数据:

访问并共享健康和健身数据,同时保持用户返笑孙的隐私和控制权。

HealthKit为iPhone和Apple Watch上的健康和健身数据提供了一个中央存储库。在用户许可下,应用程序与HealthKit存储进行通信以访问和共享此数据。

该图显示了iPhone上的Health(健康)和Apple Watch上的Activity(活动)。

创造完整,个性化的健康健身体验包括以下任务:

HealthKit应用程序采用协作方式来构建这种体验。您的应用无需提供所有这些功能。相反,您可以只专注于您最感兴趣的任务子集。

例如,用户可以选择自己喜欢的体重跟踪,计步和健康挑漏链战应用程序,每个应用程序都根据他们的个人需求进行了校准。由于HealthKit应用程序可以自由交换数据(具有用户权限),因此与单独的单个应用程序相比,组合套件提供了更多的自定义体验。例如,当一群朋友参加每日计步挑战时,每个人都可以使用自己喜欢的硬件设备和应用来跟踪他们的步伐,而组中的每个人都使用相同的社交应用来应对挑战。

HealthKit还设计用于管理和合并来自多个源的数据。例升宴如,用户可以在Health App中查看和管理其所有数据,包括添加数据,删除数据和更改应用程序的权限。因此,即使它们发生在应用程序外部,您的应用程序也需要处理这些更改。

QQ:3365059189

SwiftUI技术交流QQ群:518696470


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12416844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存