swift2 在后台swift中定期检查healthkit数据

7hiiyaii  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(207)

我在我的iOS应用程序中设置了一个不活动提醒。根据Health中的数据,当用户在过去60分钟内走了不到100步时,它就会发送一个通知。当应用程序打开时,这个功能非常有效。但在后台运行时遇到了一些问题。我曾尝试使用本教程中介绍的后台位置检查程序沿着步骤数据(https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial),但由于某种原因,当教程的程序在真实的的iPhone上运行时,位置数据停止在后台收集。
所以,我的问题是:我的应用程序如何在后台每分钟可靠地检查健康数据,即使应用程序已关闭数天?

cczfrluj

cczfrluj1#

当设备锁定时,HealthKit数据库将被加密。这意味着当设备要求您输入密码/指纹时,您根本无法从中读取任何数据(大多数设备都启用了)。所以不幸的是,即使您能够每分钟都在后台运行一些内容,您也无法读取数据(您的查询将只返回一个错误而不返回任何结果)。
然而,步数数据仍然可以从计步器中访问(这些数据没有加密)。我建议您考虑使用它来代替HealthKit进行任何后台处理。
现在听起来你真的只需要检查用户在过去一个小时内是否走了步。如果你只经常检查而不是每分钟检查一次,效率会高得多。如果你的应用可以访问设置了推送通知的服务器,你可以安排一个无声的推送通知在后台唤醒你的应用,并每小时从计步器检查一次步数。

nvbavucw

nvbavucw2#

您可以使用香港观察员查询:一个长时间运行的查询,用于监控HealthKit商店,并在匹配的样本保存到HealthKit商店或从HealthKit商店删除时更新您的应用。

1.首先设置观察者查询

let sampleType =
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)

let query = HKObserverQuery(sampleType: sampleType, predicate: nil) {
query, completionHandler, error in

if error != nil {

    // Perform Proper Error Handling Here...
    println("***An error occured while setting up the stepCount observer. \(error.localizedDescription)***")
    abort()
}

// Take whatever steps are necessary to update your app's data and UI
// This may involve executing other queries
self.updateDailyStepCount()

// If you have subscribed for background updates you must call the completion handler here.
// completionHandler()
}
healthStore.executeQuery(query)`

2.然后注册以接收后台交付

通过调用HealthKit商店的enableBackgroundDelivery(for:frequency:withCompletion:)方法,在后台注册以接收更新。您可以根据需要设置适当的更新频率。
每当将指定类型的新样本保存到应用商店时,HealthKit都会唤醒你的应用。如果你计划支持后台交付,请在你的应用委托的application(_:didFinishLaunchingWithOptions:)方法中设置你的所有观察者查询。通过在application(_:didFinishLaunchingWithOptions:)中设置查询,你可以确保在HealthKit交付更新之前,查询已示例化并准备就绪。
欲了解更多信息,请查看来源:https://developer.apple.com/documentation/healthkit/hkobserverquery

相关问题