1

iOS 8 HealthKit でバックグラウンド配信を使用する正しい方法は何ですか?

以下は、HealthKit のバックグラウンド配信を有効にするコードです。

- (void)observeSleepData {
    HKCategoryType *sleepType = [HKCategoryType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis];
    [self.healthStore enableBackgroundDeliveryForType:sleepType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {
        if (success) {

        }
    }];
    HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType:sleepType predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) {
        NSLog(@"sleep data updated");
    }];
    [self.healthStore executeQuery:query];
}

HealthKit 機能を有効にする以外に、これを機能させるために追加の構成を行う必要がありますか? HKObserverQueryiOS8 ネイティブ Health アプリで手動入力に応答しますか?

4

2 に答える 2

2

HealthKit API リファレンスには次のように書かれています。

HealthKit データは、ユーザーのデバイス上でローカルにのみ保持されます。セキュリティのため、デバイスがロックされている場合、HealthKit ストアは暗号化されます。HealthKit ストアには、承認されたアプリのみがアクセスできます。その結果、アプリがバックグラウンドで起動されたときに、ストアからデータを読み取ることができない場合があります。ただし、電話がロックされていても、アプリはストアにデータを書き込むことができます。HealthKit はデータを一時的にキャッシュし、電話のロックが解除されるとすぐに暗号化されたストアに保存します

于 2016-11-01T08:06:22.047 に答える
2

私自身の限定的なテストによると、HKObserverQuery からの応答は、指定したデータ型が変更されたことを意味するだけです。何が変更されたか、新しいデータが戻ってくるかはわかりません。if (success) {}上記のコードは、実際のクエリ (アンカーされたクエリの可能性が高い) をブロックに配置する限り、機能するはずです。

ネイティブの Health アプリを更新するときに実行する、これに似たコードを取得しました。

編集:

ここでより完全な答えを出しました: https://stackoverflow.com/a/26385281/1563787

于 2014-08-04T19:49:26.773 に答える