HealthKit

翻譯自HealthKit

Framwork

與其他應(yīng)用共享用戶的健康和健身數(shù)據(jù)桶错,同時(shí)保持用戶的隱私和對數(shù)據(jù)的控制。

概觀

HealthKit存儲來自iPhone和Apple Watch上的應(yīng)用程序的數(shù)據(jù)。它也直接與一些健康和健身設(shè)備部念。在iOS 8.0中错邦,系統(tǒng)可以自動保存兼容的藍(lán)牙LE心率監(jiān)視器的數(shù)據(jù)。如果有的話厦画,系統(tǒng)也可以自動從M7運(yùn)動協(xié)處理器導(dǎo)入活動數(shù)據(jù)。其他設(shè)備和數(shù)據(jù)源必須具有可以訪問數(shù)據(jù)并將其保存到HealthKit的配套應(yīng)用程序滥朱。
HealthKit將數(shù)據(jù)保存在稱為HealthKit存儲的加密數(shù)據(jù)庫中根暑。你可以使用這個(gè)類來訪問這個(gè)數(shù)據(jù)庫。iPhone和Apple Watch都有自己的HealthKit商店徙邻。Apple Watch和iPhone之間的健康數(shù)據(jù)同步; 但是排嫌,Apple Watch會定期清除舊數(shù)據(jù)以節(jié)省空間。使用此方法確定Apple Watch上最早的數(shù)據(jù)缰犁。earliestPermittedSampleDate()

HealthKit旨在管理來自各種來源的數(shù)據(jù)淳地,根據(jù)用戶的偏好自動合并來自不同來源的數(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上不可用路幸。

保護(hù)用戶隱私

由于健康數(shù)據(jù)可能非常敏感荐开,因此HealthKit通過對應(yīng)用程序可以共享的信息進(jìn)行細(xì)粒度控制來授予用戶對其數(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ù)類型的使用說明鍵见秤,否則將會崩潰砂竖。要特別訪問和更新HealthKit數(shù)據(jù),它必須分別包含NSHealthShareUsageDescriptionNSHealthUpdateUsageDescription鍵鹃答。

HealthKit數(shù)據(jù)只保存在用戶的設(shè)備上乎澄。為了安全起見,HealthKit存儲在設(shè)備被鎖定時(shí)被加密测摔。HealthKit商店只能由授權(quán)的應(yīng)用程序訪問置济。因此,當(dāng)您的應(yīng)用程序在后臺啟動時(shí)锋八,您可能無法從商店讀取數(shù)據(jù); 不過浙于,應(yīng)用程序仍然可以將數(shù)據(jù)寫入商店,即使手機(jī)已鎖定挟纱。一旦手機(jī)解鎖羞酗,HealthKit會暫時(shí)緩存數(shù)據(jù)并將其保存到加密存儲中。

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

  • 您的應(yīng)用程序不得將通過使用HealthKit框架獲得的信息用于廣告或類似服務(wù)撤师。請注意剂府,您仍然可以在使用HealthKit框架的應(yīng)用中投放廣告,但不能使用HealthKit商店中的數(shù)據(jù)投放廣告剃盾。
  • 未經(jīng)用戶明確許可腺占,不得將通過HealthKit獲得的任何信息透露給第三方。即使獲得許可痒谴,只有在向用戶提供健康或健身服務(wù)的情況下衰伯,才能將信息分享給第三方。
  • 您不能將通過HealthKit獲取的信息出售給廣告平臺积蔚,數(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):
  • 個(gè)人健康記錄模型(針對非HIPAA應(yīng)用程序):http : //www.healthit.gov/policy-researchers-implementers/personal-health-record-phr-model-privacy-notice
  • HIPAA模式(適用于HIPAA涵蓋的應(yīng)用程序):http : //www.hhs.gov/ocr/privacy/hipaa/modelnotices.html

由國家衛(wèi)生信息技術(shù)協(xié)調(diào)員(ONC)開發(fā)的這些模型旨在通過使用簡單的語言和平易近人的設(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)重要。要了解這些要求擎值,請參閱Apple Store Review Review指南中的HealthKit部分慌烧,該指南可從Apple的App Review支持頁面獲得。
有關(guān)處理敏感用戶數(shù)據(jù)的其他技術(shù)信息幅恋,請參閱
iOS應(yīng)用程序編程指南當(dāng)您的應(yīng)用程序進(jìn)入后臺時(shí)怎么做杏死。

使用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ì)微而重要的差別。例如泞莉,一個(gè)HKQuantity
對象用于存儲具有數(shù)值的數(shù)據(jù)哪雕,而一個(gè)HKCategory對象用于存儲從枚舉中選擇的值。

HealthKit也使用密切相關(guān)的類對鲫趁。這些類必須正確配對斯嚎。例如,HKObjectHKObject抽象類具有很大的并行的具體子類的層次結(jié)構(gòu)挨厚。處理對象和對象類型時(shí)堡僻,必須使用匹配的子類。

HealthKit數(shù)據(jù)

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

  • 特征數(shù)據(jù)疫剃。這些記錄表示通常不會更改的項(xiàng)目钉疫。這些數(shù)據(jù)包括用戶的生日,血型巢价,生物性別和皮膚類型牲阁。您可以直接從HealthKit存儲讀取這些數(shù)據(jù)固阁,使用dataOfbirth()bloodType()咨油,biologicalSex()您炉,fitzpatrickType()和方法。您的應(yīng)用程序無法保存特征數(shù)據(jù)役电。用戶必須使用健康應(yīng)用程序輸入或修改這些數(shù)據(jù)赚爵。
  • 樣本數(shù)據(jù)。用戶的大部分健康數(shù)據(jù)都存儲在樣本中法瑟。這些樣本代表特定時(shí)間點(diǎn)的數(shù)據(jù)冀膝。所有樣本類都是類的子HKSample類,它是HKObject該類的子類霎挟。這些類在“對象和樣本屬性”中有更詳細(xì)的描述窝剖。
  • 源數(shù)據(jù)。每個(gè)樣本存儲關(guān)于其來源的信息酥夭。該HKSource`對象包含有關(guān)保存樣本的應(yīng)用程序或HKDevice設(shè)備的信息赐纱。該對象包含有關(guān)生成數(shù)據(jù)的硬件設(shè)備的信息。
  • 刪除的對象熬北。一個(gè)HKDeletedObject實(shí)例用于臨時(shí)存儲已從HealthKit存儲中刪除的項(xiàng)目的UUID疙描。當(dāng)用戶或其他應(yīng)用程序刪除對象時(shí),可以使用已刪除的對象進(jìn)行響應(yīng)讶隐。有關(guān)更多信息起胰,請參閱HKAnchoredObjectQueryHKDeleted

對象和樣本的屬性

HKObject班是所有HealthKit樣品類型的超類巫延。所有的HKObject子類都是不可變的效五。每個(gè)對象都有以下屬性:

  • UUID。該特定條目的唯一標(biāo)識符炉峰。

  • 元數(shù)據(jù)畏妖。包含有關(guān)條目的其他信息的字典。元數(shù)據(jù)可以包含預(yù)定義鍵和自定義鍵疼阔。預(yù)定義的按鍵便于在應(yīng)用程序之間共享數(shù)據(jù)瓜客。自定義鍵有助于擴(kuò)展給定的HealthKit對象類型,將特定于應(yīng)用程序的數(shù)據(jù)添加到條目中竿开。

  • 源修訂。樣本的來源玻熙。來源可以是直接將數(shù)據(jù)保存到HealthKit或應(yīng)用程序的設(shè)備否彩。將對象保存到HealthKit存儲時(shí),HealthKit會自動記錄每個(gè)對象的源和版本嗦随。該屬性僅適用于從商店檢索的對象列荔。

  • 設(shè)備敬尺。生成存儲在此示例中的數(shù)據(jù)的硬件設(shè)備。
    HKSampleHKObject的子類贴浙。示例對象表示特定時(shí)間點(diǎn)的數(shù)據(jù)砂吞。所有示例對象都是HKSample該類的子類。他們都有以下屬性:

  • 類型崎溃。樣本類型; 例如蜻直,睡眠分析樣本,身高樣本或步數(shù)樣本袁串。

  • 開始日期概而。樣本的開始時(shí)間。

  • 結(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è)具體的子類:

  • 類別樣本鲜漩。可以分類為有限類別的數(shù)據(jù)源譬。查閱HKCategorySample

  • 數(shù)量樣本。可以作為數(shù)值存儲的數(shù)據(jù)宇整。數(shù)量樣本是HealthKit中最常見的數(shù)據(jù)類型瓶佳。這些包括用戶的身高和體重,以及其他數(shù)據(jù)鳞青,如步數(shù)霸饲,用戶的溫度和脈搏率”弁兀看厚脉。HKQuantitySample

  • 相關(guān)性。包含一個(gè)或多個(gè)樣本的復(fù)合數(shù)據(jù)胶惰。在iOS 8.0中傻工,HealthKit使用相關(guān)性來表示食物和血壓。創(chuàng)建食物或血壓數(shù)據(jù)時(shí)孵滞,應(yīng)始終使用相關(guān)性中捆。看HKCorrelation坊饶。

  • 鍛煉泄伪。代表運(yùn)動的數(shù)據(jù),如跑步匿级,游泳蟋滴,甚至是玩耍染厅。鍛煉往往有類型持續(xù)時(shí)間津函,距離能源燃燒屬性肖粮。您還可以將鍛煉與許多細(xì)粒度的樣本關(guān)聯(lián)起來。與相關(guān)性不同尔苦,這些樣本不包含在鍛煉中 - 但是涩馆,他們可以使用鍛煉查詢。有關(guān)更多信息蕉堰,請參閱HKWorkout凌净。

設(shè)置HealthKit

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

注意
當(dāng)您在iOS應(yīng)用上啟用HealthKit功能時(shí)冰寻,Xcode會將HealthKit添加到所需設(shè)備功能的列表中。這可以防止用戶在不支持HealthKit的設(shè)備上購買或安裝應(yīng)用程序皿渗。
如果HealthKit對于您的應(yīng)用程序的正確操作不是必需的斩芭,則可以打開應(yīng)用程序的Info.plist文件并從Required device capabilities陣列中刪除條目healthkit
healthkit條目不被WatchKit擴(kuò)展使用。
有關(guān)所需設(shè)備功能的詳細(xì)信息乐疆,請參閱 關(guān)鍵信息屬性列表鍵參考划乖。

有關(guān)更多信息,請參閱添加HealthKit(iOS挤土,WatchKit擴(kuò)展)琴庵。

2.通過調(diào)用方法isAvailable()來確認(rèn)用戶設(shè)備上是否有HealthKit可用,如下所示仰美。
if HKHealthStore.isHealthDataAvailable() {
    // add code to use HealthKit here...
}

HealthKit在iPad上不可用迷殿。如果HealthKit不可用,則其他HealthKit方法將失敗并顯示錯(cuò)誤咖杂。errorUnavailable

3.如果HealthKit已啟用且可用庆寺,請為您的應(yīng)用程序?qū)嵗粋€(gè)對象,如下所示诉字。HKHealthStore
let healthStore = HKHealthStore()

每個(gè)應(yīng)用程序只需要一個(gè)HealthKit存儲懦尝。創(chuàng)建一次后,保留引用壤圃,以便以后使用陵霉。

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

您必須先執(zhí)行此操作伍绳,然后才能與商店執(zhí)行任何任務(wù)撩匕。為了保護(hù)用戶的隱私,HealthKit需要細(xì)致的授權(quán)墨叛。您必須申請權(quán)限才能讀取和共享您的應(yīng)用使用的每種數(shù)據(jù)類型止毕。

無論何時(shí)您的應(yīng)用程序請求新的權(quán)限,系統(tǒng)都會顯示一個(gè)窗體漠趁,其中顯示所有請求的數(shù)據(jù)類型扁凛。用戶可以打開和關(guān)閉個(gè)人閱讀和共享權(quán)限。要了解如何要求權(quán)限時(shí)提供出色的用戶體驗(yàn)闯传,看到HealthKitiOS的人機(jī)界面指南谨朝。
圖1顯示了Fit應(yīng)用程序的權(quán)限表。要下載示例代碼甥绿,請參閱適合:存儲和檢索HealthKit數(shù)據(jù)字币。

圖1 請求適合的應(yīng)用程序的權(quán)限

** 注意**
用戶為您的應(yīng)用程序設(shè)置了權(quán)限后,可以隨時(shí)使用“設(shè)置”或“運(yùn)行狀況”應(yīng)用程序來更改它們共缕。即使用戶不允許讀取或共享數(shù)據(jù)洗出,您的應(yīng)用程序也會出現(xiàn)在Health應(yīng)用程序的Sources選項(xiàng)卡中。

5.提供自定義消息以顯示在應(yīng)用文件的權(quán)限表中图谷。讀取和寫入HealthKit數(shù)據(jù)都需要自定義消息翩活。設(shè)置密鑰以自定義讀取數(shù)據(jù)的消息。設(shè)置密鑰以自定義寫入數(shù)據(jù)的消息便贵。欲了解更多信息菠镇,請參閱iOS的鑰匙信息屬性列表鍵參考
6.在嘗試保存用戶數(shù)據(jù)之前承璃,請確保您的應(yīng)用程序有權(quán)使用HealthKit方法共享數(shù)據(jù)利耍。嘗試在請求權(quán)限之前保存數(shù)據(jù)失敗并出現(xiàn)錯(cuò)誤errorinheritAuthorizationNotDetermined。嘗試在權(quán)限被拒絕時(shí)保存數(shù)據(jù)失敗并顯示錯(cuò)誤errorAuthorizationDenied

盔粹。

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

將樣品添加到HealthKit商店

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

  • 1.在HealthKit常量中查找正確的類型標(biāo)識符扰肌。
  • 2.使用類型標(biāo)識符實(shí)例化匹配子類的對象。有關(guān)便利方法的列表熊杨,請參閱曙旭。HKObjectTypeHKObjectType
  • 3.HKSample使用對象類型實(shí)例化匹配子類的對象盗舰。
    1. 使用該方法將對象保存到HealthKit商店。save(_:withCompletion:)

每個(gè)HKSample子類都有自己的實(shí)例化對象的簡便方法桂躏。這些方法修改上述過程钻趋。

2.png

對于數(shù)量樣本,創(chuàng)建一個(gè)HKQuantity類的實(shí)例剂习。數(shù)量單位必須與類型標(biāo)識符文件中描述的允許單位一致蛮位。例如,height文檔指出它使用長度單位鳞绕。因此失仁,您的數(shù)量必須使用厘米,米们何,英尺萄焦,英寸或其他兼容的單位。有關(guān)更多信息垂蜗,請參閱楷扬。HKQuantitySample

3

對于類別樣本,樣本值必須與類型標(biāo)識符文檔中描述的枚舉相對應(yīng)贴见。例如烘苹,sleepAnalysis文檔指出它使用HKCategoryValueSleepAnalysis枚舉。因此片部,創(chuàng)建此示例時(shí)镣衡,您必須傳遞此枚舉的值。有關(guān)更多信息档悠,請參閱廊鸥。HKCategorySample
4

對于關(guān)聯(lián),您必須首先創(chuàng)建關(guān)聯(lián)將包含的所有樣本對象辖所。關(guān)聯(lián)的類型標(biāo)識符描述了可以包含的對象的類型和數(shù)量惰说。不要將包含的對象保存到HealthKit存儲中。它們被存儲為相關(guān)性的一部分缘回。有關(guān)更多信息吆视,請參閱HKCorrelation

5

鍛煉的行為與其他樣本有所不同:

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

  • 您必須為每次鍛煉提供一個(gè)值。該值定義鍛煉期間執(zhí)行的活動的類型拙寡。HKWorkoutActivityType

  • 鍛煉保存到HealthKit商店后授滓,您必須將其他樣品與鍛煉相關(guān)聯(lián)(例如,活動燃燒卡路里或距離樣品)。這些樣本提供關(guān)于鍛煉的細(xì)節(jié)細(xì)節(jié)般堆。有關(guān)更多信息在孝,請參閱HKWorkout

鍛煉樣本可以為“活動”應(yīng)用中的“移動”和“鍛煉”環(huán)貢獻(xiàn)力量淮摔。要做出貢獻(xiàn)浑玛,您必須將一種或多種燃燒卡路里樣本與鍛煉聯(lián)系起來。另外:

  • 在watchOS中噩咪。使用鍛煉會話來跟蹤用戶的活動。會話結(jié)束后极阅,創(chuàng)建鍛煉對象和關(guān)聯(lián)的活動能量燃燒樣本胃碾。有關(guān)更多信息,請參閱筋搏。HKWorkoutSession

    系統(tǒng)根據(jù)活動能量燒錄樣本更新移動環(huán)仆百。它根據(jù)手表傳感器計(jì)算的鍛煉期間用戶實(shí)際施加的時(shí)間量來更新鍛煉環(huán)。

  • 在iOS 10或更高版本中奔脐。沒有額外的工作是必要的俄周。鍛煉對象自動對“移動”和“鍛煉”環(huán)都有貢獻(xiàn)。鍛煉環(huán)增加鍛煉的總持續(xù)時(shí)間髓迎,移動環(huán)增加相關(guān)的活動燃燒的卡路里數(shù)峦朗。HealthKit還會將鍛煉重疊的每個(gè)掛鐘時(shí)間增加一小時(shí)。

  • 在iOS 9中保存在iPhone上的鍛煉對象不會影響活動環(huán)排龄。

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

平衡性能和細(xì)節(jié)

將數(shù)據(jù)保存到HealthKit存儲區(qū)時(shí)橄维,通常需要選擇使用單個(gè)樣本來表示數(shù)據(jù)尺铣,還是將數(shù)據(jù)分成多個(gè)較小的樣本。從性能角度來看争舞,單一的長樣本更好凛忿。但是,多個(gè)較小的樣本可以讓用戶更詳細(xì)地了解數(shù)據(jù)如何隨著時(shí)間而變化竞川。理想情況下店溢,您希望查找足夠精細(xì)的樣本大小,以向用戶提供有用的歷史數(shù)據(jù)流译。

記錄鍛煉時(shí)逞怨,可以使用高頻數(shù)據(jù)(每個(gè)樣本一分鐘或更少)來提供強(qiáng)度圖表,并分析鍛煉過程中用戶的表現(xiàn)福澡。對于日常步驟計(jì)數(shù)較少的活動叠赦,一小時(shí)或更少的樣本通常效果最好。這可以讓你生成有意義的日常和小時(shí)圖。

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

訪問HealthKit數(shù)據(jù)

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

  • 直接方法調(diào)用糯累。HealthKit商店提供了直接訪問特征數(shù)據(jù)的方法。這些方法只能用于訪問特征數(shù)據(jù)册踩。有關(guān)更多信息泳姐,請參閱。HKHealthStore

  • 查詢暂吉。查詢返回HealthKit存儲中數(shù)據(jù)的當(dāng)前快照胖秒。所有查詢都在匿名后臺隊(duì)列上運(yùn)行。查詢完成后慕的,它將在后臺隊(duì)列上執(zhí)行結(jié)果處理程序阎肝。HealthKit提供了不同類型的查詢,每個(gè)查詢都設(shè)計(jì)為從HealthKit商店返回不同類型的數(shù)據(jù)肮街。

    • 示例查詢张肾。這是一個(gè)通用的查詢淆游。使用示例查詢訪問任何類型的示例數(shù)據(jù)疙筹。如果要對結(jié)果進(jìn)行排序或限制返回的樣本總數(shù)福青,示例查詢尤其有用。有關(guān)更多信息绕辖,請參閱摇肌。HKSampleQuery

    • 錨定對象查詢。使用此查詢搜索已添加到商店或從商店中刪除的商品引镊。第一次運(yùn)行錨點(diǎn)查詢時(shí)朦蕴,它返回當(dāng)前在商店中的所有匹配樣本。在后續(xù)運(yùn)行中弟头,它僅返回自上次運(yùn)行以來已添加或刪除的項(xiàng)目吩抓。有關(guān)更多信息,請參閱赴恨。HKAnchoredObjectQuery

    • 統(tǒng)計(jì)查詢疹娶。使用此查詢對匹配樣本集進(jìn)行統(tǒng)計(jì)計(jì)算。您可以使用統(tǒng)計(jì)查詢來計(jì)算集合中的總和伦连,最小值雨饺,最大值或平均值。有關(guān)更多信息惑淳,請參閱额港。HKStatisticQuery

    • 統(tǒng)計(jì)收集查詢。使用此查詢在一系列固定長度的時(shí)間間隔內(nèi)執(zhí)行多個(gè)統(tǒng)計(jì)查詢歧焦。創(chuàng)建圖形時(shí)移斩,您經(jīng)常會使用這些查詢。它們提供了一種簡單的方法來計(jì)算事物,例如每天消耗的卡路里總數(shù)或每5分鐘間隔所采取的步數(shù)向瓷。有關(guān)更多信息肠套,請參閱。HKStatisticsCollectioQuery

  • 相關(guān)查詢猖任。使用此查詢來執(zhí)行關(guān)聯(lián)中包含的數(shù)據(jù)的復(fù)雜搜索你稚。這些查詢可以包含存儲在關(guān)聯(lián)中的每個(gè)樣本類型的單獨(dú)謂詞。如果您只想匹配關(guān)聯(lián)類型朱躺,請改為使用示例查詢刁赖。有關(guān)更多信息,請參閱HKCorrelation长搀。

*   **源查詢乾闰。**使用此查詢搜索已將匹配樣本保存到HealthKit商店的來源(應(yīng)用程序和設(shè)備)。源查詢列出了保存特定樣本類型的所有來源盈滴。有關(guān)更多信息,請參閱轿钠。[HKSourceQuery](https://developer.apple.com/documentation/healthkit/hksourcequery)
  • 活動摘要查詢巢钓。使用此查詢來搜索用戶的活動摘要信息。每個(gè)活動摘要對象都包含給定日期的用戶活動摘要疗垛。您可以查詢一天或幾天的數(shù)據(jù)症汹。有關(guān)更多信息,請參閱HKActivitySummaryQuery

  • 文檔查詢贷腕。使用此查詢來搜索健康文檔背镇。有關(guān)更多信息,請參閱泽裳。HKDocumentQuery

  • **長時(shí)間運(yùn)行的查詢 **這些查詢繼續(xù)運(yùn)行匿名后臺隊(duì)列瞒斩,并在HealthKit存儲更改時(shí)更新您的應(yīng)用程序。另外涮总,觀察者查詢可以注冊后臺交付胸囱。這使得HealthKit每當(dāng)更新發(fā)生時(shí)都會在后臺喚醒您的應(yīng)用程序。

    • 觀察者查詢瀑梗。這個(gè)長時(shí)間運(yùn)行的查詢會監(jiān)視HealthKit存儲并提醒您對匹配樣本進(jìn)行的任何更改烹笔。當(dāng)您想要收到有關(guān)商店更改的通知時(shí),請使用觀察者查詢抛丽。您可以注冊觀察者查詢以進(jìn)行后臺交付谤职。有關(guān)更多信息,請參閱亿鲜。HKObserverQuery

    • 錨定對象查詢允蜈。除了返回修改后數(shù)據(jù)的當(dāng)前快照之外,錨定對象查詢還可以充當(dāng)長時(shí)間運(yùn)行的查詢。如果啟用陷寝,它將繼續(xù)在后臺運(yùn)行锅很,隨著匹配樣本被添加到商店或從商店中刪除提供更新。與觀察者查詢不同凤跑,這些更新包括已添加或刪除的項(xiàng)目列表; 但是爆安,錨定對象查詢不能注冊后臺傳送。有關(guān)更多信息仔引,請參閱扔仓。HKAnchoredObjectQuery

    • 統(tǒng)計(jì)收集查詢。除了計(jì)算統(tǒng)計(jì)集合的當(dāng)前快照之外咖耘,此查詢還可以充當(dāng)長時(shí)間運(yùn)行的查詢翘簇。如果將匹配樣本添加到商店或從商店中刪除,則此查詢會重新計(jì)算統(tǒng)計(jì)信息收集儿倒,并更新您的應(yīng)用版保。統(tǒng)計(jì)信息收集查詢不能注冊后臺交付。有關(guān)更多信息夫否,請參閱彻犁。HKStatisticsCollectionQuery

    • 活動摘要查詢。除了計(jì)算用戶活動摘要的當(dāng)前快照之外凰慈,此查詢還可以充當(dāng)長時(shí)間運(yùn)行的查詢汞幢。如果用戶的活動摘要數(shù)據(jù)發(fā)生更改,則此查詢將重新計(jì)算活動摘要微谓,并更新您的應(yīng)用程序森篷。活動摘要查詢無法注冊后臺交付豺型。有關(guān)更多信息仲智,請參閱。HKActivitySummaryQuery

單位和數(shù)量

HKUnit類提供單個(gè)單位的表示形式姻氨。它支持廣泛的公制和英制單位坎藐,以及簡單和復(fù)雜的單位。一個(gè)簡單的單位表示一個(gè)單一的測量哼绑,如米岩馍,磅或秒。一個(gè)復(fù)雜的單元抖韩,使用數(shù)學(xué)運(yùn)算蛀恩,如每平方英尺(磅/英尺每秒米(m / s)的或磅結(jié)合一個(gè)或多個(gè)簡單單元)。

除了創(chuàng)建HealthKit支持的所有簡單單元的便捷方法外茂浮,HKUnit還提供構(gòu)建復(fù)雜單元所需的數(shù)學(xué)運(yùn)算双谆。您也可以使用格式正確的單位字符串直接創(chuàng)建復(fù)雜單位壳咕。

有關(guān)單位的更多信息,請參閱HKUnit顽馋。

HKQuantity類存儲用于給定的單元的值谓厘。然后,您可以請求任何兼容單元中的值寸谜,讓您的應(yīng)用程序輕松轉(zhuǎn)換單位之間的值竟稳。

有關(guān)數(shù)量的更多信息,請參閱HKQuantity熊痴。

您可以使用本地化數(shù)量他爸,如長度,質(zhì)量和能量果善。對于其他數(shù)量诊笤,您需要執(zhí)行轉(zhuǎn)換并自己本地化數(shù)據(jù)。MeasurementFormatter

線程

HealthKit存儲是線程安全的巾陕,大多數(shù)HealthKit對象是不可變的讨跟。通常,您可以在多線程環(huán)境中安全地使用HealthKit鄙煤。
注意

所有HealthKit API的完成處理程序都在私有后臺隊(duì)列上執(zhí)行许赃。您通常希望在更新用戶界面或修改應(yīng)該僅由主線程觸及的任何其他資源之前將此數(shù)據(jù)分派回主隊(duì)列。

有關(guān)多線程和并發(fā)編程的更多信息馆类,請參見并發(fā)編程指南

添加數(shù)字簽名

設(shè)備可以對他們創(chuàng)建的樣本進(jìn)行數(shù)字簽名弹谁,讓其他應(yīng)用程序驗(yàn)證樣本乾巧,并驗(yàn)證他們沒有被改變。為了促進(jìn)這一點(diǎn)预愤,HealthKit提供了數(shù)字簽名元數(shù)據(jù)密鑰沟于,HKMetadataKeyDigitalSignature。使用此鍵存儲樣本記錄的數(shù)字簽名副本植康。簽名由設(shè)備生成(應(yīng)該是防篡改的旷太,因?yàn)樗鎯λ饺撕灻荑€)。這允許數(shù)據(jù)消費(fèi)者使用該設(shè)備的已知公鑰檢查簽名销睁,以驗(yàn)證記錄數(shù)據(jù)沒有被改變供璧。由于每條記錄都是單獨(dú)簽名的,因此每個(gè)記錄的存儲開銷大約為1 KB冻记。因此睡毒,此元數(shù)據(jù)簽名項(xiàng)目旨在用于采樣率不超過每天幾次的記錄。較高的采樣率將需要將簽名應(yīng)用于合并的樣本組冗栗,這超出了本文檔的范圍演顾。

通常供搀,在制造時(shí)將私鑰提供給防篡改測量設(shè)備。(任何私鑰重置或證書更新的策略或機(jī)制都不在本文的范圍之內(nèi))钠至。相應(yīng)的公鑰將由設(shè)備制造商發(fā)布葛虐,例如,在他們的網(wǎng)頁上棉钧。對于每個(gè)示例屿脐,設(shè)備都會將示例記錄以及簽名傳遞給iOS應(yīng)用程序,這會將這兩個(gè)項(xiàng)目都存儲在HealthKit數(shù)據(jù)庫中掰盘。請注意摄悯,私鑰 - 公鑰對用于數(shù)字簽名以提供數(shù)據(jù)完整性,而不用于加密愧捕。數(shù)據(jù)記錄中的實(shí)際值是明文奢驯。

用于數(shù)字簽名的格式是IETF RFC 5652中規(guī)定的加密消息語法(Cryptographic Message Syntax,CMS)次绘。簽名使用帶有區(qū)分編碼規(guī)則(DER)的ASN.1進(jìn)行編碼瘪阁。使用的消息摘要應(yīng)該是SHA256,簽名密碼應(yīng)該是FIPS PUB 186-4數(shù)字簽名標(biāo)準(zhǔn)橢圓曲線P-256邮偎。這將確保力量和效率管跺。另外,整個(gè)簽名應(yīng)該是base64編碼禾进,以便它可以存儲在HealthKit NSString元數(shù)據(jù)對象中豁跑。

簽名應(yīng)該是ASN.1簽名數(shù)據(jù)內(nèi)容類型:

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

其中SignerInfo類型是:

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

摘要和簽名算法如上所述⌒涸疲可選項(xiàng)目已被省略艇拍。SignerIdentifier用于檢索用于簽名驗(yàn)證的正確公鑰。

EncapsulatedContentInfo應(yīng)該是設(shè)備生成的樣本記錄中相關(guān)項(xiàng)目的副本宠纯。該副本應(yīng)使用ASN.1 DER進(jìn)行編碼卸夕,并應(yīng)至少包含一個(gè)樣本時(shí)間戳和樣本值。記錄數(shù)據(jù)被復(fù)制到簽名中婆瓜,以便有一個(gè)穩(wěn)定的快集,明確定義的二進(jìn)制編碼(ASN.1 DER)的數(shù)據(jù),這是產(chǎn)生可驗(yàn)證簽名所必需的廉白。對于大多數(shù)記錄類型來說个初,ASN.1編碼的plist結(jié)構(gòu)(鍵值對)應(yīng)該是足夠的。(請參閱“使用ASN.1 DER編碼plist結(jié)構(gòu)”)猴蹂。

采用HealthKit的好處

健康和健身應(yīng)用程序從采用HealthKit中獲得了幾個(gè)具體的好處勃黍。具體來說,HealthKit:
分離數(shù)據(jù)收集晕讲,數(shù)據(jù)處理和社會化覆获。創(chuàng)造現(xiàn)代健康和健身體驗(yàn)包括許多不同的方面马澈,例如收集和分析數(shù)據(jù),向用戶提供可操作的信息和有用的可視化弄息,以及培養(yǎng)社區(qū)痊班。HealthKit允許您專注于僅實(shí)現(xiàn)您最感興趣的方面,而將其他任務(wù)留給更專用的應(yīng)用程序摹量。

這種責(zé)任分離使用戶可以通過選擇自己喜歡的體重跟蹤應(yīng)用程序涤伐,步數(shù)計(jì)數(shù)應(yīng)用程序和健康挑戰(zhàn)應(yīng)用程序,采用混合搭配的方式缨称,每個(gè)應(yīng)用程序都根據(jù)自己的需求進(jìn)行了校準(zhǔn)凝果。但是,因?yàn)镠ealthKit應(yīng)用程序可以自由交換數(shù)據(jù)(具有用戶權(quán)限)睦尽,所以組合套件提供比任何單個(gè)應(yīng)用程序本身更好的體驗(yàn)器净。

例如,一群朋友可以決定加入每日步數(shù)挑戰(zhàn)当凡。每個(gè)人都可以使用自己喜歡的硬件設(shè)備或應(yīng)用程序來跟蹤這些步驟山害,但他們?nèi)匀豢梢允褂孟嗤纳缃粦?yīng)用程序來應(yīng)對挑戰(zhàn)。

啟用應(yīng)用程序之間的自動數(shù)據(jù)共享沿量。對于開發(fā)人員浪慌,您不再需要下載API并編寫自定義代碼以與每個(gè)應(yīng)用程序共享。當(dāng)新的HealthKit應(yīng)用程序可用時(shí)朴则,他們可以通過HealthKit存儲自動開始共享权纤。

用戶不需要手動設(shè)置應(yīng)用程序之間的連接或?qū)牒蛯?dǎo)出數(shù)據(jù)。重要的是乌妒,用戶仍然可以控制哪些應(yīng)用程序可以讀取和寫入HealthKit存儲數(shù)據(jù)以及每個(gè)應(yīng)用程序有權(quán)訪問哪些數(shù)據(jù)汹想。但是,只要用戶授予權(quán)限芥被,應(yīng)用程序就可以自由和無縫地訪問彼此的數(shù)據(jù)。

提供更豐富的數(shù)據(jù)和更大的上下文感坐榆。通過訪問更廣泛的數(shù)據(jù)拴魄,每個(gè)應(yīng)用程序都可以更全面地了解用戶的健康和健身需求。在許多情況下席镀,應(yīng)用程序可以根據(jù)HealthKit商店的附加信息修改其指標(biāo)或建議匹中。例如,訓(xùn)練應(yīng)用程序可以建議不僅基于燃燒的卡路里的數(shù)量而且還基于當(dāng)天到目前為止已經(jīng)吃過的食物的類型和數(shù)量來決定鍛煉后的零食豪诲。

培育更大的生態(tài)系統(tǒng)顶捷。通過共享數(shù)據(jù),應(yīng)用程序成為更大的生態(tài)系統(tǒng)的一部分屎篱,增加了應(yīng)用程序的可見性和實(shí)用性服赎。更重要的是葵蒂,HealthKit讓您的應(yīng)用程序與用戶已經(jīng)擁有和喜愛的其他應(yīng)用程序進(jìn)行協(xié)作。如果他們無法與您的應(yīng)用共享數(shù)據(jù)重虑,他們可能會決定在其他地方尋找解決方案践付。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缺厉,隨后出現(xiàn)的幾起案子永高,更是在濱河造成了極大的恐慌,老刑警劉巖提针,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件命爬,死亡現(xiàn)場離奇詭異,居然都是意外死亡辐脖,警方通過查閱死者的電腦和手機(jī)饲宛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揖曾,“玉大人落萎,你說我怎么就攤上這事√考簦” “怎么了练链?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奴拦。 經(jīng)常有香客問我媒鼓,道長,這世上最難降的妖魔是什么错妖? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任绿鸣,我火速辦了婚禮,結(jié)果婚禮上暂氯,老公的妹妹穿的比我還像新娘潮模。我一直安慰自己,他們只是感情好痴施,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布擎厢。 她就那樣靜靜地躺著,像睡著了一般辣吃。 火紅的嫁衣襯著肌膚如雪动遭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天神得,我揣著相機(jī)與錄音厘惦,去河邊找鬼。 笑死哩簿,一個(gè)胖子當(dāng)著我的面吹牛宵蕉,可吹牛的內(nèi)容都是我干的酝静。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼国裳,長吁一口氣:“原來是場噩夢啊……” “哼形入!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缝左,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤亿遂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后渺杉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛇数,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年是越,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耳舅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倚评,死狀恐怖浦徊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情天梧,我是刑警寧澤盔性,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站呢岗,受9級特大地震影響冕香,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜后豫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一悉尾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挫酿,春花似錦构眯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拄衰,卻和暖如春它褪,著一層夾襖步出監(jiān)牢的瞬間饵骨,已是汗流浹背翘悉。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留居触,地道東北人妖混。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓老赤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親制市。 傳聞我的和親對象是個(gè)殘疾皇子抬旺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355