HealthKit框架是去年在WWDC 2014上引入的,它是应用程序可以存储,共享和读取与健康相关的数据的单个位置。 新的Health应用程序是用户查看该数据的视图,是iOS 8的旗舰功能之一。

HealthKit的主要优点之一是健身和健康相关的应用程序可以轻松地彼此共享数据。 在过去的一年中,许多开发人员在他们的应用程序中采用了HealthKit,并且精通技术的用户已经期望任何健身应用程序都可以与HealthKit集成。

使用这个新的令人兴奋的框架有很多好处,陷阱和最佳实践。 最近,当我向其中一个应用程序Routie添加对HealthKit的支持时,我具有使用HealthKit框架的第一手经验。 如果您正在考虑在自己的应用程序中使用HealthKit,那么本教程非常适合您。

为什么我应该关心HealthKit?

我已经提到了HealthKit的一些好处,但是如果您还没有出售它,那么让我说,集成HealthKit真的并不难。 我什至更进一步地说,它比Apple引入的其他大多数新框架都容易。 显然,这很大程度上取决于您要实现的目标。 但是总的来说,我想说,整合HealthKit所花费的精力与为用户带来的好处之间的比例是非常有利的。

除了直接集成到现有应用程序之外,它还带来了构建全新类别的应用程序的可能性。 例如,您可以从HealthKit中提取各种数据(例如用户的锻炼或血压),并以一种有趣的方式显示它们,而将收集数据的辛苦工作留给其他应用程序。

你会学什么?

本教程的目的是通过构建示例应用程序来教您基础知识。 此外,我将为您提供许多有用的提示和技巧,说明如何或应该将HealthKit集成到您自己的应用程序中。 阅读本文之后,您应该对HealthKit有基本的了解,可以在应用程序中使用它了。

你应该知道什么

以下列表包括您应该了解的有关HealthKit的一些基本事实:

  • HealthKit框架自iOS 8起可用。请注意,它仅在iPhone上可用,在iPad上不可用。
  • 苹果公司非常重视隐私保护,这就是为什么您必须显式请求对需要访问的每种数据类型进行读取和/或写入HealthKit的访问。 用户可以选择允许某些类型的访问,而拒绝其他类型的访问。
  • HealthKit框架大量使用子类化。
  • 主要有两种数据类型, 特征样本 。 用户的出生日期或血型等特征通常不会改变。 样本代表特定时间点的数据。
  • 数量样本是最常见的数据类型。 它们包括用户的身高和体重,所采取的步骤,用户的温度,脉搏率等。
  • 锻炼属于样本类别,专门用于表示跑步,散步,骑行等。

有关HealthKit框架的更多信息,请访问Apple的HealthKit框架参考 。

开始之前

我知道您现在可能很想开始示例项目,但是在开始之前,您需要了解一些重要的事项。

  • 当用户的电话被锁定时,HealthKit存储将被加密。 这意味着当您的应用程序在后台运行时,您将无法读取它。 但是,即使手机被锁定,也可以写入HealthKit。
  • 您必须在您的App Store描述和应用程序中解释您的应用程序将如何使用从HealthKit获得的数据。 否则可能会导致您的应用被拒绝。
  • App Store审查指南中有一个新章节涵盖了HealthKit。 在决定是否添加对HealthKit的支持之前,您绝对应该通读它。
  • 应用程序与HealthKit集成后,您必须为其提供隐私权政策。 Apple甚至建议一些文档指定与健康相关的隐私策略的外观。 隐私政策必须告诉用户您的应用如何处理其数据,这一点很重要。

现在我们已经解决了这个问题,让我们开始学习本教程。

该项目

我们将构建一个与HealthKit集成的简单应用程序,并解释该框架的一些基本概念。 特别是,我们将:

  • 从头开始创建一个新项目并启用HealthKit
  • 征求用户的许可以访问其与健康相关的数据
  • 读取用户的生日
  • 将重量样本写入HealthKit
  • 向HealthKit编写锻炼

1.设置项目

启动Xcode并选择File > New > Project ...iOS> Application部分,选择Tabbed Application模板,然后单击Next

输入HealthBasics作为项目的产品名称 ,然后单击Next 。 选择您要保存项目的位置,然后单击创建

2.启用HealthKit

在左侧的项目浏览器中 ,单击项目,选择HealthBasics目标,然后打开顶部的“ 功能”选项卡。 向下滚动到HealthKit部分,然后启用HealthKit切换右侧的开关。 在后台,Xcode将为您启用HealthKit做必要的工作。

3.创建用户界面

对于此项目,我们将不使用尺寸等级。 由于默认情况下启用大小类,因此我们需要在Xcode中手动禁用它们。 在左侧的项目浏览器中 ,选择Main.storyboard 。 打开右侧的“ 文件检查器 ”,然后取消选中“ 使用大小类 ”复选框。

Xcode将显示一个警告对话框。 通过单击“ 禁用尺寸类别”将关闭 ,但要保留iPhone的尺寸类别数据,如下所示。

删除First View Controller中的两个标签。 接下来,将一个标签和一个开关从右侧的Object Library拖到First View Controller上。 将标签的文本更改为Health集成 ,并将开关的状态设置为off


在First View Controller中再添加两个标签和一个按钮。 将第一个标签的文本更改为User's age :,将第二个标签的文本更改为?? ,然后将它们水平对齐,如下面的屏幕截图所示。 最后,将按钮的标题更改为“ 读取”并将其放置在第二个标签的右侧。 现在,第一个场景应如下所示:


我们还没有完成。 向First View Controller添加一个标签,一个文本字段和一个按钮,使其水平对齐,如下所示。 将标签的文本更改为User's weight : ,并将按钮的标题更改为Write

选择您刚刚添加的文本字段,然后在“ 属性”检查器中将其“ 键盘类型 更改为“数字和标点符号” 。 而已。 现在,第一个场景应如下所示:


4.创建HealthKit Manager

我们将把与HealthKit相关的代码保存在一个单独的类GSHealthKitManager 。 现在创建该类。

项目浏览器中 ,右键单击HealthBasics组,然后选择New File ...。 确保从模板列表中选择了Cocoa Touch Class ,然后单击Next 。 将类命名为GSHealthKitManager ,然后单击下一步


打开GSHealthKitManager类的头文件,并将文件内容替换为以下代码。 稍后,我们将从FirstViewController类中调用这些方法。

#import <UIKit/UIKit.h>@interface GSHealthKitManager : NSObject+ (GSHealthKitManager *)sharedManager;- (void)requestAuthorization;- (NSDate *)readBirthDate;
- (void)writeWeightSample:(CGFloat)weight;@end

接下来,运行GSHealthKitManager类的实现文件,并将其内容替换为以下内容:

#import "GSHealthKitManager.h"
#import <HealthKit/HealthKit.h>@interface GSHealthKitManager ()@property (nonatomic, retain) HKHealthStore *healthStore;@end@implementation GSHealthKitManager+ (GSHealthKitManager *)sharedManager {static dispatch_once_t pred = 0;static GSHealthKitManager *instance = nil;dispatch_once(&pred, ^{instance = [[GSHealthKitManager alloc] init];instance.healthStore = [[HKHealthStore alloc] init];});return instance;
}- (void)requestAuthorization {if ([HKHealthStore isHealthDataAvailable] == NO) {// If our device doesn't support HealthKit -> return.return;}NSArray *readTypes = @[[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth]];NSArray *writeTypes = @[[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass]];[self.healthStore requestAuthorizationToShareTypes:[NSSet setWithArray:readTypes]readTypes:[NSSet setWithArray:writeTypes] completion:nil];
}- (NSDate *)readBirthDate {NSError *error;NSDate *dateOfBirth = [self.healthStore dateOfBirthWithError:&error];   // Convenience method of HKHealthStore to get date of birth directly.if (!dateOfBirth) {NSLog(@"Either an error occured fetching the user's age information or none has been stored yet. In your app, try to handle this gracefully.");}return dateOfBirth;
}- (void)writeWeightSample:(CGFloat)weight {// Each quantity consists of a value and a unit.HKUnit *kilogramUnit = [HKUnit gramUnitWithMetricPrefix:HKMetricPrefixKilo];HKQuantity *weightQuantity = [HKQuantity quantityWithUnit:kilogramUnit doubleValue:weight];HKQuantityType *weightType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];NSDate *now = [NSDate date];// For every sample, we need a sample type, quantity and a date.HKQuantitySample *weightSample = [HKQuantitySample quantitySampleWithType:weightType quantity:weightQuantity startDate:now endDate:now];[self.healthStore saveObject:weightSample withCompletion:^(BOOL success, NSError *error) {if (!success) {NSLog(@"Error while saving weight (%f) to Health Store: %@.", weight, error);}}];
}@end

尽管大多数与HealthKit相关的代码都易于理解,但让我们仔细研究每种方法,以确保我们在同一页面上。

  • sharedManager是一个类方法,它在第一次调用时创建单例对象,并在每次调用该方法时返回该实例。 dispatch_once函数是一个GCD(大中央调度)函数,该函数可以确保传递给它的块仅被调用一次,即使从多个线程同时调用sharedManager方法也是如此。
  • requestAuthorization是一种方法,它要求HealthKit存储获得读取和/或写入我们所需的特定数据的权限。 在使用HKHealthStore类的任何编写/阅读API之前,需要调用此方法。 万一用户拒绝某些(或全部)权限,HealthKit不会通知您。 用户不想共享某些类型的数据这一事实本身就是信息。 苹果就是在乎隐私。
  • readBirthDate方法返回用户的生日。 如果出现错误或用户未输入出生日期,则返回nil
  • writeWeightSample:将重量测量值保存到HealthKit。 我已经注释了代码,因此您应该大致了解方法中发生的事情。 一旦有了HKQuantitySample对象,就可以使用其saveObject:withCompletion:方法将其保存到HKHealthStore实例。 此方法适用于每种类型的健康数据,并且在保存锻炼数据时还将在本教程的第二部分中使用该方法。

在此步骤中,您遇到了许多HealthKit类。 您可以在HealthKit Framework Reference中阅读有关每个类的更多信息,但我将为您简要介绍每个类。

  • HKHealthStore这是您访问HealthKit数据的窗口。 Apple建议在您的应用程序中仅使用此类的一个实例,这样非常适合单例模式。 您可以使用它来询问用户权限,将样本和/或锻炼保存到HealthKit以及查询存储的数据。 这些只是HKHealthStore类的一部分任务。
  • HKUnit实例可以表示基本单位(例如米,秒和克),也可以表示通过组合基本单位(例如km / h或g /m³)而创建的复杂单位。 可以从字符串方便地创建复杂单位。
  • HKQuantity实例存储给定单位(由HKUnit表示)的值(由double表示)。 您可以使用doubleValueForUnit:方法将数量的值转换为传入的单位。这种转换的一个示例是创建以米为单位的距离数量并以英尺为单位要求其值。
  • HKQuantityType HealthKit使用数量类型来创建存储数值的样本。 创建数量类型时,建议使用quantityTypeForIdentifier: 。 数量类型的一些示例是骑车距离,燃烧的能量,台阶和飞行的爬升。
  • HKQuantitySample的实例表示一个样本,该样本具有数量类型(由HKQuantityType表示),数量(由HKQuantity表示)以及开始和结束日期。 如果样本不在一段时间内,则结束日期可以与开始日期相同。

现在,我们可以在应用程序中的任何位置使用GSHealthKitManager单例以与HealthKit一起使用。

结论

在本教程中,您了解了HealthKit框架的基础。 我向您介绍了该框架,并指出了一些注意事项。 我们还建立了示例应用程序的基础,并实现了GSHealthKitManager类,该类将用于与HealthKit进行交互。

在本系列的第二部分中,我们将继续构建示例应用程序,并进一步集成HealthKit。 您可以在GitHub上找到本教程的源文件 。

翻译自: https://code.tutsplus.com/tutorials/getting-started-with-healthkit-part-1--cms-24477

HealthKit入门:第1部分相关推荐

  1. ​HealthKit开发快速入门教程之HealthKit数据的操作

    ​HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知 ...

  2. HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID

    HealthKit开发快速入门教程之HealthKit框架体系创建健康AppID HealthKit开发准备工作 在开发一款HealthKit应用程序时,首先需要讲解HealthKit中有哪些类,在i ...

  3. HealthKit开发快速入门教程之HealthKit开发概述简介

    HealthKit开发快速入门教程之HealthKit开发概述简介 2014年6月2日召开的年度开发者大会上,苹果发布了一款新的移动应用平台,可以收集和分析用户的健康数据.该移动应用平台被命名为&qu ...

  4. ​HealthKit开发快速入门教程大学霸内部教程

    ​HealthKit开发快速入门教程大学霸内部教程 ​ ​ 国内第一本HealthKit专向教程.本教程详细讲解iOS中,如何使用HealthKit框架开发健康应用.最后,本教程结合HealthKit ...

  5. HealthKit开发教程之HealthKit的复合数据

    HealthKit开发教程之HealthKit的复合数据 复合数据就是复合单位和值构成的数据.所谓复合单位就是由单位进行乘法.除法等得到的单位,如m/s.lb·ft等就是复合单位.本节将针对这些复合数 ...

  6. HealthKit开发教程之HealthKit的辅助数据

    HealthKit开发教程之HealthKit的辅助数据 在HealthKit中除了主要数据之外,还有6个辅助数据分别为:体积类型数据.压力类型数据.时间类型数据.温度类型数据.标量类型数据和电导率类 ...

  7. HealthKit 框架体系

    对于一类应用程序来说,要进行开发,首先需要熟悉它的框架体系,即类.以下我们针对 HealthKit 中所使用的类进行了总结,如表 1-1 所示. 表 1-1 HealthKit框架体系 类 功能 NS ...

  8. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  9. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  10. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

最新文章

  1. android平板值得买吗,2021年一月更新1000-2000价位最全平板选购指南
  2. ios动态效果实现翻页_动画:UIKitAnimation 简单动画学习 iOS (一) 渐变 、 移动 、翻页、来回翻转 | 学步园...
  3. Android华容道之一步一步实现-序言
  4. python3环境下用matplotlib库实现UI交互
  5. java表达式1 29的计算结果是,java表达式陷阱 - Funcy1122的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. android-铃声的设置与播放
  7. 猫都能学会的Unity3D Shader入门指南(二)
  8. php和asp渲染页面,Vue.js与 ASP.NET Core 服务端渲染功能
  9. Collections.unmodifiableCollection
  10. (论文加源码)通过构建脑图基于DEAP的情绪识别多任务CNN模型(提取了功率谱密度psd和微分熵DE)
  11. 2018第一发:记一次【Advanced Installer】打包之旅
  12. Docker 如何安全地进入到容器内部
  13. SpringBoot项目打包成jar后,使用ClassPathResource获取classpath(resource)下文件失败
  14. [Ansible系列⑦]ansible fact变量
  15. 哪些语句在python中非法_下列语句中,在Python中是非法的
  16. SIGCOMM2022 Starvation in End-to-End Congestion Control
  17. 校园地图设计——任意两点间的算法优化流程与while搭配switch语句的bug解读
  18. 数据库设计:需求分析
  19. 开源节流 企业部署SaaS最实用的价值
  20. 解决excel导入数据存在公式的问题

热门文章

  1. 51单片机流水灯三种实现方法
  2. linux ftp lcd 命令,Linux FTP命令使用实例
  3. Jmeter(一)-使用http proxy代理录制脚本
  4. Jmeter5.0脚本录制
  5. pspice计算机仿真实验,基于OrCAD_PSpice二阶动态电路的计算机仿真分析
  6. matlab查看剪贴板图片,怎么把图片,txt文档复制到剪贴板中?
  7. linux 终端复制剪贴板,命令行剪贴板复制和粘贴工具?
  8. 经典FAT文件系统格式详解
  9. 网线制作相关基础知识
  10. python毕业论文参考文献格式范例_毕业论文参考文献规范格式及范例