在HealthKit中请求授权:为什么结果总是成功?

时间:2018-07-08 11:08:42

标签: ios swift authorization health-kit

我正请求通过以下方式访问某些健康信息:

let healthStore = HKHealthStore()
let types: Set<HKObjectType> = [distanceWalkingRunning]

healthStore.requestAuthorization(toShare: nil, read: types) { (success, error) in
        completion(success, error)
}

然后,在首次启动该应用程序时,向我显示了标准对话框,供您选择是否要允许 Health 访问信息。如果我点击“不允许”,则会显示一个警报视图,显示:

  

健康访问-您稍后可以在“健康”应用中打开健康数据类别。

所有警报和“运行状况”访问对话框均被关闭,并显示应用程序的登录屏幕。我可以看到completion方法调用中提供的healthStore.requestAuthorization闭包正在为true参数获得success值,并为{{1}获得nil }参数。

那我怎么才能知道用户不允许访问Health?

1 个答案:

答案 0 :(得分:1)

success参数的documentation读为:

  

一个布尔值,指示是否成功处理了请求。此值不指示是否实际授予了权限。如果处理请求时发生错误,则此参数为false;否则为true

在初始请求和后续请求中,请求均已成功处理,并且您为true获得了success

您无法确定用户是否已授予对您请求的数据的读取权限。同样,来自the documentation

  

为帮助防止敏感健康信息的可能泄漏,您的应用无法确定用户是否已授予读取数据的权限。如果未获得您的许可,则在HealthKit存储中就好像没有所请求类型的数据一样。

提出授权请求后,您只需尝试读取数据,您将得到它,或者似乎没有可用数据。