HealthKitプラットフォームは、iOS 8でAppleによって公開されました。これは、ユーザーの健康状態に関する情報を収集するために使用できるサードパーティアプリケーション用のAPIです。 HealthKitには、iOS8およびiOS9のデフォルトアプリケーションHealthが含まれており、利用可能なすべてのデータ(身体活動、栄養、圧力、カロリー、睡眠時間、その他の個人特性)が表示されます。
プラットフォームの立ち上げ直後、開発者は多くの問題に直面し、その統合が一時的に禁止されました。 これですべてが修正およびデバッグされ、HealthKitを使用するAppStoreのアプリケーションが増えています。
一般的な情報
そのため、HealthKitはすべての情報にアクセスするためのインターフェースを備えた集約です。
アプリケーション開発者にとっての使用の利点:
- HealthKitは、一連のアプリケーションの共通データウェアハウスとして機能します。 たとえば、ステップ数をカウントするために、ユーザーは異なるアプリケーションと異なるデバイスの両方を使用できます。 新しいアプリケーションをインストールするたびに、履歴が保存されます。
- 異なるアプリケーションは、追加の統合ソリューションを使用せずに互いにデータを交換できます。 すべての情報は、Healthアプリで入手できます。
- HealthKitは、特定のインジケーターに対して各アプリケーションの個別の権限を構成する機能を提供します。
- サードパーティアプリケーションからの追加のヘルスデータを使用して、アプリケーションの機能を拡張します。
HealthKitとHealthアプリはまだiPadで利用できないことに注意してください。
理論のビット
HealthKit自体は、抽象クラスHKObjectから継承された不変クラスの階層です。
各オブジェクトには次のプロパティがあります。
- UUID エントリの一意の識別子。
- 出所 データソース(デバイスまたはアプリケーションのいずれか)。
- メタデータ。 レコードに関する追加データ。 定義済みのキーとユーザーキーの両方を含む辞書を提供します。
HealthKitのオブジェクトには、特性と特性の2つのタイプがあります。 特性は、性別、生年月日、血液型など、時間とともに変化しないデータです。 サードパーティのアプリケーションはこのデータを変更できません。 新しいデータを追加するためのサンプルが用意されています。 これらは、HKSampleから継承されたクラスオブジェクトです。 次のプロパティがあります。
- タイプ。 サンプルタイプ:ステップ数、スリープ時間など
- 開始時間。 サンプリング時間の開始。
- 終了時間。 サンプル計算時間の終わり。 サンプルがその瞬間にある場合、値は時間の始まりと一致します。
応用例
以下では、HealthKitの使用を要求し、ユーザーの特性に関するデータを表示するアプリケーションの作成を検討します。
HealthKitの使用権
HealthKit APIの使用が主な機能であるアプリケーションのみがHealthKitを使用できます。 たとえば、オーガナイザーおよびレコードアプリケーションは、ヘルスデータを表示しません。 さらに、他にも多くの制限があります。
- 健康データは販促目的には使用できません。 同時に、HealthKitを使用するアプリケーション自体で広告ユニットを使用し、広告でお金を稼ぐことができます。
- アプリケーションは、HealthKitからの情報を、ユーザーの許可がある場合にのみ、HealthKitを承認および使用するアプリケーションとのみ共有できます。
制限の全リストは、 Apple Webサイトで入手できます。
次に、HealthKitをテストアプリケーションに追加します。 これを行うには、まず、プロジェクト設定でHealthKitの拡張機能をインストールします。
アプリIDがHealthKit行を保持している必要があります。そうでない場合、オプションは使用できません。
次に、ヘルスデータを使用するユーザー権限を追加します。
HealthKitを使用する拡張機能をインポートします。
import HealthKit
次に、HealthKitの主要なオブジェクトの1つであるクラスHKHealthStoreのオブジェクトを定義する必要があります。 HealthKitStoreを使用すると、HealthKitデータにアクセスする権利、特性を読み取り、新しいサンプルを記録する権限を取得できます。
let healthKitStore: HKHealthStore = HKHealthStore()
前述したように、ユーザーはアプリケーションがアクセスできる個々の特性のみを選択します。 すべてのタイプはHKObjectTypeの子孫です。
関数を作成する
authorizeHealthKit(completion: ((success:Bool, error:NSError!) -> Void)!)
その中で、読み取りおよび書き込み用のデータを定義します。
データの読み取り(仕様):
let healthKitTypesToRead = Set(arrayLiteral: HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierDateOfBirth)!, HKObjectType.characteristicTypeForIdentifier(HKCharacteristicTypeIdentifierBiologicalSex)! )
読み取りおよび書き込み用のデータ(サンプリング):
let healthKitTypesToWrite = Set(arrayLiteral: HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!, HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)! )
さらに、デバイスでHKHealthStoreを使用するためのチェックを追加します(現在、HealthKitはiPadでは使用できません)。
if !HKHealthStore.isHealthDataAvailable() { let error = NSError(domain: "ru.techmas.techmasHealthKit", code: 2, userInfo: [NSLocalizedDescriptionKey:"HealthKit is not available in this Device"]) if( completion != nil ) { completion(success:false, error:error) } return; }
最後に、読み取りと書き込み用にそれぞれSet <HKSampleType>とSet <HKObjectType>のタイプの2つのセットをパラメーターに渡すことにより、許可を要求します。
healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite, readTypes: healthKitTypesToRead) { (success, error) -> Void in if( completion != nil ) { completion(success:success,error:error) } }
viewDidLoad()に関数呼び出しを追加します。
authorizeHealthKit { (authorized, error) -> Void in if authorized { print("HealthKit authorization received.") } else { print("HealthKit authorization denied!") if error != nil { print("\(error)") } }
アプリケーションが起動すると、ウィンドウが使用可能になります。
読書仕様
次のステップは仕様の取得です。 Healthアプリに性別と年齢を追加します。
readProfile()関数を作成しましょう。 彼女のコードは次のとおりです。
func readProfile() -> (age:NSDate?, bioSex:HKBiologicalSexObject?) { // Reading Characteristics var bioSex : HKBiologicalSexObject? var dateOfBirth : NSDate? do { dateOfBirth = try healthKitStore.dateOfBirth() bioSex = try healthKitStore.biologicalSex() } catch { print(error) } return (dateOfBirth, bioSex) }
特性にアクセスするために、作成されたhealthKitStoreオブジェクトを使用しました。
可能な識別子と特徴付けのためのそれらのタイプは、 参照によりドキュメントでアクセスされます 。
ここで、次の呼び出しを使用して、一連のユーザー特性を取得します。
let profile = readProfile()
サンプルコードはgitで入手できます。
次の記事では、サンプルの取得方法とトレーニングデータの追加方法について個別に説明します。