我在我的iOS应用程序中设置了一个不活动提醒。根据Health中的数据,当用户在过去60分钟内走了不到100步时,它就会发送一个通知。当应用程序打开时,这个功能非常有效。但在后台运行时遇到了一些问题。我曾尝试使用本教程中介绍的后台位置检查程序沿着步骤数据(https://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial),但由于某种原因,当教程的程序在真实的的iPhone上运行时,位置数据停止在后台收集。
所以,我的问题是:我的应用程序如何在后台每分钟可靠地检查健康数据,即使应用程序已关闭数天?
2条答案
按热度按时间cczfrluj1#
当设备锁定时,HealthKit数据库将被加密。这意味着当设备要求您输入密码/指纹时,您根本无法从中读取任何数据(大多数设备都启用了)。所以不幸的是,即使您能够每分钟都在后台运行一些内容,您也无法读取数据(您的查询将只返回一个错误而不返回任何结果)。
然而,步数数据仍然可以从计步器中访问(这些数据没有加密)。我建议您考虑使用它来代替HealthKit进行任何后台处理。
现在听起来你真的只需要检查用户在过去一个小时内是否走了步。如果你只经常检查而不是每分钟检查一次,效率会高得多。如果你的应用可以访问设置了推送通知的服务器,你可以安排一个无声的推送通知在后台唤醒你的应用,并每小时从计步器检查一次步数。
nvbavucw2#
您可以使用香港观察员查询:一个长时间运行的查询,用于监控HealthKit商店,并在匹配的样本保存到HealthKit商店或从HealthKit商店删除时更新您的应用。
1.首先设置观察者查询
2.然后注册以接收后台交付
通过调用HealthKit商店的
enableBackgroundDelivery(for:frequency:withCompletion:)
方法,在后台注册以接收更新。您可以根据需要设置适当的更新频率。每当将指定类型的新样本保存到应用商店时,HealthKit都会唤醒你的应用。如果你计划支持后台交付,请在你的应用委托的
application(_:didFinishLaunchingWithOptions:)
方法中设置你的所有观察者查询。通过在application(_:didFinishLaunchingWithOptions:)
中设置查询,你可以确保在HealthKit交付更新之前,查询已示例化并准备就绪。欲了解更多信息,请查看来源:https://developer.apple.com/documentation/healthkit/hkobserverquery