diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.h b/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.h index 5cb0891bcfec2e07d51735cc97d69ded5ce8011c..3b45ade8c2f75c4de6d912588bed8599af0c68f7 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.h +++ b/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.h @@ -13,5 +13,7 @@ - (NSSet *)getReadPermsFromOptions:(NSArray *)options; - (NSSet *)getWritePermsFromOptions:(NSArray *)options; +- (HKObjectType *)getWritePermFromString:(NSString *)string; +- (NSString *)getAuthorizationStatusString:(HKAuthorizationStatus)status; @end diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.m b/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.m index 450c03381ec9296059aac661fab7dc4a81f0f6c2..6db624c107aa9991004376488385399a0ea850fd 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+TypesAndPermissions.m @@ -150,4 +150,18 @@ return writePermSet; } +- (HKObjectType *)getWritePermFromString:(NSString *)writePerm { + return [[self writePermsDict] objectForKey:writePerm]; +} +- (NSString *)getAuthorizationStatusString:(HKAuthorizationStatus)status { + switch (status) { + case HKAuthorizationStatusNotDetermined: + return @"NotDetermined"; + case HKAuthorizationStatusSharingDenied: + return @"SharingDenied"; + case HKAuthorizationStatusSharingAuthorized: + return @"SharingAuthorized"; + } +} + @end diff --git a/RCTAppleHealthKit/RCTAppleHealthKit.m b/RCTAppleHealthKit/RCTAppleHealthKit.m index ccc4c26d6b1e5f7e3421e5fc8507c49c624c4b72..e69e6314da8ab9c368e01e16937dbecca70775d6 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit.m @@ -268,6 +268,26 @@ RCT_EXPORT_METHOD(saveMindfulSession:(NSDictionary *)input callback:(RCTResponse } } +RCT_EXPORT_METHOD(authorizationStatusForType:(NSString *)type + resolver:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject +{ + self.healthStore = [[HKHealthStore alloc] init]; + + if ([HKHealthStore isHealthDataAvailable]) { + HKObjectType *objectType = [self getWritePermFromString:type]; + if (objectType == nil) { + reject(@"unknown write permission", nil, nil); + return; + } + + NSString *status = [self getAuthorizationStatusString:[self.healthStore authorizationStatusForType:objectType]]; + resolve(status); + } else { + reject(@"HealthKit data is not available", nil, nil); + } +}) + - (void)getModuleInfo:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback { NSDictionary *info = @{