2016-04-15 33 views
1

HealthKit APIを使用して心拍数モニタをプログラムしようとしています。HKObserverQuery、バックグラウンド更新とプライバシーポリシー

私はPolar H7を持っており、ヘルスストアにデータを書き込んでいます。私はHKObserverQuerycompletionHandler()への不在着信なし)を使用して目標を達成しました。HKSampleQueryと私が照会しているタイプのためにHKHealthStore.enableBackgroundDeliveryForTypeを呼び出すバックグラウンド更新を有効にしています。

private func queryForHeartRate() { 

    guard let sampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate) else { 
     executeCompletionHandler(value: nil, error: nil) 
     return 
    } 

    let observerQuery = HKObserverQuery(sampleType: sampleType, predicate: nil) { [unowned self] query, completionHandler, error in 

     guard error == nil else { 
      self.executeCompletionHandler(value: nil, error: error) 
      return 
     } 

     self.queryHeartRateSample(sampleType) 
     completionHandler() 
    } 

    healthStore.executeQuery(observerQuery) 
} 

private func queryHeartRateSample(sampleType: HKSampleType) { 

    let timeSortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false) 
    let sampleQuery = HKSampleQuery(sampleType: sampleType, predicate: nil, limit: 1, sortDescriptors: [timeSortDescriptor], resultsHandler: { [unowned self] (sampleQuery, results, error) in 

     guard error == nil else { 
      self.executeCompletionHandler(value: nil, error: error) 
      return 
     } 

     guard let samples = results as? [HKQuantitySample] where !samples.isEmpty else { 
      self.executeCompletionHandler(value: nil, error: error) 
      return 
     } 

     guard let lastSample = samples.last else { 
      self.executeCompletionHandler(value: nil, error: error) 
      return 
     } 

     let heartBeat = lastSample.quantity.doubleValueForUnit(self.heartBeatsPerMinuteUnit) 
     self.executeCompletionHandler(value: heartBeat, error: nil) 
    }) 

    healthStore.executeQuery(sampleQuery) 
} 

アプリがバックグラウンドになるか、電話がロックされると(即時のパスコード)、アプリはアップデートを受け取るのをやめます。 docsを読む

私は、次を参照してください。

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

をアンロックされるように暗号化ストアに保存します。 Nike + Runningは、すべての心拍数を同じように追跡します。そのプライバシーポリシーはどのように可能ですか?

私は少し失われており、ドキュメントはバックグラウンド/ロックされた(可能な場合)アップデートを受け取るために必要なものについて混乱させるものです。私はここですべての関連する答えを読んでいますが、誰も決定的なものは誰もいません。さらに詳しい情報を持つもの、thisは、バックグラウンドフェッチについて言及しています。

これを達成するためのリソースまたはチュートリアルはありますか?さらに可能ですか?これにRuntasticやそれに類するアプリの回避策がありますか?

ありがとうございました。

答えて

1

データは暗号化されており、その時点ではアクセスできないため、デバイスがロックされている間はHealthKitデータを受信できません。デバイスがロックされている間に心拍数の変化に応答する他のアプリは、HealthKitではなく、BT心拍数モニタから直接データを読み込む可能性が最も高いです。

+0

これは私が想定していたものなので、BTLEを使用してセンサーからビートを取得する方法を実装します。 ありがとうございました! – emenegro

+0

BLEに関する私の経験は、ある程度のバックグラウンド実行時間の後にデバイスへの接続が失われるということです。およその後。バックグラウンドで4時間iOSはBLE接続でアプリを終了し、モニタの更新がなくなります。 BLE接続に関してより信頼できる体験がありますか? – Chris

関連する問題