我正请求通过以下方式访问某些健康信息:
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?
答案 0 :(得分:1)
success
参数的documentation读为:
一个布尔值,指示是否成功处理了请求。此值不指示是否实际授予了权限。如果处理请求时发生错误,则此参数为
false
;否则为true
。
在初始请求和后续请求中,请求均已成功处理,并且您为true
获得了success
。
您无法确定用户是否已授予对您请求的数据的读取权限。同样,来自the documentation:
为帮助防止敏感健康信息的可能泄漏,您的应用无法确定用户是否已授予读取数据的权限。如果未获得您的许可,则在HealthKit存储中就好像没有所请求类型的数据一样。
提出授权请求后,您只需尝试读取数据,您将得到它,或者似乎没有可用数据。