diff --git a/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEvent.java b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEvent.java new file mode 100644 index 0000000..540d4fa --- /dev/null +++ b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEvent.java @@ -0,0 +1,15 @@ +package io.invertase.firebase.messaging; + +import com.facebook.react.bridge.ReadableMap; + +public interface ReactNativeFirebaseMessagingEvent { + + final class NotificationReceived implements ReactNativeFirebaseMessagingEvent { + + public final ReadableMap notification; + + public NotificationReceived(ReadableMap notification) { + this.notification = notification; + } + } +} diff --git a/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEventListener.java b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEventListener.java new file mode 100644 index 0000000..d7d000b --- /dev/null +++ b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEventListener.java @@ -0,0 +1,5 @@ +package io.invertase.firebase.messaging; + +public interface ReactNativeFirebaseMessagingEventListener { + void onReceiveEvent(ReactNativeFirebaseMessagingEvent event); +} diff --git a/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEventPublisher.java b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEventPublisher.java new file mode 100644 index 0000000..924814f --- /dev/null +++ b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingEventPublisher.java @@ -0,0 +1,27 @@ +package io.invertase.firebase.messaging; + +import java.util.HashSet; +import java.util.Set; + +public final class ReactNativeFirebaseMessagingEventPublisher { + public static final ReactNativeFirebaseMessagingEventPublisher INSTANCE = new ReactNativeFirebaseMessagingEventPublisher(); + + private final Set listeners = new HashSet<>(); + + private ReactNativeFirebaseMessagingEventPublisher() { + } + + public void addListener(ReactNativeFirebaseMessagingEventListener listener) { + listeners.add(listener); + } + + public void removeListener(ReactNativeFirebaseMessagingEventListener listener) { + listeners.remove(listener); + } + + public void sendEvent(ReactNativeFirebaseMessagingEvent event) { + for (ReactNativeFirebaseMessagingEventListener listener : listeners) { + listener.onReceiveEvent(event); + } + } +} diff --git a/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingReceiver.java b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingReceiver.java index cee80e8..9bd3bb8 100644 --- a/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingReceiver.java +++ b/node_modules/@react-native-firebase/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingReceiver.java @@ -12,6 +12,8 @@ import io.invertase.firebase.common.ReactNativeFirebaseEventEmitter; import io.invertase.firebase.common.SharedUtils; import java.util.HashMap; +import static io.invertase.firebase.messaging.ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap; + public class ReactNativeFirebaseMessagingReceiver extends BroadcastReceiver { private static final String TAG = "RNFirebaseMsgReceiver"; static HashMap notifications = new HashMap<>(); @@ -37,6 +39,10 @@ public class ReactNativeFirebaseMessagingReceiver extends BroadcastReceiver { .storeFirebaseMessage(remoteMessage); } + ReactNativeFirebaseMessagingEventPublisher.INSTANCE.sendEvent( + new ReactNativeFirebaseMessagingEvent.NotificationReceived( + remoteMessageToWritableMap(remoteMessage))); + // |-> --------------------- // App in Foreground // ------------------------ diff --git a/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+AppDelegate.m b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+AppDelegate.m index 9c3651d..cece964 100644 --- a/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+AppDelegate.m +++ b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+AppDelegate.m @@ -25,6 +25,7 @@ #import "RNFBMessaging+AppDelegate.h" #import "RNFBMessagingSerializer.h" +#import "RNFBMessagingConfig.h" @implementation RNFBMessagingAppDelegate @@ -152,7 +153,7 @@ - (void)application:(UIApplication *)application postNotificationName:@"RNFBMessagingDidReceiveRemoteNotification" object:userInfo]; - if (userInfo[@"gcm.message_id"]) { + if (RNFBMessagingConfig.sharedObject.processAllPushes || userInfo[@"gcm.message_id"]) { DLog(@"didReceiveRemoteNotification gcm.message_id was present %@", userInfo); if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) { diff --git a/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.m b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.m index e453851..e55e046 100644 --- a/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.m +++ b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessaging+UNUserNotificationCenter.m @@ -20,6 +20,7 @@ #import "RNFBJSON.h" #import "RNFBMessaging+UNUserNotificationCenter.h" #import "RNFBMessagingSerializer.h" +#import "RNFBMessagingConfig.h" @implementation RNFBMessagingUNUserNotificationCenter struct { @@ -127,7 +128,7 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center presentationOptions |= UNNotificationPresentationOptionAlert; } - if (notification.request.content.userInfo[@"gcm.message_id"]) { + if (RNFBMessagingConfig.sharedObject.processAllPushes || notification.request.content.userInfo[@"gcm.message_id"]) { NSDictionary *notificationDict = [RNFBMessagingSerializer notificationToDict:notification]; // Don't send an event if contentAvailable is true - application:didReceiveRemoteNotification @@ -152,7 +153,7 @@ - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { NSDictionary *remoteNotification = response.notification.request.content.userInfo; - if (remoteNotification[@"gcm.message_id"]) { + if (RNFBMessagingConfig.sharedObject.processAllPushes || remoteNotification[@"gcm.message_id"]) { NSDictionary *notificationDict = [RNFBMessagingSerializer remoteMessageUserInfoToDict:remoteNotification]; [[RNFBRCTEventEmitter shared] sendEventWithName:@"messaging_notification_opened" diff --git a/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessagingConfig.h b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessagingConfig.h new file mode 100644 index 0000000..ec2ed99 --- /dev/null +++ b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessagingConfig.h @@ -0,0 +1,9 @@ +#import + +@interface RNFBMessagingConfig : NSObject + +@property BOOL processAllPushes; + ++ (RNFBMessagingConfig *)sharedObject; + +@end \ No newline at end of file diff --git a/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessagingConfig.m b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessagingConfig.m new file mode 100644 index 0000000..a21df9b --- /dev/null +++ b/node_modules/@react-native-firebase/messaging/ios/RNFBMessaging/RNFBMessagingConfig.m @@ -0,0 +1,21 @@ +#import "RNFBMessagingConfig.h" + +@implementation RNFBMessagingConfig + ++ (RNFBMessagingConfig *)sharedObject { + static RNFBMessagingConfig *sharedClass = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + sharedClass = [[self alloc] init]; + }); + return sharedClass; +} + +- (id)init { + if (self = [super init]) { + self.processAllPushes = true; + } + return self; +} + +@end \ No newline at end of file