将 HealthKit Delete 传播到后端

Posted

技术标签:

【中文标题】将 HealthKit Delete 传播到后端【英文标题】:Propagating HealthKit Delete to back end 【发布时间】:2015-03-09 19:14:16 【问题描述】:

希望这个问题听起来不会太傻,但我还没有找到解决方案。我目前正在使用与 HealthKit 集成的 Xamarin 编写应用程序。存储在 HK 中的数据会定期同步到服务器。这是通过提取食物相关性的 HKAnchoredObjectQuery 完成的。

由于定期提取数据,因此存在在同步之间的场景,用户可能会删除 HealthKit 中的值。该删除需要在下一次同步时传播回服务器。

我最初的想法是使用观察者查询来做到这一点。

我的问题是:使用 HealthKit 的观察者查询,有没有办法确定触发查询的操作是否是删除操作?

public void CheckForDelete (Subject subject)
    
        var sampleType = HKObjectType.GetCorrelationType (HKCorrelationTypeKey.IdentifierFood);
        var predicate = HKQuery.GetPredicateForSamples (NSDate.DistantPast, NSDate.Now, HKQueryOptions.None);
        var observerQuery = new HKObserverQuery (sampleType, predicate, (query, completion, error ) => 
            //...Determine if action was a Delete
            //Code to delete on backend

            completion();
        );

        HealthKitStore.ExecuteQuery (observerQuery);
    

【问题讨论】:

您找到解决方案了吗?我面临同样的问题,我认为没有简单的方法来跟踪已删除的样本。我想我需要检查 HealthApp 中是否仍然存在样本并手动删除它们。 不幸的是还没有。我尝试为每个元素创建一个单独的观察者查询以侦听删除,然后在调用该观察者查询时触发数据库删除,但这并没有像我想象的那样表现。它还为每个元素(可能有数百个)创建了一个后台查询线程。据我所知,确实没有办法检测是否从单独的应用程序中删除了 healthkit 数据。希望有人能弄清楚! 我的方法是将条目保存到我自己的数据库中,当observerQuery 命中时,我调用sampleQuery 来获取实际样本。完成后,我反复思考样本并检查添加的内容和删除的内容。我在我的数据库中创建了一个列healthUUID 来保存Health 样本的标识,这样就很容易跟踪我的数据库和health app 之间的差异。 如果你想做类似的事情,请告诉我,我可以分享代码。 嘿伙计们,你找到解决问题的方法了吗? 【参考方案1】:

ios 9 中,HKAnchoredObjectQuery 已修改为报告已删除的对象。

【讨论】:

以上是关于将 HealthKit Delete 传播到后端的主要内容,如果未能解决你的问题,请参考以下文章

vscode打包的dist文件怎么整合到后端代码中

将用户的 Active Directory 凭据发送到后端系统是不是错误

如何将用户信息从前端传递到后端

如何将 iso 8601 日期发送到后端?

从 HealthKit 中删除/丢弃以前保存的数据

从 HealthKit 中删除/丢弃以前保存的数据