我在我的应用中使用HealthKit。我从用户那里获得了访问HealthKit数据的权限。 在授权之后,如果我检查特定HealthKit对象类型的授权状态,它总是返回拒绝访问。 (1是枚举整数值)。
这是我的代码
// Steps
if ([self.healthStore authorizationStatusForType:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]] == HKAuthorizationStatusSharingAuthorized) {
[self accessStepsFrom:fromDate to:toDate];
}
//Sleep
if ([self.healthStore authorizationStatusForType:[HKObjectType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis]] == HKAuthorizationStatusSharingAuthorized) {
[self accessSleepFrom:fromDate to:toDate];
}
//DOB
if ([self.healthStore authorizationStatusForType:[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth]] == HKAuthorizationStatusSharingAuthorized) {
[self accessDOB];
}
方法[self.healthStore authorizationStatusForType:[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth]]
总是抛弃我1
。需要帮助吗?
答案 0 :(得分:27)
HKObjectType的授权状态并不反映您的应用程序是否具有 读取 这些类型的样本的授权。它仅表示您是否已经请求授权以及您的应用是否有权 编写 这些类型的样本。因此,如果您的应用程序请求授权读取步骤计数样本但不写入它们,并且用户授予读取授权,则HKQuantityTypeIdentifierStepCount的授权状态将为HKAuthorizationStatusSharingDenied。
以下内容来自HealthKit framework reference,并说明了您的应用可能无法查询其是否具有读取权限的原因:
为了帮助防止敏感健康信息泄露,您的 应用无法确定用户是否已授予权限 读数据。如果您未获得许可,则只是看起来好像 HealthKit商店中没有所请求类型的数据。如果你的 应用程序获得共享权限但未获得读取权限,您只能看到 您的应用已写入商店的数据。其他数据 消息来源仍然隐藏。
答案 1 :(得分:-1)
NSArray *readTypes = @[[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierFlightsClimbed],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]];
[self.healthStore requestAuthorizationToShareTypes:nil
readTypes:[NSSet setWithArray:readTypes] completion:nil];