App Services kits

HealthKit框架详细解析(一) —— 基本概览(一)

2018-02-03  本文已影响52人  刀客传奇

版本记录

版本号 时间
V1.0 2018.02.03

前言

HealthKit与其他应用程序共享健康和健身数据,同时保持用户的隐私和对数据的控制。

Overview

我们先看一下框架的详细信息。

HealthKit存储来自iPhone和Apple Watch上的应用程序的数据。它也直接与一些健康和健身设备共同作用。在iOS 8.0中,系统可以自动保存兼容的蓝牙LE心率监视器的数据。如果有的话,系统也可以自动从M7运动协处理器导入活动数据。其他设备和数据源必须具有可以访问数据并将其保存到HealthKit中的配套应用程序。

HealthKit将数据保存在名为HealthKit存储的加密数据库中。您可以使用HKHealthStore类访问这个数据库。 iPhone和Apple Watch都有自己的HealthKit商店。 Apple Watch和iPhone之间的健康数据同步;但是,Apple Watch会定期清除旧数据以节省空间。使用earliestPermittedSampleDate方法来确定Apple Watch上最早的样本的年龄。

HealthKit旨在管理来自各种来源的数据,根据用户的偏好自动合并来自不同来源的数据。应用程序也可以访问每个来源的原始数据,自己合并数据。

HealthKit提供了一个应用程序来帮助管理用户的健康数据。 Health应用程序充当HealthKit数据的用户界面。用户可以查看,添加,删除,并以其他方式管理他们的健康和健身数据使用这个应用程序。他们还可以编辑每种数据类型的共享权限。

HealthKit和Health应用程序在iPad上不可用。

下面看一下该框架的详细结构。


Protecting User Privacy - 保护用户的隐私

由于健康数据可能非常敏感,因此HealthKit通过对应用程序可以共享的信息进行细粒度控制来授予用户对其数据的控制权。 用户必须明确授予每个应用程序读写数据到HealthKit商店的权限。 用户可以为每种类型的数据分别授予或拒绝权限。 例如,用户可以让您的应用程序读取步数数据,但不能读取血糖水平。 为了防止可能的信息泄露,应用程序不知道它是否被拒绝读取数据的权限。 从应用程序的角度来看,如果应用程序被拒绝读取数据的权限,则不存在该类型的数据。

注意:在iOS 10.0或之后链接的iOS应用必须在其Info.plist文件中包含它需要访问的数据类型的使用说明密钥,否则将会崩溃。 要特别访问和更新HealthKit数据,它必须分别包含NSHealthShareUsageDescriptionNSHealthUpdateUsageDescription键。

HealthKit数据只保存在用户的设备上。 为了安全起见,HealthKit store在设备被锁定时被加密。 HealthKit商店只能由授权的应用程序访问。 因此,当您的应用程序在后台启动时,您可能无法从商店读取数据;不过,应用程序仍然可以将数据写入商店,即使手机已锁定。 一旦手机解锁,HealthKit会临时缓存数据并将其保存到加密存储中。

另外,除非应用程序主要用于提供健康或健身服务,否则您的应用程序不得访问HealthKit API。 您的应用程序作为健康和健身服务的角色必须在您的营销文本和用户界面中都清楚。 具体而言,以下准则适用于所有HealthKit应用程序:

您还必须为使用HealthKit框架的任何应用程序提供隐私政策。 您可以在以下网站找到有关创建隐私政策的指导:

由国家卫生信息技术协调员(ONC)开发的这些模型旨在通过使用简单的语言和平易近人的设计来解释如何收集和共享用户数据,从而改善用户体验和理解。 这些模型并不是要取代基于网络的隐私政策,开发者应该咨询ONC指导哪些模型适合给定的应用程序。 这些模型仅供您参考,Apple明确表示不承担使用此类模型的全部责任。

注意:了解苹果公司使用HealthKit和用户健康相关数据的要求至关重要。 要了解这些要求,请参阅Apple Store Review Review Guidelines 中的HealthKit部分,该指南可从Apple的App Review Support支持页面获得。有关处理敏感用户数据的其他技术信息,请参阅 App Programming Guide for iOS中的What to Do When Your App Enters the Background


Working with the HealthKit Framework - 使用HealthKit框架

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

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

HealthKit也使用密切相关的类对。这些类必须正确配对。例如,HKObjectHKObjectType抽象类具有很大一部分具体子类的并行层次结构。当使用对象和对象类型时,必须使用匹配的子类。

HealthKit Data - HealthKit数据

HealthKit在HealthKit Store中保存各种数据类型:

Properties of Objects and Samples - 对象和样本属性

HKObject类是所有HealthKit示例类型的超类。 所有的HKObject子类都是不可变的。 每个对象都有以下属性:

HKSample类是HKObject的一个子类。 示例对象表示特定时间点的数据。 所有示例对象都是HKSample类的子类。 他们都有以下属性:

样本进一步分为四个具体的子类:


Setting Up HealthKit - 设置HealthKit

设置HealthKit:

  1. 在Xcode中,为您的应用程序启用HealthKit功能。

当您在iOS应用程序上启用HealthKit功能时,Xcode会将HealthKit添加到所需设备功能的列表中。 这可以防止用户在不支持HealthKit的设备上购买或安装应用程序。
如果HealthKit对于应用程序的正确操作不是必需的,则可以打开应用程序的Info.plist文件,并从Required device capabilities中删除Healthkit条目。
WatchKit扩展程序不使用healthkit条目。
有关所需设备功能的更多信息,请参阅 Information Property List Key Reference中的UIRequiredDeviceCapabilities键。

更多信息,请参阅Adding HealthKit (iOS, WatchKit Extension)

  1. 通过调用isHealthDataAvailable方法来确认用户设备上的HealthKit是否可用,如下所示。
// Listing 1

if ([HKHealthStore isHealthDataAvailable]) {
    // add code to use HealthKit here...
}

HealthKit在iPad上不可用。 如果HealthKit不可用,则其他HealthKit方法将失败并显示HKErrorHealthDataUnavailable错误。

  1. 如果HealthKit已启用且可用,请为您的应用程序实例化一个HKHealthStore对象,如下所示。
// Listing 2

self.healthStore = [[HKHealthStore alloc] init];

每个应用程序只需要一个HealthKit存储。 这些是存在时间较长的对象。 创建一次商店,并保留供以后使用的参考。

  1. 请求用户授权读取和共享HealthKit数据。

您必须先执行此操作,然后才能与商店执行任何任务。 为了保护用户的隐私,HealthKit需要细致的授权。 您必须申请权限才能读取和共享您的应用使用的每种数据类型。

无论何时您的应用程序请求新的权限,系统都会显示一个窗体,其中显示所有请求的数据类型。 用户可以打开和关闭个人阅读和共享权限。 要了解如何在请求权限时提供良好的用户体验,请iOS Human Interface Guidelines中的HealthKit

图1显示了Fit应用程序的权限表。 要下载示例代码,请参阅Fit: Store and Retrieve HealthKit Data

Figure 1 Requesting permission for the Fit app

注意:用户为您的应用程序设置了权限后,可以随时使用SettingsHealth应用程序来更改它们。 即使用户不允许读取或共享数据,您的应用程序也会出现在Health应用程序的Sources选项卡中。

  1. 提供自定义消息以显示在应用的Info.plist文件的权限表中。 读取和写入HealthKit数据都需要自定义消息。 设置NSHealthShareUsageDescription键以定制读取数据的消息。 设置NSHealthUpdateUsageDescription键以定制写入数据的消息。 有关更多信息,请参阅 Information Property List Key Reference中的iOS Keys

  2. 在尝试保存用户数据之前,请确保您的应用程序有权使用HealthKit方法共享数据。 尝试在请求权限之前保存数据失败,并显示 HKErrorAuthorizationNotDetermined错误。 尝试在权限被拒绝时保存数据失败,并显示HKErrorAuthorizationDenied错误。

  3. 在用户授予共享数据类型的权限之后,您可以:

有关如何设置和使用HealthKit的实际示例,请参阅 Fit: Store and Retrieve HealthKit Data


Adding Samples to the HealthKit Store - 将示例添加到HealthKit商店

您的应用程序可以创建新的样本并将其添加到HealthKit商店。 所有样本类型的一般程序是相似的,尽管每种类型在这个主题上都有自己的变化。

每个HKSample子类都有自己的实例化对象的简便方法。 这些方法修改上述过程。

对于数量样品,创建一个HKQuantity类的实例。 数量单位必须与类型标识符文档中描述的允许单位一致。 例如, HKQuantityTypeIdentifierHeight文档指出它使用长度单位。 因此,您的数量必须使用厘米,米,英尺,英寸或其他兼容的单位。 有关更多信息,请参阅HKQuantitySample

对于类别样本,样本值必须与类型标识符文档中描述的枚举相对应。 例如,HKCategoryTypeIdentifierSleepAnalysis文档声明它使用HKCategoryValueSleepAnalysis枚举。 因此,创建此示例时,您必须传递此枚举的值。 有关更多信息,请参阅HKCategorySample

对于关联,您必须首先创建关联将包含的所有样本对象。 关联的类型标识符描述了可以包含的对象的类型和数量。 不要将包含的对象保存到HealthKit store中。 它们被存储为相关性的一部分。 有关更多信息,请参阅HKCorrelation

Workouts行为与其他样本有所不同:

锻炼样本可以为Activity应用中的Move and Exercise贡献力量。要做出贡献,您必须将一种或多种能量消耗样本与锻炼联系起来。另外:

在设备上创建并保存最适合您的应用程序的锻炼。 这通常是运行用户锻炼逻辑的设备。

Balancing Performance and Details - 平衡性能和细节

将数据保存到HealthKit store时,通常需要选择使用单个样本来表示数据,还是将数据分成多个较小的样本。 从性能角度来看,单一的长样本更好。 但是,多个较小的样本可以让用户更详细地了解数据如何随着时间而变化。 理想情况下,您希望查找足够精细的样本大小,以向用户提供有用的历史数据。

记录锻炼时,可以使用高频数据(每个样本一分钟或更少)来提供强度图表,并分析锻炼过程中用户的表现。 对于不太密集的活动,如每日步数,一小时或更少的样本通常效果最好。 这可以让你生成有意义的日常和小时图。

应用程序应避免保存24小时或更长的样本。


Accessing HealthKit Data - 访问HealthKit数据

从HealthKit商店访问数据有三种主要方式:

后记

本篇已结束,后面更精彩~~~

上一篇 下一篇

猜你喜欢

热点阅读