diff --git a/android/src/main/java/com/evollu/react/fcm/FIRMessagingModule.java b/android/src/main/java/com/evollu/react/fcm/FIRMessagingModule.java index a50f0bbb1887c75588fbd40b23e55c0d7896f54d..1b5077ac1c619f8e09c6a27696c8f7a371937b03 100644 --- a/android/src/main/java/com/evollu/react/fcm/FIRMessagingModule.java +++ b/android/src/main/java/com/evollu/react/fcm/FIRMessagingModule.java @@ -86,6 +86,31 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li } } + @ReactMethod + public void getEntityFCMToken(Promise promise) { + try { + String senderId = FirebaseApp.getInstance().getOptions().getGcmSenderId(); + String token = FirebaseInstanceId.getInstance().getToken(senderId, "FCM"); + Log.d(TAG, "Firebase token: " + token); + promise.resolve(token); + } catch (Throwable e) { + e.printStackTrace(); + promise.reject(null,e.getMessage()); + } + } + + @ReactMethod + public void deleteEntityFCMToken(Promise promise) { + try { + String senderId = FirebaseApp.getInstance().getOptions().getGcmSenderId(); + FirebaseInstanceId.getInstance().deleteToken(senderId, "FCM"); + promise.resolve(null); + } catch (Throwable e) { + e.printStackTrace(); + promise.reject(null,e.getMessage()); + } + } + @ReactMethod public void deleteInstanceId(Promise promise){ try { @@ -307,4 +332,3 @@ public class FIRMessagingModule extends ReactContextBaseJavaModule implements Li sendEvent("FCMNotificationReceived", parseIntent(intent)); } } - diff --git a/index.js b/index.js index 7de6a6e77e8833954f5e35ee6c4e26bc2d954eae..731fbab2f25f832a076d4d7dc019848c555f3acc 100644 --- a/index.js +++ b/index.js @@ -68,6 +68,14 @@ FCM.getFCMToken = () => { return RNFIRMessaging.getFCMToken(); }; +FCM.getEntityFCMToken = () => { + return RNFIRMessaging.getEntityFCMToken(); +} + +FCM.deleteEntityFCMToken = () => { + return RNFIRMessaging.deleteEntityFCMToken(); +} + FCM.deleteInstanceId = () =>{ return RNFIRMessaging.deleteInstanceId(); }; diff --git a/ios/RNFIRMessaging.m b/ios/RNFIRMessaging.m index 524dbfb1191549ab63a7dc84225c0e19f496ec0e..2b228aee91449a67ec295878488c4f3ea6deb37e 100644 --- a/ios/RNFIRMessaging.m +++ b/ios/RNFIRMessaging.m @@ -140,7 +140,7 @@ typedef NS_ENUM(NSUInteger, UNNotificationActionType) { + (UNNotificationAction *) UNNotificationAction:(id)json { NSDictionary *details = [self NSDictionary:json]; - + NSString *identifier = [RCTConvert NSString: details[@"id"]]; NSString *title = [RCTConvert NSString: details[@"title"]]; UNNotificationActionOptions options = [RCTConvert UNNotificationActionOptions: details[@"options"]]; @@ -152,11 +152,11 @@ typedef NS_ENUM(NSUInteger, UNNotificationActionType) { return [UNTextInputNotificationAction actionWithIdentifier:identifier title:title options:options textInputButtonTitle:textInputButtonTitle textInputPlaceholder:textInputPlaceholder]; } - + return [UNNotificationAction actionWithIdentifier:identifier title:title options:options]; - + } RCT_ENUM_CONVERTER(UNNotificationActionType, (@{ @@ -180,9 +180,9 @@ RCT_MULTI_ENUM_CONVERTER(UNNotificationActionOptions, (@{ + (UNNotificationCategory *) UNNotificationCategory:(id)json { NSDictionary *details = [self NSDictionary:json]; - + NSString *identifier = [RCTConvert NSString: details[@"id"]]; - + NSMutableArray *actions = [[NSMutableArray alloc] init]; for (NSDictionary *actionDict in details[@"actions"]) { [actions addObject:[RCTConvert UNNotificationAction:actionDict]]; @@ -261,7 +261,7 @@ RCT_EXPORT_MODULE(); if ([response isKindOfClass:UNTextInputNotificationResponse.class]) { [data setValue:[(UNTextInputNotificationResponse *)response userText] forKey:@"_userText"]; } - + NSDictionary *userInfo = @{@"data": data, @"completionHandler": completionHandler}; static dispatch_once_t onceToken; @@ -314,7 +314,7 @@ RCT_EXPORT_MODULE(); -(void) addListener:(NSString *)eventName { [super addListener:eventName]; - + if([eventName isEqualToString:FCMNotificationReceived] && initialNotificationActionResponse) { [[NSNotificationCenter defaultCenter] postNotificationName:FCMNotificationReceived object:self userInfo:[initialNotificationActionResponse copy]]; } @@ -358,16 +358,47 @@ RCT_EXPORT_METHOD(getFCMToken:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromi resolve([FIRMessaging messaging].FCMToken); } +RCT_EXPORT_METHOD(getEntityFCMToken:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) +{ + FIROptions *options = FIROptions.defaultOptions; + NSString *entity = options.GCMSenderID; + NSData * deviceToken = [FIRMessaging messaging].APNSToken; + + [[FIRInstanceID instanceID]tokenWithAuthorizedEntity:entity scope:kFIRInstanceIDScopeFirebaseMessaging options:@{@"apns_token": deviceToken} handler:^(NSString * _Nullable token, NSError * _Nullable error) { + + if (error != nil) { + reject([NSString stringWithFormat:@"%ld",error.code],error.localizedDescription,nil); + } else { + resolve(token); + } + }]; +} + +RCT_EXPORT_METHOD(deleteEntityFCMToken:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) +{ + FIROptions *options = FIROptions.defaultOptions;; + NSString *entity = options.GCMSenderID; + + [[FIRInstanceID instanceID]deleteTokenWithAuthorizedEntity:entity scope:kFIRInstanceIDScopeFirebaseMessaging handler:^(NSError * _Nullable error) { + + if (error != nil) { + reject([NSString stringWithFormat:@"%ld",error.code],error.localizedDescription,nil); + } else { + resolve(nil); + } + }]; +} + RCT_EXPORT_METHOD(deleteInstanceId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - [[FIRInstanceID instanceID]deleteIDWithHandler:^(NSError * _Nullable error) { - - if (error != nil) { - reject([NSString stringWithFormat:@"%ld",error.code],error.localizedDescription,nil); - } else { - resolve(nil); - } - }]; + [[FIRInstanceID instanceID]deleteIDWithHandler:^(NSError * _Nullable error) { + + if (error != nil) { + reject([NSString stringWithFormat:@"%ld",error.code],error.localizedDescription,nil); + } else { + resolve(nil); + } + }]; } - (void)messaging:(nonnull FIRMessaging *)messaging didRefreshRegistrationToken:(nonnull NSString *)fcmToken {