HKHealthStore 在屏幕锁定时启用BackgroundDelivery 永远无法工作

问题描述 投票:0回答:1

我正在尝试创建一个连接到 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 上完成锻炼后立即被调用,但仅限于以下情况:

  • 应用程序的状态并不重要。它适用于已杀死、正在运行或后台运行的应用程序
  • iPhone 解锁后即可使用
  • 在锁定的 iPhone 上永远不会被调用

我的问题是。这是苹果的安全功能吗?

Apple HealthKit 文档对此只字未提,但我在 2015 年发现了类似的问题在 stackoverflow 上这么说,但没有任何参考。

你也遇到过同样的情况吗?对我来说,锻炼结束后立即上传数据非常重要。

我已在 HealthKit 功能下启用了后台传送,但尚未启用任何其他后台模式。

ios swift apple-watch healthkit
1个回答
0
投票

根据其HealthKit 用户隐私页面,苹果会在设备锁定时阻止 HealthKit 访问。虽然这对于开发者来说可能很烦人,但这就是 Apple 决定保护用户隐私的方式。

您可以尝试一些解决方法,例如如果手表上可以进行锻炼,您可以将相关信息发送到手机/您的服务器。或者可能只是发送足够的信息来触发通知,让用户解锁手机/打开您的应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.