HealthKit框架詳細(xì)解析(一) —— 基本概覽(一)

版本記錄

版本號(hào) 時(shí)間
V1.0 2018.02.03

前言

HealthKit與其他應(yīng)用程序共享健康和健身數(shù)據(jù)蚪黑,同時(shí)保持用戶的隱私和對(duì)數(shù)據(jù)的控制。

Overview

我們先看一下框架的詳細(xì)信息柳弄。

HealthKit存儲(chǔ)來自iPhone和Apple Watch上的應(yīng)用程序的數(shù)據(jù)疯潭。它也直接與一些健康和健身設(shè)備共同作用。在iOS 8.0中祝旷,系統(tǒng)可以自動(dòng)保存兼容的藍(lán)牙LE心率監(jiān)視器的數(shù)據(jù)履澳。如果有的話,系統(tǒng)也可以自動(dòng)從M7運(yùn)動(dòng)協(xié)處理器導(dǎo)入活動(dòng)數(shù)據(jù)怀跛。其他設(shè)備和數(shù)據(jù)源必須具有可以訪問數(shù)據(jù)并將其保存到HealthKit中的配套應(yīng)用程序距贷。

HealthKit將數(shù)據(jù)保存在名為HealthKit存儲(chǔ)的加密數(shù)據(jù)庫中。您可以使用HKHealthStore類訪問這個(gè)數(shù)據(jù)庫吻谋。 iPhone和Apple Watch都有自己的HealthKit商店忠蝗。 Apple Watch和iPhone之間的健康數(shù)據(jù)同步;但是漓拾,Apple Watch會(huì)定期清除舊數(shù)據(jù)以節(jié)省空間阁最。使用earliestPermittedSampleDate方法來確定Apple Watch上最早的樣本的年齡。

HealthKit旨在管理來自各種來源的數(shù)據(jù)晦攒,根據(jù)用戶的偏好自動(dòng)合并來自不同來源的數(shù)據(jù)闽撤。應(yīng)用程序也可以訪問每個(gè)來源的原始數(shù)據(jù),自己合并數(shù)據(jù)脯颜。

HealthKit提供了一個(gè)應(yīng)用程序來幫助管理用戶的健康數(shù)據(jù)哟旗。 Health應(yīng)用程序充當(dāng)HealthKit數(shù)據(jù)的用戶界面。用戶可以查看栋操,添加闸餐,刪除,并以其他方式管理他們的健康和健身數(shù)據(jù)使用這個(gè)應(yīng)用程序矾芙。他們還可以編輯每種數(shù)據(jù)類型的共享權(quán)限舍沙。

HealthKit和Health應(yīng)用程序在iPad上不可用。

下面看一下該框架的詳細(xì)結(jié)構(gòu)剔宪。


Protecting User Privacy - 保護(hù)用戶的隱私

由于健康數(shù)據(jù)可能非常敏感拂铡,因此HealthKit通過對(duì)應(yīng)用程序可以共享的信息進(jìn)行細(xì)粒度控制來授予用戶對(duì)其數(shù)據(jù)的控制權(quán)。 用戶必須明確授予每個(gè)應(yīng)用程序讀寫數(shù)據(jù)到HealthKit商店的權(quán)限葱绒。 用戶可以為每種類型的數(shù)據(jù)分別授予或拒絕權(quán)限感帅。 例如,用戶可以讓您的應(yīng)用程序讀取步數(shù)數(shù)據(jù)地淀,但不能讀取血糖水平失球。 為了防止可能的信息泄露,應(yīng)用程序不知道它是否被拒絕讀取數(shù)據(jù)的權(quán)限帮毁。 從應(yīng)用程序的角度來看实苞,如果應(yīng)用程序被拒絕讀取數(shù)據(jù)的權(quán)限豺撑,則不存在該類型的數(shù)據(jù)。

注意:在iOS 10.0或之后鏈接的iOS應(yīng)用必須在其Info.plist文件中包含它需要訪問的數(shù)據(jù)類型的使用說明密鑰黔牵,否則將會(huì)崩潰聪轿。 要特別訪問和更新HealthKit數(shù)據(jù),它必須分別包含NSHealthShareUsageDescriptionNSHealthUpdateUsageDescription鍵荧止。

HealthKit數(shù)據(jù)只保存在用戶的設(shè)備上屹电。 為了安全起見阶剑,HealthKit store在設(shè)備被鎖定時(shí)被加密跃巡。 HealthKit商店只能由授權(quán)的應(yīng)用程序訪問。 因此牧愁,當(dāng)您的應(yīng)用程序在后臺(tái)啟動(dòng)時(shí)素邪,您可能無法從商店讀取數(shù)據(jù);不過猪半,應(yīng)用程序仍然可以將數(shù)據(jù)寫入商店兔朦,即使手機(jī)已鎖定。 一旦手機(jī)解鎖磨确,HealthKit會(huì)臨時(shí)緩存數(shù)據(jù)并將其保存到加密存儲(chǔ)中沽甥。

另外,除非應(yīng)用程序主要用于提供健康或健身服務(wù)乏奥,否則您的應(yīng)用程序不得訪問HealthKit API摆舟。 您的應(yīng)用程序作為健康和健身服務(wù)的角色必須在您的營(yíng)銷文本和用戶界面中都清楚。 具體而言邓了,以下準(zhǔn)則適用于所有HealthKit應(yīng)用程序:

  • 您的應(yīng)用程序不得將通過使用HealthKit框架獲得的信息用于廣告或類似服務(wù)恨诱。 請(qǐng)注意,您仍然可以在使用HealthKit框架的應(yīng)用中投放廣告骗炉,但不能使用HealthKit商店中的數(shù)據(jù)投放廣告照宝。

  • 未經(jīng)用戶明確許可,不得將通過HealthKit獲得的任何信息透露給第三方句葵。 即使獲得許可厕鹃,只有在向用戶提供健康或健身服務(wù)的情況下,才能將信息分享給第三方乍丈。

  • 您不能將通過HealthKit獲取的信息出售給廣告平臺(tái)剂碴,數(shù)據(jù)經(jīng)紀(jì)人或信息轉(zhuǎn)銷商。

  • 如果用戶同意诗赌,您可以與第三方共享他或她的HealthKit數(shù)據(jù)以進(jìn)行醫(yī)學(xué)研究汗茄。

  • 您必須向用戶清楚地透露您和您的應(yīng)用程序?qū)⑷绾问褂盟麄兊腍ealthKit數(shù)據(jù)。

您還必須為使用HealthKit框架的任何應(yīng)用程序提供隱私政策铭若。 您可以在以下網(wǎng)站找到有關(guān)創(chuàng)建隱私政策的指導(dǎo):

由國(guó)家衛(wèi)生信息技術(shù)協(xié)調(diào)員(ONC)開發(fā)的這些模型旨在通過使用簡(jiǎn)單的語言和平易近人的設(shè)計(jì)來解釋如何收集和共享用戶數(shù)據(jù)洪碳,從而改善用戶體驗(yàn)和理解递览。 這些模型并不是要取代基于網(wǎng)絡(luò)的隱私政策,開發(fā)者應(yīng)該咨詢ONC指導(dǎo)哪些模型適合給定的應(yīng)用程序瞳腌。 這些模型僅供您參考绞铃,Apple明確表示不承擔(dān)使用此類模型的全部責(zé)任。

注意:了解蘋果公司使用HealthKit和用戶健康相關(guān)數(shù)據(jù)的要求至關(guān)重要嫂侍。 要了解這些要求儿捧,請(qǐng)參閱Apple Store Review Review Guidelines 中的HealthKit部分,該指南可從Apple的App Review Support支持頁面獲得挑宠。有關(guān)處理敏感用戶數(shù)據(jù)的其他技術(shù)信息菲盾,請(qǐng)參閱 App Programming Guide for iOS中的What to Do When Your App Enters the Background


Working with the HealthKit Framework - 使用HealthKit框架

HealthKit框架旨在以有意義的方式在應(yīng)用程序之間共享數(shù)據(jù)各淀。該框架將數(shù)據(jù)和單元的類型限制為預(yù)定義列表懒鉴,確保所有應(yīng)用程序都了解數(shù)據(jù)的含義以及如何使用它們。開發(fā)人員不能創(chuàng)建自定義數(shù)據(jù)類型或單位碎浇。相反临谱,HealthKit提供了各種各樣的數(shù)據(jù)類型和單位。

此外奴璃,框架使用大量的子類悉默,產(chǎn)生類似類的深層次結(jié)構(gòu)。這些類通常在它們之間有細(xì)微而重要的差別苟穆。例如抄课,HKQuantitySample對(duì)象用于存儲(chǔ)具有數(shù)值的數(shù)據(jù),而HKCategorySample對(duì)象用于存儲(chǔ)從枚舉中選擇的值鞭缭。

HealthKit也使用密切相關(guān)的類對(duì)剖膳。這些類必須正確配對(duì)。例如岭辣,HKObjectHKObjectType抽象類具有很大一部分具體子類的并行層次結(jié)構(gòu)吱晒。當(dāng)使用對(duì)象和對(duì)象類型時(shí),必須使用匹配的子類沦童。

HealthKit Data - HealthKit數(shù)據(jù)

HealthKit在HealthKit Store中保存各種數(shù)據(jù)類型:

  • 特征數(shù)據(jù)仑濒。

    • 這些記錄表示通常不會(huì)更改的項(xiàng)目。這些數(shù)據(jù)包括用戶的生日偷遗,血型墩瞳,生物性別和皮膚類型。您可以使用 dateOfBirth()氏豌,bloodType()喉酌,biologicalSex()fitzpatrickSkinType()方法直接從HealthKit存儲(chǔ)中讀取此數(shù)據(jù)。您的應(yīng)用程序無法保存特征數(shù)據(jù)。用戶必須使用Health應(yīng)用程序輸入或修改這些數(shù)據(jù)泪电。
  • 樣本數(shù)據(jù)般妙。

    • 用戶的大部分健康數(shù)據(jù)都存儲(chǔ)在樣本中。這些樣本代表特定時(shí)間點(diǎn)的數(shù)據(jù)相速。所有樣本類都是HKSample類的子類碟渺,它是HKObject類的子類。這些類在 Properties of Objects and Samples中有更詳細(xì)的描述突诬。
  • 源數(shù)據(jù)苫拍。

    • 每個(gè)樣本存儲(chǔ)關(guān)于其來源的信息。 HKSourceRevision對(duì)象包含有關(guān)保存樣本的應(yīng)用程序或設(shè)備的信息旺隙。 HKDevice對(duì)象包含有關(guān)生成數(shù)據(jù)的硬件設(shè)備的信息绒极。
  • 刪除的對(duì)象。

    • HKDeletedObject實(shí)例用于臨時(shí)存儲(chǔ)已從HealthKit Store中刪除的項(xiàng)目的UUID催束。當(dāng)用戶或其他應(yīng)用程序刪除對(duì)象時(shí)集峦,可以使用已刪除的對(duì)象進(jìn)行響應(yīng)伏社。有關(guān)更多信息抠刺,請(qǐng)參閱 HKAnchoredObjectQueryHKDeletedObject

Properties of Objects and Samples - 對(duì)象和樣本屬性

HKObject類是所有HealthKit示例類型的超類摘昌。 所有的HKObject子類都是不可變的速妖。 每個(gè)對(duì)象都有以下屬性:

  • UUID。

    • 該特定條目的唯一標(biāo)識(shí)符聪黎。
  • Metadata - 元數(shù)據(jù)罕容。

    • 包含有關(guān)條目的其他信息的字典。 元數(shù)據(jù)可以包含預(yù)定義鍵和自定義鍵稿饰。 預(yù)定義鍵便于在應(yīng)用程序之間共享數(shù)據(jù)锦秒。 自定義鍵有助于擴(kuò)展給定的HealthKit對(duì)象類型,將特定于應(yīng)用程序的數(shù)據(jù)添加到條目中喉镰。
  • Source Revision - 源修訂旅择。

    • 樣本的來源。 來源可以是直接將數(shù)據(jù)保存到HealthKit或應(yīng)用程序的設(shè)備侣姆。 將對(duì)象保存到HealthKit存儲(chǔ)時(shí)生真,HealthKit會(huì)自動(dòng)記錄每個(gè)對(duì)象的源和版本。 該屬性僅適用于從商店檢索的對(duì)象捺宗。
  • Device - 設(shè)備柱蟀。

    • 生成存儲(chǔ)在此示例中的數(shù)據(jù)的硬件設(shè)備。

HKSample類是HKObject的一個(gè)子類蚜厉。 示例對(duì)象表示特定時(shí)間點(diǎn)的數(shù)據(jù)长已。 所有示例對(duì)象都是HKSample類的子類。 他們都有以下屬性:

  • Type - 類型。

    • 樣本類型术瓮;例如胶果,睡眠分析樣本,身高樣本或步數(shù)樣本斤斧。
  • Start date - 開始日期早抠。

    • 樣本的開始時(shí)間。
  • End date - 結(jié)束日期撬讽。

    • 樣本的結(jié)束時(shí)間蕊连。 如果樣本代表單個(gè)時(shí)間點(diǎn),則結(jié)束時(shí)間應(yīng)等于開始時(shí)間游昼。 如果樣本代表一段時(shí)間內(nèi)收集的數(shù)據(jù)甘苍,則結(jié)束時(shí)間應(yīng)在開始時(shí)間之后進(jìn)行。

樣本進(jìn)一步分為四個(gè)具體的子類:

  • Category samples - 類別樣本烘豌。

    • 可以分類為有限類別的數(shù)據(jù)载庭。參見HKCategorySample
  • Quantity samples - 數(shù)量樣本廊佩。

    • 可以存儲(chǔ)為數(shù)值的數(shù)據(jù)囚聚。數(shù)量樣本是HealthKit中最常見的數(shù)據(jù)類型。這些包括用戶的身高和體重标锄,以及其他數(shù)據(jù)顽铸,如所采取的步驟數(shù)量,用戶的溫度和脈搏率料皇。參見HKQuantitySample谓松。
  • Correlations - 相關(guān)性。

    • 包含一個(gè)或多個(gè)樣本的復(fù)合數(shù)據(jù)践剂。在iOS 8.0中鬼譬,HealthKit使用相關(guān)性來表示食物和血壓。創(chuàng)建食物或血壓數(shù)據(jù)時(shí)逊脯,應(yīng)始終使用相關(guān)性优质。見HKCorrelation
  • Workouts - 鍛煉男窟。

    • 代表運(yùn)動(dòng)的數(shù)據(jù)盆赤,如跑步,游泳歉眷,甚至是玩耍牺六。鍛煉往往有類型,持續(xù)時(shí)間汗捡,距離和消耗能量屬性淑际。您還可以將鍛煉與許多細(xì)粒度的樣本關(guān)聯(lián)起來畏纲。與相關(guān)性不同,這些樣本不包含在鍛煉中 - 但是春缕,他們可以使用鍛煉進(jìn)行查詢盗胀。有關(guān)更多信息,請(qǐng)參閱HKWorkout锄贼。

Setting Up HealthKit - 設(shè)置HealthKit

設(shè)置HealthKit:

  1. 在Xcode中票灰,為您的應(yīng)用程序啟用HealthKit功能。

當(dāng)您在iOS應(yīng)用程序上啟用HealthKit功能時(shí)宅荤,Xcode會(huì)將HealthKit添加到所需設(shè)備功能的列表中屑迂。 這可以防止用戶在不支持HealthKit的設(shè)備上購(gòu)買或安裝應(yīng)用程序。
如果HealthKit對(duì)于應(yīng)用程序的正確操作不是必需的冯键,則可以打開應(yīng)用程序的Info.plist文件惹盼,并從Required device capabilities中刪除Healthkit條目。
WatchKit擴(kuò)展程序不使用healthkit條目惫确。
有關(guān)所需設(shè)備功能的更多信息手报,請(qǐng)參閱 Information Property List Key Reference中的UIRequiredDeviceCapabilities鍵。

更多信息改化,請(qǐng)參閱Adding HealthKit (iOS, WatchKit Extension)

  1. 通過調(diào)用isHealthDataAvailable方法來確認(rèn)用戶設(shè)備上的HealthKit是否可用掩蛤,如下所示。
// Listing 1

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

HealthKit在iPad上不可用所袁。 如果HealthKit不可用盏档,則其他HealthKit方法將失敗并顯示HKErrorHealthDataUnavailable錯(cuò)誤。

  1. 如果HealthKit已啟用且可用燥爷,請(qǐng)為您的應(yīng)用程序?qū)嵗粋€(gè)HKHealthStore對(duì)象,如下所示懦窘。
// Listing 2

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

每個(gè)應(yīng)用程序只需要一個(gè)HealthKit存儲(chǔ)前翎。 這些是存在時(shí)間較長(zhǎng)的對(duì)象。 創(chuàng)建一次商店畅涂,并保留供以后使用的參考港华。

  1. 請(qǐng)求用戶授權(quán)讀取和共享HealthKit數(shù)據(jù)。

您必須先執(zhí)行此操作午衰,然后才能與商店執(zhí)行任何任務(wù)立宜。 為了保護(hù)用戶的隱私,HealthKit需要細(xì)致的授權(quán)臊岸。 您必須申請(qǐng)權(quán)限才能讀取和共享您的應(yīng)用使用的每種數(shù)據(jù)類型橙数。

無論何時(shí)您的應(yīng)用程序請(qǐng)求新的權(quán)限,系統(tǒng)都會(huì)顯示一個(gè)窗體帅戒,其中顯示所有請(qǐng)求的數(shù)據(jù)類型灯帮。 用戶可以打開和關(guān)閉個(gè)人閱讀和共享權(quán)限。 要了解如何在請(qǐng)求權(quán)限時(shí)提供良好的用戶體驗(yàn),請(qǐng)iOS Human Interface Guidelines中的HealthKit钟哥。

圖1顯示了Fit應(yīng)用程序的權(quán)限表迎献。 要下載示例代碼,請(qǐng)參閱Fit: Store and Retrieve HealthKit Data腻贰。

Figure 1 Requesting permission for the Fit app

注意:用戶為您的應(yīng)用程序設(shè)置了權(quán)限后吁恍,可以隨時(shí)使用SettingsHealth應(yīng)用程序來更改它們。 即使用戶不允許讀取或共享數(shù)據(jù)播演,您的應(yīng)用程序也會(huì)出現(xiàn)在Health應(yīng)用程序的Sources選項(xiàng)卡中践盼。

  1. 提供自定義消息以顯示在應(yīng)用的Info.plist文件的權(quán)限表中。 讀取和寫入HealthKit數(shù)據(jù)都需要自定義消息宾巍。 設(shè)置NSHealthShareUsageDescription鍵以定制讀取數(shù)據(jù)的消息咕幻。 設(shè)置NSHealthUpdateUsageDescription鍵以定制寫入數(shù)據(jù)的消息。 有關(guān)更多信息顶霞,請(qǐng)參閱 Information Property List Key Reference中的iOS Keys肄程。

  2. 在嘗試保存用戶數(shù)據(jù)之前,請(qǐng)確保您的應(yīng)用程序有權(quán)使用HealthKit方法共享數(shù)據(jù)选浑。 嘗試在請(qǐng)求權(quán)限之前保存數(shù)據(jù)失敗蓝厌,并顯示 HKErrorAuthorizationNotDetermined錯(cuò)誤。 嘗試在權(quán)限被拒絕時(shí)保存數(shù)據(jù)失敗古徒,并顯示HKErrorAuthorizationDenied錯(cuò)誤拓提。

  3. 在用戶授予共享數(shù)據(jù)類型的權(quán)限之后,您可以:

  • 創(chuàng)建該類型的新樣本并將其保存到HealthKit商店隧膘。 有關(guān)創(chuàng)建樣本的更多信息代态,請(qǐng)參閱 Adding Samples to the HealthKit Store

  • 使用HealthKit store查詢數(shù)據(jù)疹吃。 有關(guān)讀取HealthKit數(shù)據(jù)的更多信息蹦疑,請(qǐng)參閱Accessing HealthKit Data

有關(guān)如何設(shè)置和使用HealthKit的實(shí)際示例萨驶,請(qǐng)參閱 Fit: Store and Retrieve HealthKit Data歉摧。


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

您的應(yīng)用程序可以創(chuàng)建新的樣本并將其添加到HealthKit商店。 所有樣本類型的一般程序是相似的腔呜,盡管每種類型在這個(gè)主題上都有自己的變化叁温。

  • HealthKit Constants中查找正確的類型標(biāo)識(shí)符。
  • 使用類型標(biāo)識(shí)符實(shí)例化匹配 HKObjectType子類的對(duì)象核畴。 有關(guān)便捷方法的列表解恰,請(qǐng)參閱HKObjectType念颈。
  • 使用對(duì)象類型實(shí)例化匹配HKSample子類的對(duì)象伴找。
  • 使用 saveObject:withCompletion:方法將對(duì)象保存到HealthKit存儲(chǔ)中。

每個(gè)HKSample子類都有自己的實(shí)例化對(duì)象的簡(jiǎn)便方法娘侍。 這些方法修改上述過程。

對(duì)于數(shù)量樣品泳炉,創(chuàng)建一個(gè)HKQuantity類的實(shí)例憾筏。 數(shù)量單位必須與類型標(biāo)識(shí)符文檔中描述的允許單位一致。 例如花鹅, HKQuantityTypeIdentifierHeight文檔指出它使用長(zhǎng)度單位氧腰。 因此,您的數(shù)量必須使用厘米刨肃,米古拴,英尺,英寸或其他兼容的單位真友。 有關(guān)更多信息黄痪,請(qǐng)參閱HKQuantitySample

對(duì)于類別樣本盔然,樣本值必須與類型標(biāo)識(shí)符文檔中描述的枚舉相對(duì)應(yīng)桅打。 例如,HKCategoryTypeIdentifierSleepAnalysis文檔聲明它使用HKCategoryValueSleepAnalysis枚舉愈案。 因此挺尾,創(chuàng)建此示例時(shí),您必須傳遞此枚舉的值站绪。 有關(guān)更多信息遭铺,請(qǐng)參閱HKCategorySample

對(duì)于關(guān)聯(lián)恢准,您必須首先創(chuàng)建關(guān)聯(lián)將包含的所有樣本對(duì)象魂挂。 關(guān)聯(lián)的類型標(biāo)識(shí)符描述了可以包含的對(duì)象的類型和數(shù)量。 不要將包含的對(duì)象保存到HealthKit store中顷歌。 它們被存儲(chǔ)為相關(guān)性的一部分锰蓬。 有關(guān)更多信息,請(qǐng)參閱HKCorrelation眯漩。

Workouts行為與其他樣本有所不同:

  • 您不需要特定的類型標(biāo)識(shí)符來創(chuàng)建HKWorkoutType
    實(shí)例。 所有Workouts使用相同的類型標(biāo)識(shí)符麻顶。

  • 您必須為每個(gè)Workouts提供一個(gè)HKWorkoutActivityType值赦抖。 該值定義Workouts期間執(zhí)行的活動(dòng)的類型。

  • 鍛煉保存到HealthKit商店后辅肾,您必須將其他樣品與鍛煉相關(guān)聯(lián)(例如队萤,活動(dòng)消耗能量或距離樣品)。 這些樣本提供關(guān)于鍛煉的細(xì)粒度的細(xì)節(jié)矫钓。 有關(guān)更多信息要尔,請(qǐng)參閱HKWorkout舍杜。

鍛煉樣本可以為Activity應(yīng)用中的Move and Exercise貢獻(xiàn)力量。要做出貢獻(xiàn)赵辕,您必須將一種或多種能量消耗樣本與鍛煉聯(lián)系起來既绩。另外:

  • 在watchOS中。使用鍛煉會(huì)話來跟蹤用戶的活動(dòng)还惠。會(huì)話結(jié)束后饲握,創(chuàng)建鍛煉對(duì)象和關(guān)聯(lián)的活動(dòng)能量消耗樣本。有關(guān)更多信息蚕键,請(qǐng)參閱HKWorkoutSession救欧。系統(tǒng)根據(jù)活動(dòng)能量消耗樣本更新移動(dòng)環(huán)。它根據(jù)手表傳感器計(jì)算的鍛煉期間用戶實(shí)際施加的時(shí)間量來更新鍛煉環(huán)锣光。

  • 在iOS 10或更高版本中笆怠。沒有額外的工作是必要的。鍛煉對(duì)象自動(dòng)對(duì)“移動(dòng)”和“鍛煉”環(huán)都有貢獻(xiàn)誊爹。鍛煉環(huán)增加鍛煉的總持續(xù)時(shí)間蹬刷,移動(dòng)環(huán)增加相關(guān)的活性能量燃燒樣本的卡路里數(shù)。 HealthKit還會(huì)將鍛煉重疊的每個(gè)掛鐘時(shí)間增加1小時(shí)替废。

  • 在iOS 9中保存在iPhone上的鍛煉對(duì)象不會(huì)影響活動(dòng)環(huán)箍铭。

在設(shè)備上創(chuàng)建并保存最適合您的應(yīng)用程序的鍛煉。 這通常是運(yùn)行用戶鍛煉邏輯的設(shè)備椎镣。

Balancing Performance and Details - 平衡性能和細(xì)節(jié)

將數(shù)據(jù)保存到HealthKit store時(shí)诈火,通常需要選擇使用單個(gè)樣本來表示數(shù)據(jù),還是將數(shù)據(jù)分成多個(gè)較小的樣本状答。 從性能角度來看冷守,單一的長(zhǎng)樣本更好。 但是惊科,多個(gè)較小的樣本可以讓用戶更詳細(xì)地了解數(shù)據(jù)如何隨著時(shí)間而變化拍摇。 理想情況下,您希望查找足夠精細(xì)的樣本大小馆截,以向用戶提供有用的歷史數(shù)據(jù)充活。

記錄鍛煉時(shí),可以使用高頻數(shù)據(jù)(每個(gè)樣本一分鐘或更少)來提供強(qiáng)度圖表蜡娶,并分析鍛煉過程中用戶的表現(xiàn)混卵。 對(duì)于不太密集的活動(dòng),如每日步數(shù)窖张,一小時(shí)或更少的樣本通常效果最好幕随。 這可以讓你生成有意義的日常和小時(shí)圖。

應(yīng)用程序應(yīng)避免保存24小時(shí)或更長(zhǎng)的樣本宿接。


Accessing HealthKit Data - 訪問HealthKit數(shù)據(jù)

從HealthKit商店訪問數(shù)據(jù)有三種主要方式:

  • 直接方法調(diào)用赘淮。

    • HealthKit商店提供了直接訪問特征數(shù)據(jù)的方法辕录。這些方法只能用于訪問特征數(shù)據(jù)。有關(guān)更多信息梢卸,請(qǐng)參閱HKHealthStore走诞。
  • 查詢。查詢返回HealthKit store中數(shù)據(jù)的當(dāng)前快照低剔。所有查詢都在匿名后臺(tái)隊(duì)列上運(yùn)行速梗。查詢完成后,它將在后臺(tái)隊(duì)列上執(zhí)行結(jié)果處理程序襟齿。 HealthKit提供了不同類型的查詢姻锁,每個(gè)查詢都設(shè)計(jì)為從HealthKit商店返回不同類型的數(shù)據(jù)。

    • Sample query - 示例查詢猜欺。這是一個(gè)通用的查詢位隶。使用示例查詢?cè)L問任何類型的示例數(shù)據(jù)。如果要對(duì)結(jié)果進(jìn)行排序或限制返回的樣本總數(shù)开皿,示例查詢尤其有用涧黄。有關(guān)更多信息,請(qǐng)參閱HKSampleQuery赋荆。
    • Anchored object query - 錨定對(duì)象查詢笋妥。使用此查詢來搜索已添加到商店或從商店中刪除的商品。第一次運(yùn)行錨點(diǎn)查詢時(shí)窄潭,它將返回當(dāng)前在商店中的所有匹配樣本春宣。在后續(xù)運(yùn)行中,它僅返回自上次運(yùn)行以來已添加或刪除的項(xiàng)目嫉你。有關(guān)更多信息月帝,請(qǐng)參閱HKAnchoredObjectQuery
    • Statistics query - 統(tǒng)計(jì)查詢幽污。使用此查詢對(duì)匹配樣本集進(jìn)行統(tǒng)計(jì)計(jì)算嚷辅。您可以使用統(tǒng)計(jì)查詢來計(jì)算集合中的總和,最小值距误,最大值或平均值簸搞。有關(guān)更多信息,請(qǐng)參閱HKStatisticsQuery准潭。
    • Statistics collection query - 統(tǒng)計(jì)收集查詢攘乒。使用此查詢?cè)谝幌盗泄潭ㄩL(zhǎng)度的時(shí)間間隔內(nèi)執(zhí)行多個(gè)統(tǒng)計(jì)查詢。創(chuàng)建圖形時(shí)惋鹅,您經(jīng)常會(huì)使用這些查詢。它們提供了一種簡(jiǎn)單的方法來計(jì)算事物殉簸,例如每天消耗的卡路里總數(shù)或每5分鐘間隔所采取的步數(shù)闰集。有關(guān)更多信息沽讹,請(qǐng)參閱HKStatisticsCollectionQuery
    • Correlation query - 相關(guān)查詢武鲁。使用此查詢來執(zhí)行關(guān)聯(lián)中包含的數(shù)據(jù)的復(fù)雜搜索爽雄。這些查詢可以包含存儲(chǔ)在關(guān)聯(lián)中的每個(gè)樣本類型的單獨(dú)謂詞。如果您只想匹配關(guān)聯(lián)類型沐鼠,請(qǐng)改為使用示例查詢挚瘟。有關(guān)更多信息,請(qǐng)參閱HKCorrelation饲梭。
    • Source query - 源查詢乘盖。使用此查詢搜索已將匹配樣本保存到HealthKit商店的來源(應(yīng)用程序和設(shè)備)。源查詢列出了保存特定樣本類型的所有來源憔涉。有關(guān)更多信息订框,請(qǐng)參閱HKSourceQuery
    • Activity summary query - 活動(dòng)摘要查詢兜叨。 使用此查詢來搜索用戶的活動(dòng)摘要信息穿扳。 每個(gè)活動(dòng)摘要對(duì)象都包含給定日期的用戶活動(dòng)摘要。 您可以查詢一天或幾天的范圍国旷。 有關(guān)更多信息矛物,請(qǐng)參閱HKActivitySummaryQuery
    • Document query - 文檔查詢。 使用此查詢來搜索健康文檔跪但。 有關(guān)更多信息履羞,請(qǐng)參閱[HKDocumentQuery`(apple-reference-documentation://hc2k1_9fDd)。
  • Long running queries - 長(zhǎng)時(shí)間運(yùn)行的查詢特漩。這些查詢繼續(xù)運(yùn)行匿名后臺(tái)隊(duì)列吧雹,并在HealthKit store更改時(shí)更新您的應(yīng)用程序。另外涂身,觀察者查詢可以注冊(cè)后臺(tái)交付雄卷。這使得HealthKit每當(dāng)更新發(fā)生時(shí)都會(huì)在后臺(tái)喚醒您的應(yīng)用程序。

    • Observer query - 觀察者查詢蛤售。這個(gè)長(zhǎng)時(shí)間運(yùn)行的查詢會(huì)監(jiān)視HealthKit store并提醒您對(duì)匹配樣本進(jìn)行的任何更改丁鹉。當(dāng)您想要收到有關(guān)商店更改的通知時(shí),請(qǐng)使用觀察者查詢悴能。您可以注冊(cè)觀察者查詢以進(jìn)行后臺(tái)交付揣钦。有關(guān)更多信息,請(qǐng)參閱 HKObserverQuery漠酿。
    • Anchored object query - 錨定對(duì)象查詢冯凹。除了返回修改后數(shù)據(jù)的當(dāng)前快照之外,錨定對(duì)象查詢還可以充當(dāng)長(zhǎng)時(shí)間運(yùn)行的查詢炒嘲。如果啟用宇姚,它將繼續(xù)在后臺(tái)運(yùn)行匈庭,隨著匹配樣本被添加到商店或從商店中刪除,提供更新浑劳。與觀察者查詢不同阱持,這些更新包括已添加或刪除的項(xiàng)目列表;但是魔熏,錨定對(duì)象查詢不能注冊(cè)后臺(tái)處理衷咽。有關(guān)更多信息,請(qǐng)參閱HKAnchoredObjectQuery蒜绽。
    • Statistics collection query - 統(tǒng)計(jì)收集查詢镶骗。 除了計(jì)算統(tǒng)計(jì)集合的當(dāng)前快照外,此查詢還可以充當(dāng)長(zhǎng)時(shí)間運(yùn)行的查詢滓窍。 如果將匹配樣本添加到商店或從商店中刪除卖词,則此查詢會(huì)重新計(jì)算統(tǒng)計(jì)信息收集,并更新您的應(yīng)用吏夯。 統(tǒng)計(jì)信息收集查詢不能注冊(cè)后臺(tái)交付此蜈。 有關(guān)更多信息,請(qǐng)參閱 HKStatisticsCollectionQuery噪生。
    • Activity summary query - 活動(dòng)摘要查詢裆赵。 除了計(jì)算用戶活動(dòng)摘要的當(dāng)前快照之外,此查詢還可以充當(dāng)長(zhǎng)時(shí)間運(yùn)行的查詢跺嗽。 如果用戶的活動(dòng)摘要數(shù)據(jù)發(fā)生更改战授,則此查詢將重新計(jì)算活動(dòng)摘要,并更新您的應(yīng)用程序桨嫁。 活動(dòng)摘要查詢無法注冊(cè)后臺(tái)處理植兰。 有關(guān)更多信息,請(qǐng)參閱HKActivitySummaryQuery璃吧。

后記

本篇已結(jié)束楣导,后面更精彩~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市畜挨,隨后出現(xiàn)的幾起案子筒繁,更是在濱河造成了極大的恐慌,老刑警劉巖巴元,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毡咏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡逮刨,警方通過查閱死者的電腦和手機(jī)呕缭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人臊旭,你說我怎么就攤上這事落恼。” “怎么了离熏?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)戴涝。 經(jīng)常有香客問我滋戳,道長(zhǎng),這世上最難降的妖魔是什么啥刻? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任奸鸯,我火速辦了婚禮,結(jié)果婚禮上可帽,老公的妹妹穿的比我還像新娘娄涩。我一直安慰自己,他們只是感情好映跟,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布蓄拣。 她就那樣靜靜地躺著,像睡著了一般努隙。 火紅的嫁衣襯著肌膚如雪球恤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天荸镊,我揣著相機(jī)與錄音咽斧,去河邊找鬼。 笑死躬存,一個(gè)胖子當(dāng)著我的面吹牛张惹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岭洲,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼宛逗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了钦椭?” 一聲冷哼從身側(cè)響起拧额,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎彪腔,沒想到半個(gè)月后侥锦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡德挣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年恭垦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡番挺,死狀恐怖唠帝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玄柏,我是刑警寧澤襟衰,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站粪摘,受9級(jí)特大地震影響瀑晒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜徘意,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一苔悦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椎咧,春花似錦玖详、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至地技,卻和暖如春蜈七,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莫矗。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工飒硅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人作谚。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓三娩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親妹懒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雀监,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 翻譯自HealthKit Framwork 與其他應(yīng)用共享用戶的健康和健身數(shù)據(jù),同時(shí)保持用戶的隱私和對(duì)數(shù)據(jù)的控制眨唬。...
    夏天的風(fēng)_song閱讀 2,015評(píng)論 0 1
  • HealthKit為iPhone和Apple Watch上的健康和健身數(shù)據(jù)提供了一個(gè)中央存儲(chǔ)庫会前。在用戶的許可下,應(yīng)...
    哆啦_閱讀 1,619評(píng)論 0 2
  • The HealthKit Framework[https://developer.apple.com/libra...
    可愛的活火山閱讀 9,441評(píng)論 0 11
  • HealthKit框架學(xué)習(xí) 本文結(jié)構(gòu) 簡(jiǎn)介 用戶數(shù)據(jù)安全及隱私 HealthKit框架介紹 HealthKit使用...
    奇哥Dodge閱讀 3,829評(píng)論 4 11
  • iOS 蘋果官方Demo合集 字?jǐn)?shù)10517閱讀21059評(píng)論18喜歡144 其實(shí), 開發(fā)了這么久, 不得不說, ...
    bingo居然被占了閱讀 10,112評(píng)論 2 31