HealthKit授权状态始终为1

时间:2015-03-16 12:19:04

标签: ios objective-c health-kit

我在我的应用中使用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。需要帮助吗?

2 个答案:

答案 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];