ハイライト
Apple は、SmoothWalker の例を使用して、HealthKit の使用開始を 3 つのステップに分割しています。機能を有効にして HKHealthStore を作成し、データ型ごとに読み取りおよび書き込みの承認を要求し、HKStatisticsCollectionQuery を使用して 1 週間の歩数を表示し、更新をリッスンします。
主要内容
ヘルスケア アプリが最も頻繁に行き詰まるのは、データ ソース、アクセス許可、およびマルチデバイスの一貫性です。ユーザーの歩数は Apple Watch から取得され、歩行距離はアプリによって書き込まれ、健康データは iPhone、Apple Watch、iCloud 間で同期されます。アプリ自体がこれらの詳細を引き継ぐコストは高く、プライバシーのリスクも高くなります。
HealthKit は、開発者にシステムレベルの健康データ ウェアハウスを提供します。アプリはサンプルを書き込むことができ、ユーザーの承認後にサンプルを読み取ることができます。ユーザーは引き続きデータ権限を項目ごとに制御し、読み取り権限と書き込み権限は個別に処理されます。 Session では、健康データの読み取りと書き込みが必要なコンテキストでのみアクセス許可を要求し、現在の機能に本当に必要なデータ型のみを要求するという 1 つの点を繰り返し強調しています。
この話は、抽象 API のリストから始まるわけではありません。 Apple は SmoothWalker というサンプル アプリを作成しました。まず HealthKit を Xcode プロジェクトに接続し、次に 628 メートルの歩行距離を保存し、最後に過去 1 週間の 1 日あたりの歩数を読み取り、表に表示します。このようなパスは、HealthKit の 3 つの基本アクション (設定、書き込み、クエリ) をカバーします。
SmoothWalker の価値は、境界を示すことです。距離を保存するとき、アプリは数量サンプルを使用して値と単位を表します。歩数を読み取るとき、アプリは統計収集クエリを使用して日ごとに集計します。ユーザーがインターフェイスにステップ数を追加した後、新しいデータをリッスンするために更新ハンドラーがクエリに設定されるまで、テーブルは最初に自動的に更新されません。 HealthKit を使い始めるときは、これらの境界を把握することから始めて、徐々により多くの健康データの種類に拡張してください。
詳細
HealthKit に接続する前に 3 つのことを行ってください
(02:34) SmoothWalker の最初のステップはプロジェクトのセットアップです。開発者は、Xcode の署名と機能に HealthKit 機能を追加し、現在のプラットフォームが HealthKit をサポートしているかどうかを確認し、最後にHKHealthStore。HKHealthStoreこれは、権限の要求、サンプルの保存、クエリの実行のためのエントリ ポイントです。セッションでは、アプリのライフサイクルで 1 つのインスタンスを再利用できることが明確に述べられています。
HealthKit setup workflow
1. Add the HealthKit capability in Signing & Capabilities.
2. Check whether health data is available with HKHealthStore.
3. Create one HKHealthStore.
4. Reuse that store when requesting access, saving samples, and running queries.
キーポイント:
- HealthKit は一部のオペレーティング プラットフォームでのみ利用できるため、接続する前に利用可能かどうかを確認してください。
HKHealthStoreこれは HealthKit API への入り口であり、複数のインスタンスを繰り返し作成する必要はありません。- 現在のプラットフォームに健康データがない場合、アプリは引き続き実行できますが、健康データ関連の機能はオフになります。
データ タイプとシナリオに基づいて承認を要求する必要がある
(06:31) HealthKit の承認は特定のデータ型に基づいています。読み取り権限と書き込み権限は個別に処理され、ユーザーはいずれか 1 つのみを許可できます。セッションも必要ですInfo.plistここで提供されますHealth Update Usage DescriptionそしてHealth Share Usage Description、アプリが健康データをどのように使用するかを説明するために使用されます。
Authorization workflow for walking distance
1. Choose the distanceWalkingRunning quantity type.
2. Request write access with the HealthStore.
3. Use the completion handler to know whether the request completed.
4. Treat user permission as separate from request completion.
キーポイント:
- 完了ハンドラーの成功は、認可要求プロセスが完了したことを示すだけであり、ユーザーが同意したことを意味するものではありません。
- ユーザーがステップ ページまたはオンボーディングに入ったときに承認がポップアップ表示されるときなど、アクセス許可をリクエストするためのコンテキストが必要です。
- すべての HealthKit データ型を一度に要求しないでください。たとえば、セッションに 100 を超える HealthKit データ型がある場合、水泳トレーニング アプリが歯磨き記録を要求する理由はありません。
- ユーザーはアプリの外部で権限を変更できるため、健康データの読み取りまたは書き込みを行う前に毎回新しいリクエストを行う必要があります。
大量のサンプルを使用して歩行距離を節約する
(10:15) データを保存する前に、SmoothWalker はまず書き込まれるタイプを決定します。distanceWalkingRunning。この例の散歩はその日の 2 時 35 分から 3 時の間に行われ、距離は 628 メートルでした。ヘルスキット用HKQuantity値と単位、数量サンプルを示し、データ型、値、開始時刻、終了時刻をまとめます。
Walking distance sample
type: distanceWalkingRunning
quantity: 628 meters
start time: 2:35 p.m.
end time: 3:00 p.m.
save target: HKHealthStore
キーポイント:
- 数量サンプルは、距離、歩数、心拍数、ヘッドフォンの音量などの数値的な健康データに適しています。
HKQuantity値と単位を同時に保存し、HealthKit は異なる単位間で変換できます。- 各サンプルには開始時間と終了時間があります。メタデータには、屋内と屋外、天気、録音機器、アプリへの書き込みなどの追加情報を記録できます。
- 保存する前に、対応するデータ タイプの書き込み許可をリクエストします。ここでは歩行/走行距離を示します。
HealthKit のオブジェクト モデルは、サンプルとタイプとは別に理解されます。
(11:43) HealthKit には数量以上のサンプルがあります。腹痛などの事前定義されたレベルと単位のないデータは、カテゴリ サンプルに適しています。ワークアウトでは、距離、登った階数、消費カロリーを要約できます。誕生日や血液型などの長期データは特性に属します。すべてのオブジェクトが統一されていますHKObjectシステムの下には型システムが並行して存在します。
HealthKit data model map
Quantity Sample: numerical value plus unit, such as walking distance.
Category Sample: predefined value without a unit, such as symptom severity.
Workout: a summary that can contain multiple values and units.
Characteristic: static health data, such as birthday or blood type.
キーポイント:
- サンプルは、通常は時間範囲を含む健康イベントを説明します。
- type は、サンプルがどのタイプの健康データに属するかを示します。たとえば、
distanceWalkingRunningまたはabdominalCramps。 HKObject一意の識別子、記録デバイス、書き込みアプリなどの情報の統合ストレージ。- 間違ったサンプル タイプを選択すると、後続のクエリと集計が複雑になるため、書き込む前にデータの性質を判断してください。
統計クエリを使用して 1 週間の歩数を読み取ります
(14:23) 健康データを読み取る場合、HealthKit はさまざまなクエリを提供します。HKStatisticsQuery1週間の総歩数など、数量サンプルの統計を作成するのに適しています。歩数とカロリーは累積合計に適しており、紫外線曝露量、安静時心拍数、体温は平均、最低、最高に適しています。 HealthKit は、iPhone と Apple Watch のステップの同時記録によって生じる重複カウントの処理にも役立ちます。
Weekly steps with HKStatisticsQuery
data type: stepCount
time range: June 15 to today
statistic: cumulative sum
result object: HKStatistics
deduplication: HealthKit handles overlapping iPhone and Apple Watch steps
キーポイント:
- 統計タイプはデータの集計スタイルと一致する必要があります。歩数は累積的であり、心拍数などのデータは離散統計に適しています。
HKStatisticsは、統計に含まれる開始時刻、終了時刻、計算結果を返します。- 同じ歩行を iPhone と Apple Watch で同時に記録することができ、HealthKit 統計クエリが繰り返しの歩数を処理します。
collection query で日単位にまとめ、更新を監視する
(18:17) SmoothWalker が実際に必要とするのは、過去 1 週間の 1 日あたりの歩数です。毎日手動で HKStatisticsQuery を作成すると、1 年分のデータだけで 300 件以上のクエリを管理する必要があります。HKStatisticsCollectionQuery はこの問題を解決します。開発者が anchor date、時間間隔、統計方法を指定すると、HealthKit は一連の HKStatistics を返します。
Daily step table workflow
1. Choose stepCount as the data type.
2. Use a predicate for samples from the past week.
3. Set cumulative sum as the statistic.
4. Set an anchor date and a daily interval.
5. Execute the HKStatisticsCollectionQuery on HKHealthStore.
6. Read the HKStatisticsCollection and update the table data source.
キーポイント:
- anchor date は統計バケットをどこから始めるかを決めます。demo では Monday at 3 a.m. をアンカーとして使用します。
- 時間間隔によってバケット化の粒度が決まります。 SmoothWalker は間隔として 1 日を使用します。
initialResultsHandler初期状態に戻るHKStatisticsCollectionその後、UI の更新をメインスレッドに返す必要があります。- セッションのデモは、過去 1 週間の統計を列挙し、テーブルの後ろの配列に追加してから、
reloadData。
(27:03) 最初のデモでは、クエリに更新ハンドラーがまだなかったため、ユーザーが 800 ステップを追加した後もテーブルは変更されませんでした。設定statisticsUpdateHandlerその後、クエリはバックグラウンドで新しい健康データと新しい統計結果を監視します。セッションでは、この種のクエリは実行を継続するため、ビューが表示されなくなったら停止する必要があることも注意します。
Live update workflow
1. Set statisticsUpdateHandler before executing the query.
2. Reuse the same UI update method as the initial results handler.
3. Stop the query when the view disappears.
4. Add new steps and let the table refresh from updated statistics.
キーポイント:
- 更新ハンドラーは実行前に設定する必要があります。
- ハンドラーはバックグラウンドでリッスンし続ける可能性があり、リソースを無制限に占有することを許可することはできません。
viewWillDisappearここで、デモでのクエリを停止します。- 235 ステップを追加した後、テーブルは更新ハンドラーを通じて新しい統計を受け取り、更新されます。
元のサンプルが必要な場合は HKSampleQuery を使用してください
(29:29) 統計クエリは数量サンプルを要約するのに適していますが、一部のインターフェイスでは元のサンプルが必要です。たとえば、セッションではワークアウトが使用されます。最新のワークアウトを読み取るとき、開発者はワークアウトのタイプを指定し、終了時刻で最新のものから最も遠いものまでソートし、制限を 1 に設定してから渡します。HKHealthStore埋め込むHKSampleQuery。
Most recent workout workflow
data type: workouts
sort: most recent finish date first
predicate: nil
limit: 1
query: HKSampleQuery
execute target: HKHealthStore
キーポイント:
HKSampleQueryデータベースから元の健康サンプルを取得しますが、統計値の計算には責任を負いません。- ソート記述子によって返される順序が決まります。デモには、最後に完了したワークアウトが必要です。
- 制限により結果の数を制御できます。ここでは最新のもののみが使用されるため、1 が使用されます。
- セッションについても言及
HKAnchoredObjectQuery、HKActivitySummaryQueryそしてHKWorkoutRouteQuery、それぞれデータベースの変更、アクティビティ サークル、屋外トレーニング ルートです。
重要ポイント
- 1 週間の歩数: 機能: 過去 7 日間のユーザーの毎日の歩数をリストまたはグラフとして表示します。実行する価値がある理由: セッションの SmoothWalker が使用される
HKStatisticsCollectionQuery日ごとの歩数を集計します。開始方法: 歩数の読み取り許可を要求し、1 週間の述語、毎日の間隔、累計を設定してから、HKStatisticsCollectionUIにマッピングします。 - 歩行距離レコーダー: 機能: ユーザーが歩行距離を記録し、HealthKit に書き込めるようにします。実行する価値がある理由: このスピーチでは、628 メートルの歩行の例を使用して、量サンプルの完全な構成を示しています。開始方法: リクエスト
distanceWalkingRunning書き込み権限、メーター値、開始時刻、終了時刻を準備して渡すHKHealthStoreサンプルを保存します。 - コンテキスト認証ページ: 実行内容: ユーザーが特定の機能に入ったときにどの健康データにアクセスするかを説明します。実行する価値がある理由: セッションでは、シナリオによってリクエストされるアクセス許可が明示的に必要です。読み取りアクセス許可と書き込みアクセス許可は個別に処理され、すべてのデータ型を要求するわけではありません。開始方法: 歩数、歩行距離、トレーニング、その他の機能に対して個別の認証入り口を設計します。
Info.plist共有/更新の使用方法の説明に使用方法を明確に記載します。 - リアルタイムの歩数更新: 対処方法: ユーザーが歩数を追加すると、現在のページで当日の統計が自動的に更新されます。実行する価値がある理由: デモでは、更新や設定を行わずに初めて 800 ステップが追加されました。
statisticsUpdateHandler235 ステップを追加した後にテーブルが更新されました。開始方法: 実行中HKStatisticsCollectionQuery更新ハンドラーを前に設定し、初期結果の UI 更新メソッドを再利用し、ページを離れるときにクエリを停止します。 - 最後のワークアウト カード: 何をするか: ホームページに最新のワークアウトの時間と概要エントリを表示します。実行する価値がある理由: セッションの使用
HKSampleQuery生のワークアウト サンプルを読み取る方法を示し、統計を超えた読み取りシナリオをカバーします。開始方法: ワークアウトの種類をクエリし、終了時刻で逆順に並べ替え、制限を 1 に設定し、結果をカード コンテンツに変換します。
関連セッション
- HealthKit の新機能 — 2020 年に HealthKit に導入される新しい ECG、症状、および移動性のデータ タイプについて学びます。
- 歩数カウントを超えて — 歩数カウントを超えたモビリティ指標と健康データ集計戦略。
- HealthKit と健康データを同期する — HealthKit データ変更検出、同期識別、クロスデバイス バージョン管理について学びます。
- 火傷を負わずに FHIR を処理する — HealthKit または臨床システムからの FHIR データ モデルと検証を処理します。
コメント
GitHub Issues · utterances