Karthick Vadivel
Karthick Vadivel

Reputation: 431

requestAuthorizationToShareTypes method not displaying Permissions prompt in iOS 8 Xcode 6

-(void)viewDidAppear:(BOOL)animated
{

[super viewDidAppear:animated];
if ([HKHealthStore isHealthDataAvailable]){
    NSSet *writeDataTypes = [self dataTypesToWrite];
    NSSet *readDataTypes = [self dataTypesToRead];

    [self.healthStore requestAuthorizationToShareTypes:writeDataTypes readTypes:readDataTypes completion:^(BOOL success, NSError *error) {

        NSLog(@"%s",__func__);
        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);
            return;
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            // Update the user interface based on the current user's health information.
            NSLog(@"=========================== %s",__func__);
        });
    }];
}


}

requestAuthorizationToShareTypes does not calling back completion method.

Upvotes: 2

Views: 2551

Answers (2)

perrynow
perrynow

Reputation: 56

I had a similar issue with the permissions box not appearing and hadn't set up the HKHealthStore properly, putting this beforehand fixed it for me

self.healthStore = [[HKHealthStore alloc] init];

Upvotes: 4

owenfi
owenfi

Reputation: 2641

Here is a sample implementation that returns types instead of strings as described in the comment section.

-(NSSet*)datatypesToWrite {

   NSArray *quantityTypes =
   @[HKQuantityTypeIdentifierHeartRate,
     HKQuantityTypeIdentifierBodyTemperature,
     HKQuantityTypeIdentifierBloodPressureSystolic,
     HKQuantityTypeIdentifierBloodPressureDiastolic,
     HKQuantityTypeIdentifierRespiratoryRate];

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

   for (NSString *identifier in quantityTypes) {
     HKQuantityType *quantType =
      [HKObjectType quantityTypeForIdentifier:identifier];
     [hkTypes addObject:quantType];
   }

   // Make sure the types are of the correct style (Quantity, Category, Etc.)
   HKCategoryType *catType =
    [HKObjectType categoryTypeForIdentifier:HKCategoryTypeIdentifierSleepAnalysis];
   [hkTypes addObject:catType];

   return [[NSSet alloc] initWithArray:hkTypes];
}

Each time you request new types for the first time the modal permissions dialog will show up (but it won't show up again if you re-prompt for permissions not granted). Apple's guidelines are to prompt for everything you might need, but it feels a bit against best practices to me to request 12 types up front if I know somebody only asked to save into a few of them.

Upvotes: 2

Related Questions