我正在尝试创建一个连接到 HealthKit 的应用程序,一旦锻炼完成,我很乐意将其中一些聚合属性上传到我们的服务。
let sampleType = HKObjectType.workoutType()
//1. Enable background delivery for workouts
self.healthStore.enableBackgroundDelivery(for: sampleType, frequency: .immediate) { (success, error) in
if let unwrappedError = error {
print("could not enable background delivery: \(unwrappedError)")
}
if success {
print("background delivery enabled")
}
}
//2. open observer query
let query = HKObserverQuery(sampleType: sampleType, predicate: HealthKitService.compoundPredicate) { (query, completionHandler, error) in
self.updateWorkouts() {
completionHandler()
}
}
healthStore.execute(query)
AppDelegate 中的这段代码运行完美,并且在我在 AppleWatch 上完成锻炼后立即被调用,但仅限于以下情况:
我的问题是。这是苹果的安全功能吗?
Apple HealthKit 文档对此只字未提,但我在 2015 年发现了类似的问题在 stackoverflow 上这么说,但没有任何参考。
你也遇到过同样的情况吗?对我来说,锻炼结束后立即上传数据非常重要。
我已在 HealthKit 功能下启用了后台传送,但尚未启用任何其他后台模式。
根据其HealthKit 用户隐私页面,苹果会在设备锁定时阻止 HealthKit 访问。虽然这对于开发者来说可能很烦人,但这就是 Apple 决定保护用户隐私的方式。
您可以尝试一些解决方法,例如如果手表上可以进行锻炼,您可以将相关信息发送到手机/您的服务器。或者可能只是发送足够的信息来触发通知,让用户解锁手机/打开您的应用程序。