添加新数据并设置 hkObserverQuery 时,HealthKit 不启动应用程序
Posted
技术标签:
【中文标题】添加新数据并设置 hkObserverQuery 时,HealthKit 不启动应用程序【英文标题】:HealthKit does not launch app when new data is added and hkObserverQuery is set up 【发布时间】:2017-11-29 02:18:48 【问题描述】:每当有新数据可用时,我都会尝试让 HealthKit 启动我的应用程序。因此,我尝试按照我找到on GitHub 的这个示例将HKObserverQuery 与后台交付一起使用。
我为我的项目启用了背景模式功能,并确保 Info.plist 中的必需背景模式中只有 1 项
我正在使用 Xcode 和 ios 10。我确实意识到某些数据类型有时间限制,所以我通过在模拟器上的健康应用程序中添加爬升航班并查看是否调用了打印方法来测试这一点。但什么都没有发生。我还尝试在 AppDelegate 的 application() 方法中设置断点,但它仅在应用程序首次启动时执行。在我将条目放入健康应用程序后不会调用它。
我在这里做错了什么?或者有什么方法可以查看 Healthkit 是否正在尝试启动我的应用程序?
这是我的 AppDelegate 和其他相关文件
class AppDelegate: UIResponder, UIApplicationDelegate
var window: UIWindow?
let manager = HealthKitManager()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
manager.hkAccessor.setUpObserverQuery() samples in
for sample in samples!
print("\(sample.value) \(sample.identifier)")
return true
HealthkitAccessor:
func setUpObserverQuery(completion:@escaping ([QuantitySample]?) -> ())
for type in getDataTypesToRead()
guard let sampleType = type as? HKSampleType else print("\(type) is not an HKSampleType"); continue
let query = HKObserverQuery(sampleType: sampleType, predicate: nil)
[weak self] query, completionHandler, error in
if error != nil
print("*** An error occured. \(error!.localizedDescription) ***")
return
guard let strongSelf = self else return
strongSelf.queryForDataType(type:type) samples in
completion(samples)
completionHandler()
executeQuery(query: query)
healthStore.enableBackgroundDelivery(for: type, frequency: .immediate) (success: Bool, error: Error?) in
if success
print("\(type) registered for background delivery")
else
print("\(type) registered for background delivery")
【问题讨论】:
【参考方案1】:经过 12 个小时的尝试,我发现我所拥有的确实有效。只是不在模拟器上。它可以在真实设备上运行,但有一些延迟,这是合理的。我看到有人说 HealthKit 不能在数据更新后立即通知你的应用程序,而是找到系统不忙的机会唤醒你的应用程序。
【讨论】:
以上是关于添加新数据并设置 hkObserverQuery 时,HealthKit 不启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章
HealthKit HKObserverQuery 没有持续触发
HKObserverQuery 后台传递在调用completionHandler 后停止工作
HKObserverQuery 无法在 iPhone 上运行