将 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 传播到后端的主要内容,如果未能解决你的问题,请参考以下文章