HealthKitを使用します。 パート1

一連の記事で、Techmasの同僚がHealthKitとフィットネスアプリの作成での経験を共有します。 最初の記事はテクノロジーの紹介で、Healthから個人データを選択するアプリケーションをレビューします。



HealthKitプラットフォームは、iOS 8でAppleによって公開されました。これは、ユーザーの健康状態に関する情報を収集するために使用できるサードパーティアプリケーション用のAPIです。 HealthKitには、iOS8およびiOS9のデフォルトアプリケーションHealthが含まれており、利用可能なすべてのデータ(身体活動、栄養、圧力、カロリー、睡眠時間、その他の個人特性)が表示されます。



プラットフォームの立ち上げ直後、開発者は多くの問題に直面し、その統合が一時的に禁止されました。 これですべてが修正およびデバッグされ、HealthKitを使用するAppStoreのアプリケーションが増えています。











一般的な情報



そのため、HealthKitはすべての情報にアクセスするためのインターフェースを備えた集約です。





アプリケーション開発者にとっての使用の利点:



HealthKitとHealthアプリはまだiPadで利用できないことに注意してください。



理論のビット



HealthKit自体は、抽象クラスHKObjectから継承された不変クラスの階層です。



各オブジェクトには次のプロパティがあります。



HealthKitのオブジェクトには、特性と特性の2つのタイプがあります。 特性は、性別、生年月日、血液型など、時間とともに変化しないデータです。 サードパーティのアプリケーションはこのデータを変更できません。 新しいデータを追加するためのサンプルが用意されています。 これらは、HKSampleから継承されたクラスオブジェクトです。 次のプロパティがあります。



応用例



以下では、HealthKitの使用を要求し、ユーザーの特性に関するデータを表示するアプリケーションの作成を検討します。



HealthKitの使用権



HealthKit APIの使用が主な機能であるアプリケーションのみが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で入手できます。



次の記事では、サンプルの取得方法とトレーニングデータの追加方法について個別に説明します。



All Articles