diff --git a/packages/in-app-messaging/android/src/main/java/io/invertase/firebase/fiam/UniversalFirebaseFiamModule.java b/packages/in-app-messaging/android/src/main/java/io/invertase/firebase/fiam/UniversalFirebaseFiamModule.java index 69007b1941..370246d7a1 100644 --- a/packages/in-app-messaging/android/src/main/java/io/invertase/firebase/fiam/UniversalFirebaseFiamModule.java +++ b/packages/in-app-messaging/android/src/main/java/io/invertase/firebase/fiam/UniversalFirebaseFiamModule.java @@ -46,6 +46,13 @@ Task setMessagesDisplaySuppressed(Boolean enabled) { }); } + Task triggerEvent(String eventId) { + return Tasks.call(() -> { + FirebaseInAppMessaging.getInstance().triggerEvent(eventId); + return null; + }); + } + @Override public Map getConstants() { final Map constants = new HashMap<>(); diff --git a/packages/in-app-messaging/android/src/reactnative/java/io/invertase/firebase/fiam/ReactNativeFirebaseFiamModule.java b/packages/in-app-messaging/android/src/reactnative/java/io/invertase/firebase/fiam/ReactNativeFirebaseFiamModule.java index 31334cef15..af6ff34f31 100644 --- a/packages/in-app-messaging/android/src/reactnative/java/io/invertase/firebase/fiam/ReactNativeFirebaseFiamModule.java +++ b/packages/in-app-messaging/android/src/reactnative/java/io/invertase/firebase/fiam/ReactNativeFirebaseFiamModule.java @@ -55,6 +55,17 @@ public void setMessagesDisplaySuppressed(Boolean enabled, Promise promise) { }); } + @ReactMethod + public void triggerEvent(String eventId, Promise promise) { + module.triggerEvent(eventId).addOnCompleteListener(task -> { + if (task.isSuccessful()) { + promise.resolve(task.getResult()); + } else { + rejectPromiseWithExceptionMap(promise, task.getException()); + } + }); + } + @Override public Map getConstants() { return module.getConstants(); diff --git a/packages/in-app-messaging/e2e/fiam.e2e.js b/packages/in-app-messaging/e2e/fiam.e2e.js index 4a827e063f..00c22d2b39 100644 --- a/packages/in-app-messaging/e2e/fiam.e2e.js +++ b/packages/in-app-messaging/e2e/fiam.e2e.js @@ -84,4 +84,11 @@ describe('inAppMessaging()', () => { } }); }); + + xdescribe('triggerEvent()', () => { + it('no exceptions thrown', async () => { + await device.launchApp(); + await firebase.inAppMessaging().triggerEvent('eventName'); + }); + }); }); diff --git a/packages/in-app-messaging/ios/RNFBFiam/RNFBFiamModule.m b/packages/in-app-messaging/ios/RNFBFiam/RNFBFiamModule.m index a5f319ba70..780326a70d 100644 --- a/packages/in-app-messaging/ios/RNFBFiam/RNFBFiamModule.m +++ b/packages/in-app-messaging/ios/RNFBFiam/RNFBFiamModule.m @@ -63,4 +63,15 @@ + (BOOL)requiresMainQueueSetup { resolve([NSNull null]); } + RCT_EXPORT_METHOD(triggerEvent: + (NSString*) eventId + resolver: + (RCTPromiseResolveBlock) resolve + rejecter: + (RCTPromiseRejectBlock) reject) { + [[FIRInAppMessaging inAppMessaging] triggerEvent: eventId]; + resolve([NSNull null]); + } + + @end diff --git a/packages/in-app-messaging/lib/index.d.ts b/packages/in-app-messaging/lib/index.d.ts index 6aff831e18..28bd6aaf06 100644 --- a/packages/in-app-messaging/lib/index.d.ts +++ b/packages/in-app-messaging/lib/index.d.ts @@ -130,6 +130,20 @@ export namespace FirebaseInAppMessagingTypes { * @param enabled Whether automatic data collection is enabled. */ setAutomaticDataCollectionEnabled(enabled: boolean): Promise; + + /** + * Trigger in-app messages programmatically + * + * #### Example + * + * ```js + * // Suppress messages + * await firebase.inAppMessaging().triggerEvent("exampleTrigger"); + * ``` + * + * @param eventId The id of the event. + */ + triggerEvent(eventId: string): Promise; } } diff --git a/packages/in-app-messaging/lib/index.js b/packages/in-app-messaging/lib/index.js index 02b4ebb16c..366c76dcb4 100644 --- a/packages/in-app-messaging/lib/index.js +++ b/packages/in-app-messaging/lib/index.js @@ -15,7 +15,7 @@ * */ -import { isBoolean } from '@react-native-firebase/app/lib/common'; +import { isBoolean, isString } from '@react-native-firebase/app/lib/common'; import { createModuleNamespace, FirebaseModule, @@ -65,6 +65,13 @@ class FirebaseFiamModule extends FirebaseModule { this._isAutomaticDataCollectionEnabled = enabled; return this.native.setAutomaticDataCollectionEnabled(enabled); } + + triggerEvent(eventId) { + if (!isString(eventId)) { + throw new Error("firebase.inAppMessaging().triggerEvent(*) 'eventId' must be a string."); + } + return this.native.triggerEvent(eventId); + } } // import { SDK_VERSION } from '@react-native-firebase/in-app-messaging';