diff --git a/.gitignore b/.gitignore index 1cc37aef..48e6d3b4 100644 --- a/.gitignore +++ b/.gitignore @@ -149,3 +149,6 @@ out/ # Ignore VSCode settings .vscode/ .vscode/settings.json + +# ignore ds store +.DS_Store diff --git a/apps/AEPSampleAppNewArchEnabled/app/_layout.tsx b/apps/AEPSampleAppNewArchEnabled/app/_layout.tsx index 6f4ec045..8c921790 100644 --- a/apps/AEPSampleAppNewArchEnabled/app/_layout.tsx +++ b/apps/AEPSampleAppNewArchEnabled/app/_layout.tsx @@ -6,6 +6,7 @@ import { Drawer } from 'expo-router/drawer'; import { useColorScheme } from '@/hooks/useColorScheme'; import { MobileCore , LogLevel} from '@adobe/react-native-aepcore'; +import { Messaging } from '@adobe/react-native-aepmessaging'; import { useEffect } from 'react'; // Prevent the splash screen from auto-hiding before asset loading is complete. @@ -41,6 +42,32 @@ export default function RootLayout() { MobileCore.initializeWithAppId("YOUR-APP-ID") .then(() => { console.log("AEP SDK Initialized"); + + // // Set up messaging delegate after SDK initialization + // const unsubscribe = Messaging.setMessagingDelegate({ + // onDismiss: (message) => { + // console.log('Message dismissed:', message); + // }, + // onShow: (message) => { + // console.log('Message shown:', message); + // }, + // shouldShowMessage: (message) => { + // console.log('Should show message:', message); + // return true; // Always show messages in sample app + // }, + // shouldSaveMessage: (message) => { + // console.log('Should save message:', message); + // return true; // Always save messages in sample app + // }, + // urlLoaded: (url, message) => { + // console.log('URL loaded:', url, 'for message:', message); + // }, + // }); + + // console.log("Messaging delegate set up successfully"); + + // Store unsubscribe function if needed for cleanup + // You could return it from useEffect if you need to clean up on unmount }) .catch((error) => { console.error("AEP SDK Initialization error:", error); diff --git a/packages/messaging/ios/src/RCTAEPMessaging.swift b/packages/messaging/ios/src/RCTAEPMessaging.swift index 86cf4cef..4c8a112b 100644 --- a/packages/messaging/ios/src/RCTAEPMessaging.swift +++ b/packages/messaging/ios/src/RCTAEPMessaging.swift @@ -275,14 +275,28 @@ public class RCTAEPMessaging: RCTEventEmitter, MessagingDelegate { } public func shouldShowMessage(message: Showable) -> Bool { - if let fullscreenMessage = message as? FullscreenMessage, - let message = fullscreenMessage.parent - { + let fullscreenMessage = message as? FullscreenMessage + let parentMessage = fullscreenMessage?.parent + + // If parent message exists, emit it + if let parentMessage = parentMessage { emitNativeEvent( name: Constants.SHOULD_SHOW_MESSAGE_EVENT, - body: RCTAEPMessagingDataBridge.transformToMessage(message: message) + body: RCTAEPMessagingDataBridge.transformToMessage(message: parentMessage) + ) + } else if let fullscreenMessage = fullscreenMessage { + // Parent is nil but fullscreen message exists - emit empty body for now + emitNativeEvent( + name: Constants.SHOULD_SHOW_MESSAGE_EVENT, + body: [:] ) - semaphore.wait() + } else { + // Both are nil, don't emit anything and return false + return false + } + + semaphore.wait() + if let message = parentMessage { if self.shouldSaveMessage { self.messageCache[message.id] = message } @@ -290,10 +304,8 @@ public class RCTAEPMessaging: RCTEventEmitter, MessagingDelegate { if self.shouldShowMessage { latestMessage = message } - - return self.shouldShowMessage } - return false + return self.shouldShowMessage } public func urlLoaded(_ url: URL, byMessage message: Showable) {