From d22ae3e5f3cab52da1b45f4b4948e56c4e0a223b Mon Sep 17 00:00:00 2001 From: Ishita Gambhir Date: Thu, 11 Sep 2025 06:49:03 +0530 Subject: [PATCH 1/3] fix Message class bridge inconsistencies --- .../messaging/__tests__/MessagingTests.ts | 12 ++-- .../messaging/RCTAEPMessagingModule.java | 6 +- packages/messaging/ios/src/RCTAEPMessaging.mm | 19 ++++++ .../messaging/ios/src/RCTAEPMessaging.swift | 64 ++++++++----------- 4 files changed, 56 insertions(+), 45 deletions(-) diff --git a/packages/messaging/__tests__/MessagingTests.ts b/packages/messaging/__tests__/MessagingTests.ts index c27edfe4..a826a43b 100644 --- a/packages/messaging/__tests__/MessagingTests.ts +++ b/packages/messaging/__tests__/MessagingTests.ts @@ -45,7 +45,7 @@ describe('Messaging', () => { let id = 'id'; let autoTrack = true; let message = new Message({id, autoTrack}); - await message.setAutoTrack(false); + message.setAutoTrack(false); expect(spy).toHaveBeenCalledWith(id, false); }); @@ -54,7 +54,7 @@ describe('Messaging', () => { let id = 'id'; let autoTrack = true; let message = new Message({id, autoTrack}); - await message.show(); + message.show(); expect(spy).toHaveBeenCalledWith(id); }); @@ -63,7 +63,7 @@ describe('Messaging', () => { let id = 'id'; let autoTrack = true; let message = new Message({id, autoTrack}); - await message.dismiss(true); + message.dismiss(true); expect(spy).toHaveBeenCalledWith(id, true); }); @@ -74,7 +74,7 @@ describe('Messaging', () => { let message = new Message({id, autoTrack}); let interaction = 'display'; let eventType = MessagingEdgeEventType.DISPLAY; - await message.track(interaction, eventType); + message.track(interaction, eventType); expect(spy).toHaveBeenCalledWith(id, interaction, eventType); }); @@ -83,7 +83,7 @@ describe('Messaging', () => { let id = 'id'; let autoTrack = true; let message = new Message({id, autoTrack}); - await message.clear(); + message.clear(); expect(spy).toHaveBeenCalledWith(id); }); @@ -94,7 +94,7 @@ describe('Messaging', () => { let message = new Message({id, autoTrack}); let handlerName = 'handlerName'; let handler = jest.fn(); - await message.handleJavascriptMessage(handlerName, handler); + message.handleJavascriptMessage(handlerName, handler); expect(spy).toHaveBeenCalledWith(id, handlerName); }); diff --git a/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java b/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java index 815cdbc8..6da3a2d6 100644 --- a/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java +++ b/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java @@ -204,8 +204,12 @@ public void clear(final String messageId) { } } + // dismiss needs to accept a boolean parameter to suppress autoTrack - + // to maintain parity with the function signature on react native side, + // as iOS message.dismiss() accepts a boolean parameter to suppress autoTrack + // but on android side, message.dismiss() does not accept any parameters @ReactMethod - public void dismiss(final String messageId) { + public void dismiss(final String messageId, final boolean suppressAutoTrack) { if (messageId != null && messageCache.get(messageId) != null) { messageCache.get(messageId).dismiss(); } diff --git a/packages/messaging/ios/src/RCTAEPMessaging.mm b/packages/messaging/ios/src/RCTAEPMessaging.mm index 8c85ca9b..05efa14f 100644 --- a/packages/messaging/ios/src/RCTAEPMessaging.mm +++ b/packages/messaging/ios/src/RCTAEPMessaging.mm @@ -68,4 +68,23 @@ @interface RCT_EXTERN_MODULE (RCTAEPMessaging, RCTEventEmitter) : (RCTPromiseResolveBlock)resolve withRejecter : (RCTPromiseRejectBlock)reject); +RCT_EXTERN_METHOD(setAutoTrack + : (NSString *)messageId autoTrack + : (BOOL)autoTrack); + +RCT_EXTERN_METHOD(show + : (NSString *)messageId); + +RCT_EXTERN_METHOD(dismiss + : (NSString *)messageId suppressAutoTrack + : (BOOL)suppressAutoTrack); + +RCT_EXTERN_METHOD(track + : (NSString *)messageId interaction + : (NSString *)interaction eventType + : (NSInteger)eventType); + +RCT_EXTERN_METHOD(clear + : (NSString *)messageId); + @end diff --git a/packages/messaging/ios/src/RCTAEPMessaging.swift b/packages/messaging/ios/src/RCTAEPMessaging.swift index ee66f538..7fec5f7d 100644 --- a/packages/messaging/ios/src/RCTAEPMessaging.swift +++ b/packages/messaging/ios/src/RCTAEPMessaging.swift @@ -133,87 +133,75 @@ public class RCTAEPMessaging: RCTEventEmitter, MessagingDelegate { /// Message Class Methods @objc - func clearMessage( - _ id: String, - withResolver resolve: @escaping RCTPromiseResolveBlock, - withRejecter reject: @escaping RCTPromiseRejectBlock + func clear( + _ id: String ) { let msg = messageCache[id] if msg != nil { messageCache.removeValue(forKey: msg!.id) - resolve(nil) + print("clear: \(id) removed") + } else { + print("clear: \(id) not found") } - reject(Constants.CACHE_MISS, nil, nil) } @objc - func dismissMessage( + func dismiss( _ id: String, - withSuppressAutoTrack suppressAutoTrack: Bool, - withResolver resolve: @escaping RCTPromiseResolveBlock, - withRejecter reject: @escaping RCTPromiseRejectBlock + withSuppressAutoTrack suppressAutoTrack: Bool ) { let msg = messageCache[id] if msg != nil { msg!.dismiss(suppressAutoTrack: suppressAutoTrack) - resolve(nil) - return + print("dismiss: \(id) to \(suppressAutoTrack)") + } else { + print("dismiss: \(id) not found") } - reject(Constants.CACHE_MISS, nil, nil) } @objc func setAutoTrack( _ id: String, - withSuppressAutoTrack suppressAutoTrack: Bool, - withResolver resolve: @escaping RCTPromiseResolveBlock, - withRejecter reject: @escaping RCTPromiseRejectBlock + autoTrack: Bool ) { - let msg = messageCache[id] - if msg != nil { - msg!.autoTrack = suppressAutoTrack - resolve(nil) - return + if (msg != nil) { + msg!.autoTrack = autoTrack + print("setAutoTrack: \(id) to \(autoTrack)") + } else { + print("setAutoTrack: \(id) not found") } - reject(Constants.CACHE_MISS, nil, nil) } @objc - private func showMessage( - _ id: String, - withResolver resolve: @escaping RCTPromiseResolveBlock, - withRejecter reject: @escaping RCTPromiseRejectBlock + private func show( + _ id: String ) { let msg = messageCache[id] if msg != nil { msg!.show() - resolve(nil) - return + print("show: \(id) to \(autoTrack)") + } else { + print("show: \(id) not found") } - reject(Constants.CACHE_MISS, nil, nil) - } @objc - func trackMessage( + func track( _ id: String, withInteraction interaction: String, - withEventType eventType: Int, - withResolver resolve: @escaping RCTPromiseResolveBlock, - withRejecter reject: @escaping RCTPromiseRejectBlock + withEventType eventType: Int ) { - let msg = messageCache[id] let eventType = MessagingEdgeEventType.init(rawValue: eventType) ?? MessagingEdgeEventType.dismiss if msg != nil { msg!.track(interaction, withEdgeEventType: eventType) - resolve(nil) - return + print("track: \(id) to \(interaction) and \(eventType)") + } else { + print("track: \(id) not found") } - reject(Constants.CACHE_MISS, nil, nil) } @objc From 5d8a61cf98ea1f04600a987b5168d161362d143f Mon Sep 17 00:00:00 2001 From: Ishita Gambhir Date: Thu, 11 Sep 2025 08:05:53 +0530 Subject: [PATCH 2/3] code cleanup --- packages/messaging/ios/src/RCTAEPMessaging.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/messaging/ios/src/RCTAEPMessaging.swift b/packages/messaging/ios/src/RCTAEPMessaging.swift index 7fec5f7d..736239a0 100644 --- a/packages/messaging/ios/src/RCTAEPMessaging.swift +++ b/packages/messaging/ios/src/RCTAEPMessaging.swift @@ -148,7 +148,7 @@ public class RCTAEPMessaging: RCTEventEmitter, MessagingDelegate { @objc func dismiss( _ id: String, - withSuppressAutoTrack suppressAutoTrack: Bool + suppressAutoTrack: Bool ) { let msg = messageCache[id] if msg != nil { @@ -180,7 +180,7 @@ public class RCTAEPMessaging: RCTEventEmitter, MessagingDelegate { let msg = messageCache[id] if msg != nil { msg!.show() - print("show: \(id) to \(autoTrack)") + print("show: \(id) shown") } else { print("show: \(id) not found") } @@ -189,8 +189,8 @@ public class RCTAEPMessaging: RCTEventEmitter, MessagingDelegate { @objc func track( _ id: String, - withInteraction interaction: String, - withEventType eventType: Int + interaction: String, + eventType: Int ) { let msg = messageCache[id] let eventType = From 62274a83155b7c7315b867f4664fc990a3635d18 Mon Sep 17 00:00:00 2001 From: Ishita Gambhir Date: Mon, 22 Sep 2025 15:27:14 +0530 Subject: [PATCH 3/3] call dismiss conditionally for android and ios --- .../messaging/RCTAEPMessagingModule.java | 7 ++----- packages/messaging/src/models/Message.ts | 13 +++++++++++-- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java b/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java index 6da3a2d6..d5e06d90 100644 --- a/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java +++ b/packages/messaging/android/src/main/java/com/adobe/marketing/mobile/reactnative/messaging/RCTAEPMessagingModule.java @@ -204,12 +204,9 @@ public void clear(final String messageId) { } } - // dismiss needs to accept a boolean parameter to suppress autoTrack - - // to maintain parity with the function signature on react native side, - // as iOS message.dismiss() accepts a boolean parameter to suppress autoTrack - // but on android side, message.dismiss() does not accept any parameters + @ReactMethod - public void dismiss(final String messageId, final boolean suppressAutoTrack) { + public void dismiss(final String messageId) { if (messageId != null && messageCache.get(messageId) != null) { messageCache.get(messageId).dismiss(); } diff --git a/packages/messaging/src/models/Message.ts b/packages/messaging/src/models/Message.ts index 458c7c69..d0fd2c94 100644 --- a/packages/messaging/src/models/Message.ts +++ b/packages/messaging/src/models/Message.ts @@ -10,7 +10,7 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -import { NativeEventEmitter, NativeModules } from 'react-native'; +import { NativeEventEmitter, NativeModules, Platform } from 'react-native'; const RCTAEPMessaging = NativeModules.AEPMessaging; @@ -61,7 +61,16 @@ class Message { * of the autoTrack setting. */ dismiss(suppressAutoTrack?: boolean) { - RCTAEPMessaging.dismiss(this.id, suppressAutoTrack ? true : false); + // iOS message.dismiss() accepts a boolean parameter to suppress autoTrack + // but on android side, message.dismiss() does not accept any parameters + if (Platform.OS === 'android') { + RCTAEPMessaging.dismiss(this.id); + } + + if (Platform.OS === 'ios') { + RCTAEPMessaging.dismiss(this.id, suppressAutoTrack ? true : false); + } + } /**