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で入手できます。

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

Source: https://habr.com/ru/post/J271133/


All Articles