HealthKit 授权状态始终为 1

Posted

技术标签:

【中文标题】HealthKit 授权状态始终为 1【英文标题】:HealthKit Authorisation Status is always 1 【发布时间】:2015-03-16 12:19:03 【问题描述】:

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

【问题讨论】:

我看到了同样的行为。我确认在 Health 应用程序中为我的身高应用程序启用了共享,但来自 authorizationStatusForType: 的响应仍然是 HKAuthorizationStatusSharingDenied。这是在我的模拟器中。你试过设备吗? 是的。它在设备上是一样的。在下次更新中寻找修复。 @iranjith4 你能找到解决这个问题的方法吗?每次即使授予许可,我都面临同样的问题,是否有任何解决方法? @PrashantTukadiya 据我所知,无法获得状态。苹果故意否认。更多信息developer.apple.com/library/ios/documentation/HealthKit/…: 【参考方案1】:

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

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

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

【讨论】:

这绝对是零意义。感谢您为我们翻译 :) 非常有意义。用户的隐私比您的应用更重要 ;-) @cafedeichi 它是明确设计的,所以你不能。 @Allan 所以没有办法找到用户是否授予权限? 解决了我的问题。【参考方案2】:
NSArray *readTypes = @[[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierFlightsClimbed],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]];

[self.healthStore requestAuthorizationToShareTypes:nil
                                         readTypes:[NSSet setWithArray:readTypes] completion:nil];

【讨论】:

以上是关于HealthKit 授权状态始终为 1的主要内容,如果未能解决你的问题,请参考以下文章

HKMetadataKeyTimeZone 对于由苹果的 Health App - HealthKit - iOS 创建的健康数据始终为零

HKMetadataKeyTimeZone 对于由苹果的 Health App - HealthKit - iOS 创建的健康数据始终为零

授权给 HealthKit 时,错误 '(_, _) -> Void' 不能转换为 'HealthManager'

授权给 HealthKit 时,错误 '(_, _) -> Void' 不能转换为 'HealthManager'

使用 SwiftUI 和 Combine 根据授权状态有条件地显示视图?

HealthKit 授权已授予并在模拟器上工作,但不在实际设备上