From 28fd70fb20570ae58df1f42f02eae4fdbf152802 Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Thu, 15 Apr 2021 22:18:59 -0700 Subject: [PATCH 1/8] fix(messaging): get notification object from store --- .../ReactNativeFirebaseMessagingModule.java | 33 ++++++++++--------- ...eactNativeFirebaseMessagingSerializer.java | 6 +++- .../ReactNativeFirebaseMessagingStore.java | 4 ++- ...ReactNativeFirebaseMessagingStoreImpl.java | 10 +++--- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java index 88b66da722..6e81e4788e 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java @@ -28,6 +28,7 @@ import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.ReadableMap; +import com.facebook.react.bridge.WritableMap; import com.google.android.gms.tasks.Tasks; import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.messaging.FirebaseMessaging; @@ -41,7 +42,7 @@ public class ReactNativeFirebaseMessagingModule extends ReactNativeFirebaseModule implements ActivityEventListener { private static final String TAG = "Messaging"; - RemoteMessage initialNotification = null; + ReadableMap initialNotification = null; private HashMap initialNotificationMap = new HashMap<>(); ReactNativeFirebaseMessagingModule(ReactApplicationContext reactContext) { @@ -49,17 +50,17 @@ public class ReactNativeFirebaseMessagingModule extends ReactNativeFirebaseModul reactContext.addActivityEventListener(this); } - private RemoteMessage popRemoteMessageFromMessagingStore(String messageId) { + private WritableMap popRemoteMessageMapFromMessagingStore(String messageId) { ReactNativeFirebaseMessagingStore messagingStore = ReactNativeFirebaseMessagingStoreHelper.getInstance().getMessagingStore(); - RemoteMessage remoteMessage = messagingStore.getFirebaseMessage(messageId); + WritableMap remoteMessageMap = messagingStore.getFirebaseMessage(messageId); messagingStore.clearFirebaseMessage(messageId); - return remoteMessage; + return remoteMessageMap; } @ReactMethod public void getInitialNotification(Promise promise) { if (initialNotification != null) { - promise.resolve(ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap(initialNotification)); + promise.resolve(initialNotification); initialNotification = null; return; } else { @@ -77,9 +78,10 @@ public void getInitialNotification(Promise promise) { if (messageId != null && initialNotificationMap.get(messageId) == null) { RemoteMessage remoteMessage = ReactNativeFirebaseMessagingReceiver.notifications.get(messageId); if (remoteMessage == null) { - remoteMessage = popRemoteMessageFromMessagingStore(messageId); - } - if (remoteMessage != null) { + promise.resolve(popRemoteMessageMapFromMessagingStore(messageId)); + initialNotificationMap.put(messageId, true); + return; + } else { promise.resolve(ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap(remoteMessage)); initialNotificationMap.put(messageId, true); return; @@ -216,18 +218,19 @@ public void onNewIntent(Intent intent) { if (messageId == null) messageId = intent.getExtras().getString("message_id"); if (messageId != null) { + ReactNativeFirebaseEventEmitter emitter = ReactNativeFirebaseEventEmitter.getSharedInstance(); RemoteMessage remoteMessage = ReactNativeFirebaseMessagingReceiver.notifications.get(messageId); - if (remoteMessage == null) { - remoteMessage = popRemoteMessageFromMessagingStore(messageId); - } - if (remoteMessage != null) { - initialNotification = remoteMessage; + if (remoteMessage == null) { + WritableMap remoteMessageMap = popRemoteMessageMapFromMessagingStore(messageId); + initialNotification = remoteMessageMap; + emitter.sendEvent(ReactNativeFirebaseMessagingSerializer.remoteMessageMapToEvent(remoteMessageMap, true)); + } else { + initialNotification = ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap(remoteMessage); ReactNativeFirebaseMessagingReceiver.notifications.remove(messageId); - - ReactNativeFirebaseEventEmitter emitter = ReactNativeFirebaseEventEmitter.getSharedInstance(); emitter.sendEvent(ReactNativeFirebaseMessagingSerializer.remoteMessageToEvent(remoteMessage, true)); } + ReactNativeFirebaseMessagingReceiver.notifications.remove(messageId); } } } diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java index 0036b033b3..33c88abb93 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java @@ -2,8 +2,8 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.facebook.react.bridge.WritableMap; +import com.facebook.react.bridge.ReadableMapKeySetIterator; import com.google.firebase.messaging.RemoteMessage; import io.invertase.firebase.common.ReactNativeFirebaseEvent; import io.invertase.firebase.common.SharedUtils; @@ -50,6 +50,10 @@ public static ReactNativeFirebaseEvent remoteMessageToEvent(RemoteMessage remote return new ReactNativeFirebaseEvent(openEvent ? EVENT_NOTIFICATION_OPENED : EVENT_MESSAGE_RECEIVED, remoteMessageToWritableMap(remoteMessage)); } + public static ReactNativeFirebaseEvent remoteMessageMapToEvent(WritableMap remoteMessageMap, Boolean openEvent) { + return new ReactNativeFirebaseEvent(openEvent ? EVENT_NOTIFICATION_OPENED : EVENT_MESSAGE_RECEIVED, remoteMessageMap); + } + public static ReactNativeFirebaseEvent newTokenToTokenEvent(String newToken) { WritableMap eventBody = Arguments.createMap(); eventBody.putString(KEY_TOKEN, newToken); diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java index c7effba925..fca3bf47f8 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java @@ -2,10 +2,12 @@ import com.google.firebase.messaging.RemoteMessage; +import com.facebook.react.bridge.WritableMap; + public interface ReactNativeFirebaseMessagingStore { void storeFirebaseMessage(RemoteMessage remoteMessage); - RemoteMessage getFirebaseMessage(String remoteMessageId); + WritableMap getFirebaseMessage(String remoteMessageId); void clearFirebaseMessage(String remoteMessageId); } diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java index 94c2b16e12..7e43089877 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java @@ -48,15 +48,15 @@ public void storeFirebaseMessage(RemoteMessage remoteMessage) { } @Override - public RemoteMessage getFirebaseMessage(String remoteMessageId) { + public WritableMap getFirebaseMessage(String remoteMessageId) { String remoteMessageString = UniversalFirebasePreferences.getSharedInstance().getStringValue(remoteMessageId, null); if (remoteMessageString != null) { // Log.d("getFirebaseMessage", remoteMessageString); try { - WritableMap readableMap = jsonToReact(new JSONObject(remoteMessageString)); - readableMap.putString("to", remoteMessageId);//fake to - return remoteMessageFromReadableMap(readableMap); - } catch (JSONException e) { + WritableMap remoteMessageMap = jsonToReact(new JSONObject(remoteMessageString)); + remoteMessageMap.putString("to", remoteMessageId);//fake to + return remoteMessageMap; + } catch (JSONException e) { e.printStackTrace(); } } From 0074aad28bc896626b53b2b0b2f9fe875cbdfb43 Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Thu, 15 Apr 2021 22:32:55 -0700 Subject: [PATCH 2/8] for testing --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 1373cfeade..233cf6ed4a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,8 @@ "name": "react-native-firebase", "private": true, "scripts": { - "version": "node ./scripts/version.js", +// "version": "node ./scripts/version.js", + "version": "11.2.0", "prepare": "yarn run lerna:link && lerna run prepare --parallel", "build:all:clean": "lerna run build:clean", "build:all:build": "lerna run build", From 2f9a3497f37b23bad0f3faa350d2c5e7f459d846 Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Thu, 15 Apr 2021 22:33:24 -0700 Subject: [PATCH 3/8] fix not comment --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 233cf6ed4a..69a5d7dab5 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,6 @@ "name": "react-native-firebase", "private": true, "scripts": { -// "version": "node ./scripts/version.js", "version": "11.2.0", "prepare": "yarn run lerna:link && lerna run prepare --parallel", "build:all:clean": "lerna run build:clean", From 0f6980936fe3240327e29bdd6c8aa202cf04dbe3 Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Thu, 15 Apr 2021 22:35:41 -0700 Subject: [PATCH 4/8] oops not the script! --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 69a5d7dab5..9968f5f018 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,9 @@ { "name": "react-native-firebase", "private": true, + "version": "11.2.0", "scripts": { - "version": "11.2.0", + "version": "node ./scripts/version.js", "prepare": "yarn run lerna:link && lerna run prepare --parallel", "build:all:clean": "lerna run build:clean", "build:all:build": "lerna run build", From 3b85b083b76108be698ec2b20e02b932c9949ac6 Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Thu, 15 Apr 2021 23:10:57 -0700 Subject: [PATCH 5/8] remove testing --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 9968f5f018..1373cfeade 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { "name": "react-native-firebase", "private": true, - "version": "11.2.0", "scripts": { "version": "node ./scripts/version.js", "prepare": "yarn run lerna:link && lerna run prepare --parallel", From cedce833f92eae86c8dc261075905d0d3ca79d88 Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Fri, 16 Apr 2021 15:58:48 -0700 Subject: [PATCH 6/8] cleanup based on mike's comments --- .../ReactNativeFirebaseMessagingModule.java | 31 +++++++++++-------- ...eactNativeFirebaseMessagingSerializer.java | 2 +- .../ReactNativeFirebaseMessagingStore.java | 5 ++- ...ReactNativeFirebaseMessagingStoreImpl.java | 12 ++++++- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java index 6e81e4788e..d8ee3498d3 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java @@ -52,7 +52,7 @@ public class ReactNativeFirebaseMessagingModule extends ReactNativeFirebaseModul private WritableMap popRemoteMessageMapFromMessagingStore(String messageId) { ReactNativeFirebaseMessagingStore messagingStore = ReactNativeFirebaseMessagingStoreHelper.getInstance().getMessagingStore(); - WritableMap remoteMessageMap = messagingStore.getFirebaseMessage(messageId); + WritableMap remoteMessageMap = messagingStore.getFirebaseMessageMap(messageId); messagingStore.clearFirebaseMessage(messageId); return remoteMessageMap; } @@ -73,16 +73,18 @@ public void getInitialNotification(Promise promise) { // messageId can be either one... String messageId = intent.getExtras().getString("google.message_id"); if (messageId == null) messageId = intent.getExtras().getString("message_id"); - + // only handle non-consumed initial notifications if (messageId != null && initialNotificationMap.get(messageId) == null) { + WritableMap remoteMessageMap; RemoteMessage remoteMessage = ReactNativeFirebaseMessagingReceiver.notifications.get(messageId); if (remoteMessage == null) { - promise.resolve(popRemoteMessageMapFromMessagingStore(messageId)); - initialNotificationMap.put(messageId, true); - return; + remoteMessageMap = popRemoteMessageMapFromMessagingStore(messageId); } else { - promise.resolve(ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap(remoteMessage)); + remoteMessageMap = ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap(remoteMessage); + } + if (remoteMessageMap != null){ + promise.resolve(remoteMessageMap); initialNotificationMap.put(messageId, true); return; } @@ -218,19 +220,22 @@ public void onNewIntent(Intent intent) { if (messageId == null) messageId = intent.getExtras().getString("message_id"); if (messageId != null) { - ReactNativeFirebaseEventEmitter emitter = ReactNativeFirebaseEventEmitter.getSharedInstance(); RemoteMessage remoteMessage = ReactNativeFirebaseMessagingReceiver.notifications.get(messageId); + WritableMap remoteMessageMap; if (remoteMessage == null) { - WritableMap remoteMessageMap = popRemoteMessageMapFromMessagingStore(messageId); - initialNotification = remoteMessageMap; - emitter.sendEvent(ReactNativeFirebaseMessagingSerializer.remoteMessageMapToEvent(remoteMessageMap, true)); + remoteMessageMap = popRemoteMessageMapFromMessagingStore(messageId); } else { - initialNotification = ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap(remoteMessage); + remoteMessageMap = ReactNativeFirebaseMessagingSerializer.remoteMessageToWritableMap(remoteMessage); + } + + if (remoteMessageMap != null){ + initialNotification = remoteMessageMap; ReactNativeFirebaseMessagingReceiver.notifications.remove(messageId); - emitter.sendEvent(ReactNativeFirebaseMessagingSerializer.remoteMessageToEvent(remoteMessage, true)); + + ReactNativeFirebaseEventEmitter emitter = ReactNativeFirebaseEventEmitter.getSharedInstance(); + emitter.sendEvent(ReactNativeFirebaseMessagingSerializer.remoteMessageMapToEvent(remoteMessageMap, true)); } - ReactNativeFirebaseMessagingReceiver.notifications.remove(messageId); } } } diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java index 33c88abb93..f6ad52d679 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingSerializer.java @@ -2,8 +2,8 @@ import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.ReadableMapKeySetIterator; +import com.facebook.react.bridge.WritableMap; import com.google.firebase.messaging.RemoteMessage; import io.invertase.firebase.common.ReactNativeFirebaseEvent; import io.invertase.firebase.common.SharedUtils; diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java index fca3bf47f8..ac2a4318dd 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStore.java @@ -7,7 +7,10 @@ public interface ReactNativeFirebaseMessagingStore { void storeFirebaseMessage(RemoteMessage remoteMessage); - WritableMap getFirebaseMessage(String remoteMessageId); + @Deprecated + RemoteMessage getFirebaseMessage(String remoteMessageId); + + WritableMap getFirebaseMessageMap(String remoteMessageId); void clearFirebaseMessage(String remoteMessageId); } diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java index 7e43089877..fb460be624 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java @@ -47,8 +47,18 @@ public void storeFirebaseMessage(RemoteMessage remoteMessage) { } } + @Deprecated @Override - public WritableMap getFirebaseMessage(String remoteMessageId) { + public RemoteMessage getFirebaseMessage(String remoteMessageId) { + WritableMap messageMap = getFirebaseMessageMap(remoteMessageId); + if (messageMap != null){ + return remoteMessageFromReadableMap(messageMap); + } + return null; + } + + @Override + public WritableMap getFirebaseMessageMap(String remoteMessageId) { String remoteMessageString = UniversalFirebasePreferences.getSharedInstance().getStringValue(remoteMessageId, null); if (remoteMessageString != null) { // Log.d("getFirebaseMessage", remoteMessageString); From 6a341f1d3ce91706c5268722a9a683dc2fb00d79 Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Fri, 16 Apr 2021 16:03:13 -0700 Subject: [PATCH 7/8] minor cleanups --- .../firebase/messaging/ReactNativeFirebaseMessagingModule.java | 2 +- .../messaging/ReactNativeFirebaseMessagingStoreImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java index d8ee3498d3..7196021b11 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingModule.java @@ -73,7 +73,7 @@ public void getInitialNotification(Promise promise) { // messageId can be either one... String messageId = intent.getExtras().getString("google.message_id"); if (messageId == null) messageId = intent.getExtras().getString("message_id"); - + // only handle non-consumed initial notifications if (messageId != null && initialNotificationMap.get(messageId) == null) { WritableMap remoteMessageMap; diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java index fb460be624..bf0d79f31d 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java @@ -50,7 +50,7 @@ public void storeFirebaseMessage(RemoteMessage remoteMessage) { @Deprecated @Override public RemoteMessage getFirebaseMessage(String remoteMessageId) { - WritableMap messageMap = getFirebaseMessageMap(remoteMessageId); + ReadableMap messageMap = getFirebaseMessageMap(remoteMessageId); if (messageMap != null){ return remoteMessageFromReadableMap(messageMap); } From 1fa1d45b63804aeb12d58ae447b4fe9f8d4713ba Mon Sep 17 00:00:00 2001 From: Mark Corner Date: Fri, 16 Apr 2021 16:11:20 -0700 Subject: [PATCH 8/8] also need this --- .../messaging/ReactNativeFirebaseMessagingStoreImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java index bf0d79f31d..c0045d7c2c 100644 --- a/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java +++ b/packages/messaging/android/src/main/java/io/invertase/firebase/messaging/ReactNativeFirebaseMessagingStoreImpl.java @@ -1,5 +1,6 @@ package io.invertase.firebase.messaging; +import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.WritableMap; import com.google.firebase.messaging.RemoteMessage;