2

我有一个将活动卡路里数据写入健康包的应用程序。为了防止在健康包中重复写入数据,我读取了健康包的活动卡路里来检查一个实例是否已经存在。

我的印象是,要从健康包中读取活性卡路里,我们需要征得用户许可才能读取活性卡路里。

但经过一些测试后,我观察到我能够在未经用户许可的情况下从健康包中读取活动卡路里数据。

这是正常的行为吗,我可以在没有用户许可的情况下从健康包中读取数据,因为我已经写了它?

我应该继续这个实现还是这是一个错误?

4

2 回答 2

7

在健康包的深层隐藏文档中找到了答案。

如果您的应用被授予共享权限但没有读取权限,则您只能看到您的应用写入商店的数据。来自其他来源的数据仍然隐藏。

如果您的应用有权读取某个数据类型,您可以从 HealthKit 存储中查询该数据;但是,即使知道用户拒绝了您读取数据的请求,也可能会泄露私人健康信息。因此,您的应用无法确定它是否有权读取特定类型的数据。如果用户未授予权限,则对受限数据类型的查询仅返回您的应用共享的样本。否则,HealthKit 商店似乎是空的。

所以它不是错误。我们可以读取我们在健康包中写入的数据。

于 2014-09-18T06:46:54.237 回答
2

苹果的文档说:

由于健康数据可能很敏感,HealthKit 通过提供对应用程序可以共享的信息的细粒度控制来授予用户对其数据的控制权。用户必须明确授予每个应用程序读取和写入数据到 HealthKit 存储区的权限。用户可以分别授予或拒绝每种数据类型的权限。例如,用户可以让您的应用读取步数数据,但阻止它读取血糖水平。为了防止可能的信息泄露,应用程序不知道它是否被拒绝读取数据的权限。从应用程序的角度来看,如果应用程序已被拒绝读取数据的权限,则不存在该类型的数据。

如果您能够从商店中读取实际商品,并且您确定您尚未允许应用程序的早期版本正确访问(检查设置),这听起来像是应该向 Apple 报告的错误。

于 2014-09-15T11:50:41.247 回答