如何使用 HealthKit 后台交付?

Posted

技术标签:

【中文标题】如何使用 HealthKit 后台交付?【英文标题】:How to use HealthKit background delivery? 【发布时间】:2014-08-01 21:29:46 【问题描述】:

ios 8 HealthKit 中使用后台交付的正确方法是什么?

以下是我启用 HealthKit 后台交付的代码。

- (void)observeSleepData 
    HKCategoryType *sleepType = [HKCategoryType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis];
    [self.healthStore enableBackgroundDeliveryForType:sleepType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) 
        if (success) 

        
    ];
    HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType:sleepType predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) 
        NSLog(@"sleep data updated");
    ];
    [self.healthStore executeQuery:query];

除了启用 HealthKit 功能之外,我是否需要配置额外的东西才能使其正常工作? HKObserverQuery 是否响应 iOS8 原生 Health 应用中的手动输入?

【问题讨论】:

看看我的回答:***.com/a/35073904/1677480 【参考方案1】:

根据我自己的有限测试,来自 HKObserverQuery 的响应仅意味着您指定的数据类型发生了变化。它不会告诉您发生了什么变化或返回新数据。只要您在 if (success) 块中放置一个实际查询(可能是一个锚定查询),您上面的代码应该可以工作。

当我更新本机健康应用程序时,我得到了类似的代码来运行。

编辑:

我在这里给出了更完整的答案:https://***.com/a/26385281/1563787

【讨论】:

这是正确的。收到更改通知后,您必须查询您感兴趣的数据。最后,您必须在回调中调用 IOS 给您的完成函数,以通知它您已完成处理数据。 【参考方案2】:

HealthKit API Reference 说:

HealthKit 数据仅本地保存在用户设备上。为安全起见,HealthKit 存储在设备锁定时被加密。 HealthKit 商店只能由授权的应用程序访问。因此,当您的应用在后台启动时,您可能无法从商店中读取数据;但是,即使手机被锁定,应用程序仍然可以将数据写入商店。 HealthKit 会临时缓存数据并在手机解锁后立即将其保存到加密存储中

【讨论】:

这是直接引用吗?如果是这样,您可以通过在引用的行前加上 > 来表示它 - 请参阅 editing help。如果不是,您可能希望更清楚地说明您的释义。 是的。官方文档。您可以在应用程序开发人员中找到它。链接:developer.apple.com/reference/healthkit 我已编辑您的答案以表明这是直接引用。将来,您应该可以自己执行此操作 - 请参阅 Help: Editing。

以上是关于如何使用 HealthKit 后台交付?的主要内容,如果未能解决你的问题,请参考以下文章

应用程序终止时的 Healthkit 后台交付

HealthKit 后台交付

HealthKit 后台交付在一分钟内运行多次

HealthKit 后台交付在一分钟内运行多次

在几秒钟内多次调用 Healthkit 后台交付

在几秒钟内多次调用 Healthkit 后台交付