HealthKit 筆記

HealthKit

ios/framework

數(shù)據(jù)來源

HealthKit 中的數(shù)據(jù)來源主要有

  • Health and fitness devices

  • M7 motion coprocessor

健康數(shù)據(jù)被保存在叫 Health Store 的數(shù)據(jù)庫中,而且被加密了,可以使用 HKHealthStore 類來訪問。這個數(shù)據(jù)庫存在于 iPhone 和 Apple Watch 中,他倆會自動同步,但是 Apple Watch 中的數(shù)據(jù)有可能會被系統(tǒng)自動清除以節(jié)省空間

隱私問題

用戶可以控制 APP 可以訪問哪些數(shù)據(jù),但是 APP 自己不知道自己能訪問什么數(shù)據(jù)。APP 只能向用戶提出請求,用戶可以允許或拒絕 APP 的請求,APP 自己卻不知道用戶到底是允許還是拒絕了請求。比如用戶拒絕了APP 獲取血壓數(shù)據(jù)的請求,就算用戶的健康數(shù)據(jù)中有血壓數(shù)據(jù),對于 APP 來說,血壓數(shù)據(jù)是不存在的

關(guān)于使用 HealthKit 的注意事項

  1. 不要使用健康數(shù)據(jù)來打廣告

  2. 除非獲得了用戶的允許,不要將健康數(shù)據(jù)給第三方機構(gòu)

  3. 不能出售用戶的健康數(shù)據(jù)

  4. 用戶同意的話,你可以把健康數(shù)據(jù)提供給第三方機構(gòu)以用于醫(yī)學(xué)研究

  5. 你必須告訴用戶你用健康數(shù)據(jù)的目的

健康數(shù)據(jù)分類

Health Store 中存儲的健康數(shù)據(jù)分為下面幾類

  • Characteristic data:這通常是不會改變的數(shù)據(jù),包括用戶的出生日期、血型、性別等,你可以直接通過 HKHealthStoredateOfBirth() 等方法直接訪問

  • Sample data:大部分的數(shù)據(jù)都是這個類型的

  • Source data:關(guān)于健康數(shù)據(jù)的來源的信息。 HKSourceRevisionHKDevice 可以獲得健康數(shù)據(jù)的來源于哪個 app 或者設(shè)備

  • Deleted objects:不懂

HKObject 是所有 Sample 類數(shù)據(jù)的 superclass。每個這樣的類都有下面的屬性

  • UUID

  • Metadata

  • Source Revision:Sample 數(shù)據(jù)的來源

  • Device:產(chǎn)生 Sample 數(shù)據(jù)的設(shè)備

所有的 Sample 數(shù)據(jù)都是 HKSample 的子類。他有下面的屬性

  • Type:表示數(shù)據(jù)類型,比如這是步數(shù)數(shù)據(jù)、睡眠數(shù)據(jù)

  • Start date:Sample 數(shù)據(jù)的起始時間

  • End date:Sample 數(shù)據(jù)的結(jié)束時間

Sample 還可以分為下面 4 種

  • Category samples: HKCategorySample

  • Quantity samples:可以表示成數(shù)字的健康數(shù)據(jù),大多數(shù)的數(shù)據(jù)都是這個類型, HKQuantitySample

  • Correlations:多個 Quantity samples 的組合數(shù)據(jù)。HealthKit 中的食物和血壓數(shù)據(jù)是這個類型的, HKCorrelation

  • Workouts:健身數(shù)據(jù), HKWorkout

使用 HealthKit

  1. 在 Xcode 中啟用 HealthKit

  2. 調(diào)用 HKHealthStore.isHealthDataAvailable() 來確定設(shè)備是否可以用健康數(shù)據(jù)

  3. 如果可用,用 let healthStore = HKHealthStore() 獲得 HealthStore 的實例。這個實例是 long lived 的,每個 app 只需要一個實例

  4. 獲取使用健康數(shù)據(jù)的權(quán)限

  5. 在 Info.plist 中給出使用健康數(shù)據(jù)的理由

  6. 如果你沒有請求權(quán)限,那么請求數(shù)據(jù)會導(dǎo)致錯誤 errorAuthorizationNotDetermined ;如果請求被拒絕了,會導(dǎo)致錯誤 errorAuthorizationDenied

  7. 向 HealthStore 中寫入和查詢數(shù)據(jù)

獲取健康數(shù)據(jù)

有 3 種獲取健康數(shù)據(jù)的方法

  • Direct method calls:這主要用于獲得 characteristic data,see HKHealthStore

  • Queries:返回現(xiàn)在 HealthStore 中的數(shù)據(jù)的快照。它在另外一個 queue 中執(zhí)行查詢,提供一個 completion handler

  • Sample query:最常用的 query,所有的 sample data 都可以通過這個來獲得。可以對查詢的結(jié)果排序,對查詢的范圍進行限制。see HKSampleQuery

  • Anchored object query:不太清楚,see HKAnchoredObjectQuery

  • Statistics query:用于對查詢的結(jié)果進行統(tǒng)計,例如統(tǒng)計健康數(shù)據(jù)的總數(shù)、平均數(shù)等。see HKStatisticsQuery

  • Statistics collection query:對定長時間內(nèi)的健康數(shù)據(jù)進行統(tǒng)計,比如每天消耗的卡路里數(shù)、每 5 分鐘內(nèi)走過的步數(shù)等。see HKStatisticsCollectionQuery

  • Correlation query:進行與 correlation 相關(guān)的查詢,see HKCorrelation

  • Source query:對健康數(shù)據(jù)的來源(app 或者設(shè)備)進行查詢,see HKSourceQuery

  • Activity summary query:獲得對用戶的活動的 summary,可以是對一天或是對多天的 summary,see HKActivitySummaryQuery

  • Document query:獲取 health documents,see HKDocumentQuery

  • Long running queries:這是運行在 anonymous background queue 的查詢,當(dāng) HealthStore 的健康數(shù)據(jù)有更新、并且你也注冊了 background delivery,它就能喚醒你的 APP

  • Observer query:當(dāng) HealthStore 的健康數(shù)據(jù)有更新、并且你也注冊了 background delivery,它就能喚醒你的 APP,see HKObserverQuery

  • Anchored object query:與上面的 Anchored object query 類似,可以運行在 anonymous background queue 中,但是不能注冊 background delivery,see HKAnchoredObjectQuery

  • Statistics collection query:與上面的 Statistics collection query 類似,可以運行在 anonymous background queue 中,但是不能注冊 background delivery,see HKStatisticsCollectionQuery

  • Activity summary query:與上面的 Activity summary query 類似,可以運行在 anonymous background queue 中,但是不能注冊 background delivery,see HKActivitySummaryQuery

單位與數(shù)量

HKUnit 表示一種單位,包括公制單位和英氏單位。single unit 表示簡單的單位,如米、秒等;complex unit 表示由 single unit 組合而成的單位,如米每秒(m/s)等。更多的信息請看 HKUnit

HKQuantity 表示一次查詢的結(jié)果,它所給出的值會與它所使用的單位有關(guān),因此你可以非常方便的在不同單位之間轉(zhuǎn)換,see HKQuantity

線程

HealthStore 是線程安全的

數(shù)字簽名

不太清楚,主要是為了防止取出來的健康數(shù)據(jù)被修改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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