App Services kits

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

2018-02-04  本文已影响22人  刀客传奇

版本记录

版本号 时间
V1.0 2018.02.04

前言

HealthKit与其他应用程序共享健康和健身数据,同时保持用户的隐私和对数据的控制。感兴趣的可以看上面几篇。
1. HealthKit框架详细解析(一) —— 基本概览(一)

Units and Quantities - 单位和数量

HKUnit类提供一个单位的代表。它支持广泛的公制和英制单位,以及简单和复杂的单位。一个简单的单位表示一个单一的测量,如米,磅或秒。一个复杂的单位使用数学运算(如米/秒(m / s)或磅/平方英尺(磅/平方英尺))组合一个或多个简单单位。

除了创建HealthKit支持的所有简单单元的便捷方法之外,HKUnit还提供构建复杂单元所需的数学运算。您也可以使用格式正确的单位字符串直接创建复杂单位。

有关单位的更多信息,请参阅 HKUnit

HKQuantity类存储给定单位的值。然后,您可以请求任何兼容单元中的值,让您的应用程序轻松转换单位之间的值。

有关数量的更多信息,请参见HKQuantity

您可以使用NSMeasurementFormatter来定位数量,如长度,质量和能量。对于其他数量,您需要执行转换并自己本地化数据。


Threading - 线程

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

注意:所有HealthKit API的完成处理程序都在私有后台队列上执行。 您通常希望在更新用户界面或修改应该仅由主线程触及的任何其他资源之前将此数据分派回主队列。

有关多线程和并发编程的更多信息,请参见Concurrency Programming Guide


Adding Digital Signatures - 添加数字签名

设备可以对他们创建的样品进行数字签名,让其他应用程序验证样品,并确认他们没有被改变。为了实现这一点,HealthKit提供了数字签名元数据密钥 HKMetadataKeyDigitalSignature。使用此键存储样本记录的数字签名副本。签名由设备生成(应该是防篡改的,因为它存储私人签名密钥)。这允许数据消费者使用该设备的已知公钥检查签名,以验证记录数据没有被改变。由于每条记录都是单独签名的,因此每个记录的存储开销大约为1 KB。因此,此元数据签名项目旨在用于采样率不超过每天几次的记录。较高的采样率将需要将签名应用于合并的样本组,这超出了本文档的范围。

通常,在制造时将私钥提供给防篡改测量设备。 (任何私钥重置或证书更新的策略或机制都不在本文的范围之内)。相应的公钥将由设备制造商发布,例如,在他们的网页上。对于每个样本,设备都会将样本记录以及签名传送给iOS应用程序,该程序会将这两个项目存储在HealthKit数据库中。请注意,私钥 - 公钥对用于数字签名以提供数据完整性,而不用于加密。数据记录中的实际值是明文。

用于数字签名的格式是IETF RFC 5652中规定的加密消息语法(Cryptographic Message Syntax,CMS)。签名使用带有区分编码规则(DER)的ASN.1进行编码。 使用的消息摘要应该是SHA256,签名密码应该是FIPS PUB 186-4 Digital Signature Standard Elliptic Curve P-256。 这将确保强度和效率。 另外,整个签名应该是base64编码,以便它可以存储在HealthKit NSString元数据对象中。

签名应该是ASN.1签名数据内容类型:

// Listing 3

SignedData ::= SEQUENCE {
  version CMSVersion,
  digestAlgorithms DigestAlgorithmIdentifiers,
  encapContentInfo EncasulatedContentInfo,
  signerInfos SignerInfo }

这里SignerInfo Type

SignerInfo ::= SEQUENCE {
  version CMSVersion,
  sid SignerIdentifier,
  digestAlgorithm DigestAlgorithmIdentifier,
  signatureAlgorithem SignatureAlgorithmIdentifier,
  signatureSignatureValue }

摘要和签名算法如上所述。 可选项目已被省略。 SignerIdentifier用于检索用于签名验证的正确公钥。

EncapsulatedContentInfo应该是设备生成的样本记录中相关项目的副本。 该副本应使用ASN.1 DER进行编码,并应至少包含一个样本时间戳和样本值。 记录数据被复制到签名中,以便有一个稳定的,明确定义的二进制编码(ASN.1 DER)的数据,这是产生一个可验证的签名所必需的。 对于大多数记录类型来说,ASN.1编码的plist结构(键值对)应该是足够的。 (请参阅Encoding plist structures with ASN.1 DER)。


Benefits of Adopting HealthKit - 使用HealthKit的好处

健康和健身应用程序从采用HealthKit中获得了几个具体的好处。具体来说,HealthKit:

这种责任分离使用户可以通过选择自己喜欢的体重跟踪应用程序,步数计数应用程序和健康挑战应用程序,采用混合搭配的方法,每个应用程序都根据自己的需求进行了校准。但是,因为HealthKit应用程序可以自由交换数据(具有用户权限),所以组合套件提供比任何单个应用程序本身更好的体验。

例如,一群朋友可以决定加入每日步数挑战。每个人都可以使用自己喜欢的硬件设备或应用程序来跟踪这些步骤,但他们仍然可以使用相同的社交应用程序来应对挑战。

用户不需要手动设置应用程序之间的连接或导入和导出数据。重要的是,用户仍然可以控制哪些应用程序可以读取和写入HealthKit存储数据以及每个应用程序有权访问哪些数据。但是,只要用户授予权限,应用程序就可以自由和无缝地访问彼此的数据。


Topics

1. Classes

2. Protocols

3. Reference

后记

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

上一篇下一篇

猜你喜欢

热点阅读