HealthKit APIを使用して心拍数モニタをプログラムしようとしています。HKObserverQuery、バックグラウンド更新とプライバシーポリシー
私はPolar H7を持っており、ヘルスストアにデータを書き込んでいます。私はHKObserverQuery
(completionHandler()
への不在着信なし)を使用して目標を達成しました。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を読む
私は、次を参照してください。
をアンロックされるように暗号化ストアに保存します。 Nike + Runningは、すべての心拍数を同じように追跡します。そのプライバシーポリシーはどのように可能ですか?HealthKitデータのみをユーザのデバイス上でローカルに保存されます。セキュリティのため、デバイスがロックされるとHealthKitストアが暗号化されます。 HealthKitストアにアクセスできるのは、承認されたアプリのみです。その結果、アプリがバックグラウンドで起動されたときにストアからデータを読み取ることができない場合があります。ただし、アプリがロックされていても、店舗にデータを書き込むことはできます。 HealthKitは、一時的にデータをキャッシュし、私はRunstasticを使用するときに、私は心のゾーンを変更したときに音がアドバイス受ける、とすぐに電話がしかし
私は少し失われており、ドキュメントはバックグラウンド/ロックされた(可能な場合)アップデートを受け取るために必要なものについて混乱させるものです。私はここですべての関連する答えを読んでいますが、誰も決定的なものは誰もいません。さらに詳しい情報を持つもの、thisは、バックグラウンドフェッチについて言及しています。
これを達成するためのリソースまたはチュートリアルはありますか?さらに可能ですか?これにRuntasticやそれに類するアプリの回避策がありますか?
ありがとうございました。
これは私が想定していたものなので、BTLEを使用してセンサーからビートを取得する方法を実装します。 ありがとうございました! – emenegro
BLEに関する私の経験は、ある程度のバックグラウンド実行時間の後にデバイスへの接続が失われるということです。およその後。バックグラウンドで4時間iOSはBLE接続でアプリを終了し、モニタの更新がなくなります。 BLE接続に関してより信頼できる体験がありますか? – Chris