2

我似乎无法捕获和处理取消 HealthKit 权限的用户。完成块总是返回成功和零错误。

[[DataManager healthStore] requestAuthorizationToShareTypes:dataTypesToWrite
                                                  readTypes:dataTypesToRead
                                                 completion:^(BOOL success, NSError *error)
 {
     if (!success)
     {
         NSLog(@"You didn't allow HealthKit to access these read/write data types. In your app, try to handle this error gracefully when a user decides not to provide access. The error was: %@. If you're using a simulator, try it on a device.", error);
     }

     if (completion)
     {
         completion(success,error);
     }
 }];
4

3 回答 3

4

成功参数不指示您的应用程序是否获得了所请求的授权。它仅指示是否成功提示用户授权(如果需要提示)。如果用户取消提示或由于某种原因无法显示提示,则成功参数将为 NO 并且错误将为非 nil。

另请注意,根据设计,无法查询应用程序是否具有对某个类型的读取访问权限。您只能使用-[HKHealthStore authorizationStatusForType:] API 查询应用程序是否有权保存某个类型的对象。

于 2014-08-30T20:41:48.633 回答
2

这确实是一个错误。它已在 iOS 8 Golden Master 种子中修复。

于 2014-09-09T22:12:54.677 回答
-1

如果您想知道是否为 healthkit 授予了任何权限,您可以使用此方法。

-(BOOL) anyPermissionIsGiven {

NSMutableArray * authArray = [[NSMutableArray alloc]init];

[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietarySodium]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryCarbohydrates]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryFiber]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryEnergyConsumed]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryProtein]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryVitaminA]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryVitaminB6]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryVitaminC]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryVitaminE]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryVitaminK]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryCalcium]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryThiamin]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryFolate]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryPhosphorus]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryMagnesium]];
[authArray addObject:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryPotassium]];

BOOL anyPermissionGiven = NO;
for (HKQuantityType * quantityType in authArray) {
    if([self.healthStore authorizationStatusForType:quantityType] == HKAuthorizationStatusSharingAuthorized) {
        anyPermissionGiven = YES;
        break;
    }
}

return anyPermissionGiven;

}

于 2016-06-28T07:16:59.883 回答