HealthKit的那些事

自从iOS系统8以来,建有HealthKit的应用程序可以使用来自健康应用程序数据,以提供健康和健身服务,这是更强大的集成。用户的许可使得HealthKit应用程序可对用户的健康有关的数据的中央存储位置读取和写入数据。

例如,用户可以给出一个应用程序访问他们存储在health应用的体重和活动数据,使得应用程序可以推荐的卡路里数到每天消耗达到一定的目标。应用程序也可以使用HealthKit更新与实际消耗的卡路里数量的健康应用程序,使用户可以更容易地跟踪他们的进展。要了解如何HealthKit集成到你的应用程序,看到HealthKit框架参考 HealthKit Framework Reference

下面的指南可以帮助您创建一个人们信任和喜欢用的健康和健身的应用程序。

只有当你有一个令人信服的理由这样做的时候你才可以请求访问健康数据。 HealthKit是专为注重健康和健身服务的应用程序使用。如果一个应用程序请求访问无关的健康信息,用户不太愿意相信他们的私人数据的应用程序。因此,它是你的工作,以确保用户了解原因您的应用程序需要访问特定的片断他们的私人健康数据和共享数据的优势。

用户有机会了解它将被用于之前避免询问健康数据。在这种情况下人们更倾向于给访问他们的健康数据,比如他们看到自己的当前任务和您的要求进行数据之间的息息相关。例如,当用户在填写个人资料在减肥的应用程序,这是有道理的,要求访问他们存储在应用程序健康的体重数据。但如果减肥应用程序要求的应用程序启动后立即访问体重数据,用户可能会不太愿意分享他们的私人信息。

使用系统提供的UI请求权限来访问用户的数据。用户期望看到系统提供的权限表,如下图所示,只要他们需要授予的权限来访问他们的数据。为了提供良好的用户体验,避免在您的应用程序的其它画面的权限表复制信息。相反,您可以添加自定义消息的权限表来解释为什么你的应用程序需要访问特定的数据块(有关详细信息,请参阅HKHealthStore类参考)。保持这些消息简短,但要确保他们清楚地传达你如何使用应用程序的健康数据和共享它的好处。

image: ../Art/healthkit_system_ui_2x.png

NOTE

If users decide to stop sharing data with your app, they make this change in Settings. There is no need to enable this action within the UI of your app.



不要在你的应用的UI中使用系统Health app的应用程序图标,图像,或截屏。与所有苹果的设计一样,这些图像受版权保护,不应被显示在您的应用程序。

不要在你的用户界面使用术语“HealthKit”。 HealthKit是一个开发的术语,名称使用存储在应用健康存取数据的技术框架。如果您需要参考在你的应用程序的工作原理与数据存储的用户在应用程序健康的方式,使用“健康的应用程序。”例如,你可能会说你的应用“保存信息的应用程序健康”或“从健康应用程序使用的数据。”


The HealthKit Framework


所述HealthKit框架提供了应用程序可共享的健康和健身数据的结构。 HealthKit被设计为从广泛的来源管理数据,从全部基于用户的喜好的不同来源自动合并的数据。的应用程序还可以访问原始数据的每个源,让应用程序执行它自己的合并。


HealthKit还直接与健康和健身设备。在iOS系统8.0,该系统可以自动保存从兼容的蓝牙LE心脏率监测数据直接进入HealthKit存储。该系统还可以自动从M7协处理器的运动,如果有引入的步数数据。其他设备和数据源必须有一个同伴应用程序,可以访问该数据,并为他们将其保存到HealthKit。

HealthKit还提供了一个应用程序来帮助管理用户的健康数据。这个健康应用程序充当用户接口HealthKit数据。用户可以查看,添加,删除,并且使用此应用程序管理他们所有的健康和健身数据。他们还可以编辑为每个数据类型的共享权限。
HealthKit和健康应用程序在iPad上是不可用的。HealthKit框架不能在一个应用程序扩展中使用。

HealthKit and 隐私

由于健康数据可以是敏感的,HealthKit授予用户提供细粒度控制的应用程序可以共享信息,控制他们的数据。用户必须明确授予每个应用程序的权限读取和写入数据到HealthKit储存。用户可以授予或拒绝单独许可每种类型的数据。例如,用户可以让您的应用程序读取步数数据,但防止它读取血糖水平。为了防止可能发生信息泄露,一个应用程序不知道它是否已被拒绝的权限读取的数据。但从该应用的角度来看,如果应用程序已被拒绝的权限读取数据,该类型的数据不存在。

该HealthKit数据只保持在本地用户设备上。出于安全考虑,如果设备不上锁HealthKit商店会为其加密。该HealthKit商店只能由授权的应用程序进行访问。您不能从扩展(如今日视图),或者从WatchKit应用程序来访问HealthKit。



NOTE

Because the HealthKit store is encrypted, your app cannot read data from the store when the phone is locked. This means your app may not be able to access the store when it is launched in the background. However, apps can still write data to the store, even when the phone is locked. The store temporarily caches the data and saves it to the encrypted store as soon as the phone is unlocked.


此外,您的应用程序不能访问HealthKit的API,除非应用程序主要是为了提供健康和健身服务。你的应用程序的作用,成为健康和健身服务必须明确两个营销文本和用户界面。具体来说,以下准则适用于所有的应用程序HealthKit。


1. 你的应用程序不可以通过使用HealthKit框架使用信息获得用于广告或类似的服务。请注意,您仍然可以成为广告中使用的HealthKit框架的应用程序,但你不能使用的数据来自HealthKit存储来投放广告。

2.你一定没有透露通过HealthKit获得第三方未经用户明确许可的任何信息。即使许可,您只能分享信息给第三方,如果他们还提供了健康或健身服务给用户。

3.你不能出售通过HealthKit获得的广告平台,数据中间商或经销商的信息资料。

4.如果用户同意,可以与第三方进行医疗研究分享他或她的HealthKit数据。

5.你必须清楚地透露给你如何和你的应用程序将使用他们的数据HealthKit用户。


HealthKit’s Design Philosophy

HealthKit的设计理念

该HealthKit框架旨在以一种有意义的方式共享应用程序之间的数据。为此目的,框架限制数据和单元的类型的预定义列表。这些限制确保其他应用程序了解双方的数据意味着什么,以及它如何被使用。其结果是,开发人员不能创建自定义数据类型或单位。相反,HealthKit试图提供数据类型和单元的相当完整的列表。


该框架还采用积极的子类,生产类似的类层次结构。通常情况下,这些类有他们之间微妙但重要的差异。也有一些密切相关的类别,必须正确配对,才可以成功地一起工作。例如,HKObject和HKObjectType抽象类有具体子类的主要是平行的层次结构。当对象和对象类型的工作,你一定要确保使用匹配的子类。

在HealthKit在HealthKit存储中的所有对象都是HKObject类的子类。大多数HealthKit对象子类是不可变的。每个对象具有以下属性:


UUID。的唯一标识特定条目。
资源。的数据的源。源可以是一种装置,其直接将数据保存到HealthKit,或者一个应用程序。 HealthKit当对象被保存到HealthKit自动设置每个对象的源。此属性仅可从存储中检索对象。
元数据。字典包含有关条目的附加信息。元数据可以包含预定义和自定义键。预定义的按键有助于促进数据的应用程序之间共享。用户键有助于延长给定HealthKit对象类型,添加的应用程序特定数据的入口。中的所有对象都是HKObject类的子类。大多数HealthKit对象子类是不可变的。每个对象具有以下属性:


UUID。的唯一标识特定条目。
资源。数据的源。源可以是一种装置,其直接将数据保存到HealthKit,或者一个应用程序。 HealthKit当对象被保存到商店HealthKit自动设置每个对象的源。此属性仅可从存储中检索对象。
元数据。字典包含有关条目的附加信息。元数据可以包含预定义和自定义键。预定义的按键有助于促进数据的应用程序之间共享。用户键有助于延长给定HealthKit对象类型,添加的应用程序特定数据的入口。


样品可以进一步划分成四个采样类型。


1.类别样本。这些样品代表可以分类成一组有限的类别的数据。在IOS8.0,只有一种类型的类别样本,睡眠分析。欲了解更多信息,请参阅HKCategorySample类参考HKCategorySample Class Reference
2.数量的样本。这些样品代表可以被存储为数字值的数据。量样品中HealthKit中最常见的数据类型。这些包括用户的身高和体重,以及其它数据,例如采取,用户的温度的步数,以及它们的脉搏率。欲了解更多信息,请参阅HKQuantitySample类参考HKQuantitySample Class Reference.

3.相关性。这些样品代表的复合数据的数据,其中包含一个或多个样品。在IOS8.0,HealthKit使用相关性来表示食物和血压。创建食品或血压数据时,你应该总是使用的相关性。欲了解更多信息,请参阅HKCorrelation类参考HKCorrelation Class Reference
4.锻炼。试训代表某种体育活动,如跑步,游泳,甚至玩。锻炼常有类型,持续时间,距离,和能量烧性能。你还可以在锻炼与多个细粒样品的关联。不像相关,这些样品不包含在内锻炼-然而,它们可以被使用在锻炼查询。欲了解更多信息,请参阅HKWorkout类参考HKWorkout Class Reference


Setting Up HealthKit

设置HealthKit

在您开始使用HealthKit,您必须执行以下步骤:


启用Xcode中HealthKit能力。

  1. Enable the HealthKit capabilities in Xcode.

    NOTE

    When you enable the HealthKit capabilities, Xcode adds HealthKit to the list of required device capabilities. This prevents users from purchasing or installing the app on devices that do not support HealthKit.

    If HealthKit is not required for the correct operation of your app, you can open the app’s info.plist file and delete the healthkit entry from the Required device capabilities array.

    For more information on required device capabilities, see the  UIRequiredDeviceCapabilities key in Information Property List Key Reference.

    当您启用HealthKit能力,Xcode增加HealthKit到所需的设备功能的列表。这样可以防止用户在购买或不支持的设备HealthKit安装该应用程序。

    如果不需要为您的应用程序的正确操作HealthKit,您可以打开应用程序的Info.plist文件,并删除所需的设备功能阵列healthkit项。

    有关所需的设备功能的详细信息,请参阅信息属性列表键参考的UIRequiredDeviceCapabilities关键字。

2.请检查HealthKit是否可通过调用isHealthDataAvailable方法。 HealthKit不可用在iPad上。此外,HealthKit可以在其他设备上,例如,被供应给学校或公司环境的iPhone被禁用。
3.实例为您的应用程序的HKHealthStore对象。你只需要一个每应用程序存储HealthKit。此存储作为您的HealthKit数据库主界面。
4. requestAuthorizationToShareTypes:readTypes:completion:方法请求授权使用requestAuthorizationToShareTypes访问HealthKit数据。 HealthKit需要细粒度的授权。你必须申请许可来分享和阅读每种类型的数据。
您也可以为使用NSHealthShareUsageDescription和NSHealthUpdateUsageDescription键在你的应用程序的Info.plist文件权限表自定义消息。



  1. NOTE

    The first time you request permission for a data type, the system presents a permission sheet and stores the user’s response. On each subsequent request, the system uses the stored permissions. Users can modify their permissions in either the Health or Settings apps.


请求授权后,您的应用程序已准备好访问HealthKit存储。如果您的应用程序有权共享一个数据类型,它可以创建并保存该类型的样本。您应该验证您的应用程序有权限调用authorizationStatusForType共享数据:试图保存任何样品之前。


如果你的应用程序有权限读取的数据类型,您可以查询从HealthKit存储数据;然而,即使知道用户已经拒绝你的要求来读取数据可以揭示私人健康信息。因此,你的应用程序无法确定是否有权限读取特定类型的数据。如果用户不授予权限,对于受限制的数据类型的查询只返回您的应用程序已经共享的样本。否则,HealthKit存储显示为空。


有关设置HeathKit的更多信息,请参阅HKHealthStore类参考。


对于一个实际的例子,演示如何安装和使用HealthKit,认为合适的:存储和检索数据HealthKit。


Adding Samples to the HealthKit Store


添加示例到HealthKit存储
你的应用程序可以创建新的样本,并将它们添加到HealthKit商店。的一般方法是类似的所有样品类型,尽管每一种类型都有它自己的变化对这一主题。


期待在HealthKit常量引用正确的类型标识符。
创建匹配HKObjectType子类,使用类型标识符。为了方便的方法列表,请参阅HKObjectType类参考。
创建匹配HKSample子类,使用对象类型。
对象保存到使用saveObject的HealthKit店:withCompletion:方法。
每个子类HKSample都有自己方便的方法来实例化它的样本对象。如下所述,这些方法修改该过程。



image: ../Art/quantity_sample_2x.png


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

image: ../Art/category_sample_2x.png

对于类样品,该值必须对应于类型标识符的文档中描述的枚举。例如,HKCategoryTypeIdentifierSleepAnalysis文档指出它使用的HKCategoryValueSleepAnalysis枚举。因此,你必须创建这个样本时传递值从该枚举。欲了解更多信息,请参阅 HKCategorySample Class Reference.

image: ../Art/correlation_sample_2x.png

对于关联,必须先创建所有相关包含的样本对象。的相关性的类型标识符描述的类型和对象可以包含数。请勿保存包含的对象进HealthKit存储。它们被存储作为相关的一部分。欲了解更多信息,请参阅 HKCorrelation Class Reference.

image: ../Art/workout_sample_2x.png

锻炼行为稍有不同于其它样品。首先,就不需要一个特定类型的标识符来创建HKWorkoutType实例。所有的训练使用相同类型的标识符。其次,你需要为每个锻炼的HKWorkoutActivityType值。此值定义活动的锻炼过程中执行的类型。最后,经过锻炼保存到存储HealthKit,您可以与锻炼相关联的其他样本。这些样品提供有关训练细粒度的细节。欲了解更多信息,请参阅 HKWorkout Class Reference.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值