13

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

4

2 回答 2

39

HKObjectType 的授权状态不反映您的应用程序是否有权读取这些类型的样本。它仅表明您是否已请求授权以及您的应用程序是否有权编写这些类型的示例。因此,如果您的应用请求授权读取步数样本但不写入它们,并且用户授予读取授权,则 HKQuantityTypeIdentifierStepCount 的授权状态将为 HKAuthorizationStatusSharingDenied。

以下来自HealthKit 框架参考,并解释了为什么您的应用可能无法查询它是否具有读取权限:

为帮助防止敏感健康信息可能泄露,您的应用无法确定用户是否已授予读取数据的权限。如果您没有被授予权限,它只是看起来好像在 HealthKit 存储中没有请求类型的数据。如果您的应用被授予共享权限但没有读取权限,则您只能看到您的应用写入商店的数据。来自其他来源的数据仍然隐藏。

于 2015-03-18T17:01:20.907 回答
-1
NSArray *readTypes = @[[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierFlightsClimbed],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]];

[self.healthStore requestAuthorizationToShareTypes:nil
                                         readTypes:[NSSet setWithArray:readTypes] completion:nil];
于 2015-11-20T10:58:26.890 回答