From b0da53d1c273093ee68c2e8fd4b20e61402c5749 Mon Sep 17 00:00:00 2001 From: Loren Posen Date: Thu, 22 Jan 2026 15:43:46 -0800 Subject: [PATCH 1/3] fix: return all messages for getEmbeddedMessages when no placement given --- .../reactnative/RNIterableAPIModuleImpl.java | 16 +++++--- example/src/components/Embedded/Embedded.tsx | 41 ++++++++----------- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/android/src/main/java/com/iterable/reactnative/RNIterableAPIModuleImpl.java b/android/src/main/java/com/iterable/reactnative/RNIterableAPIModuleImpl.java index a3a301195..caef783e6 100644 --- a/android/src/main/java/com/iterable/reactnative/RNIterableAPIModuleImpl.java +++ b/android/src/main/java/com/iterable/reactnative/RNIterableAPIModuleImpl.java @@ -755,12 +755,16 @@ public void getEmbeddedMessages(@Nullable ReadableArray placementIds, Promise pr List allMessages = new ArrayList<>(); if (placementIds == null || placementIds.size() == 0) { - // If no placement IDs provided, we need to get messages for all possible placements - // Since the Android SDK requires a placement ID, we'll use 0 as a default - // This might need to be adjusted based on the actual SDK behavior - List messages = IterableApi.getInstance().getEmbeddedManager().getMessages(0L); - if (messages != null) { - allMessages.addAll(messages); + // If no placement IDs provided, get messages from all placements + // Get all available placement IDs and fetch messages for each + List allPlacementIds = IterableApi.getInstance().getEmbeddedManager().getPlacementIds(); + IterableLogger.d(TAG, "Getting messages for all placement IDs: " + allPlacementIds); + + for (Long placementId : allPlacementIds) { + List messages = IterableApi.getInstance().getEmbeddedManager().getMessages(placementId); + if (messages != null) { + allMessages.addAll(messages); + } } } else { // Convert ReadableArray to individual placement IDs and get messages for each diff --git a/example/src/components/Embedded/Embedded.tsx b/example/src/components/Embedded/Embedded.tsx index 3356b9512..0abea82a0 100644 --- a/example/src/components/Embedded/Embedded.tsx +++ b/example/src/components/Embedded/Embedded.tsx @@ -1,4 +1,10 @@ -import { ScrollView, Text, TextInput, TouchableOpacity, View } from 'react-native'; +import { + ScrollView, + Text, + TextInput, + TouchableOpacity, + View, +} from 'react-native'; import { useCallback, useState } from 'react'; import { Iterable, @@ -44,19 +50,15 @@ export const Embedded = () => { }, []); const getEmbeddedMessages = useCallback(() => { - // Don't fetch if no IDs - if (parsedPlacementIds.length === 0) { - console.log('No placement IDs entered, button should be disabled'); - return; - } - console.log('Fetching messages for placement IDs:', idsToFetch); - Iterable.embeddedManager.getMessages(idsToFetch).then((messages: IterableEmbeddedMessage[]) => { + Iterable.embeddedManager + .getMessages(idsToFetch) + .then((messages: IterableEmbeddedMessage[]) => { setEmbeddedMessages(messages); console.log(messages); }); - }, [idsToFetch, parsedPlacementIds.length]); + }, [idsToFetch]); const startEmbeddedImpression = useCallback( (message: IterableEmbeddedMessage) => { @@ -96,7 +98,8 @@ export const Embedded = () => { {!Iterable.embeddedManager.isEnabled && ( - ⚠️ Embedded messaging is disabled. Please enable it in your Iterable config. + ⚠️ Embedded messaging is disabled. Please enable it in your Iterable + config. )} @@ -114,9 +117,7 @@ export const Embedded = () => { End session - - Placement IDs (comma-separated): - + Placement IDs (comma-separated): { onChangeText={setPlacementIdsInput} keyboardType="numbers-and-punctuation" /> - - + + Get messages for placement ids From c7f7c591233fef9fda4dd539a4eb319ce45fa31c Mon Sep 17 00:00:00 2001 From: Loren Posen Date: Fri, 23 Jan 2026 12:47:55 -0800 Subject: [PATCH 2/3] refactor: remove unused button disabled styles from Embedded.styles.ts --- example/src/components/Embedded/Embedded.styles.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/example/src/components/Embedded/Embedded.styles.ts b/example/src/components/Embedded/Embedded.styles.ts index 66deb7b69..bd712bacf 100644 --- a/example/src/components/Embedded/Embedded.styles.ts +++ b/example/src/components/Embedded/Embedded.styles.ts @@ -1,17 +1,10 @@ import { StyleSheet } from 'react-native'; import { button, buttonText, container, hr, link, input, title, subtitle } from '../../constants'; -import { neutrals, utilityColors, backgroundColors } from '../../constants/styles/colors'; +import { utilityColors, backgroundColors } from '../../constants/styles/colors'; const styles = StyleSheet.create({ button, - buttonDisabled: { - backgroundColor: neutrals.grey25, - opacity: 0.6, - }, buttonText, - buttonTextDisabled: { - color: neutrals.grey50, - }, container, embeddedSection: { display: 'flex', From fe0a6db677df7c4f7c42bb1ca597d85e1ea1771b Mon Sep 17 00:00:00 2001 From: Loren Posen Date: Fri, 23 Jan 2026 13:25:48 -0800 Subject: [PATCH 3/3] test: enable embedded messaging in Iterable configuration tests --- src/core/classes/Iterable.test.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/classes/Iterable.test.ts b/src/core/classes/Iterable.test.ts index 459cd2b8b..20ad805d7 100644 --- a/src/core/classes/Iterable.test.ts +++ b/src/core/classes/Iterable.test.ts @@ -1247,6 +1247,7 @@ describe('Iterable', () => { // sets up config file and onEmbeddedMessageUpdate callback const config = new IterableConfig(); config.logReactNativeSdkCalls = false; + config.enableEmbeddedMessaging = true; config.onEmbeddedMessageUpdate = jest.fn(); // initialize Iterable object Iterable.initialize('apiKey', config); @@ -1288,6 +1289,7 @@ describe('Iterable', () => { // sets up config with callback const config = new IterableConfig(); config.logReactNativeSdkCalls = false; + config.enableEmbeddedMessaging = true; config.onEmbeddedMessageUpdate = jest.fn(); // initialize Iterable object Iterable.initialize('apiKey', config); @@ -1335,6 +1337,7 @@ describe('Iterable', () => { // sets up config file and onEmbeddedMessagingDisabled callback const config = new IterableConfig(); config.logReactNativeSdkCalls = false; + config.enableEmbeddedMessaging = true; config.onEmbeddedMessagingDisabled = jest.fn(); // initialize Iterable object Iterable.initialize('apiKey', config); @@ -1376,6 +1379,7 @@ describe('Iterable', () => { // sets up config with callback const config = new IterableConfig(); config.logReactNativeSdkCalls = false; + config.enableEmbeddedMessaging = true; config.onEmbeddedMessagingDisabled = jest.fn(); // initialize Iterable object Iterable.initialize('apiKey', config); @@ -1420,6 +1424,7 @@ describe('Iterable', () => { // sets up config with both callbacks const config = new IterableConfig(); config.logReactNativeSdkCalls = false; + config.enableEmbeddedMessaging = true; config.onEmbeddedMessageUpdate = jest.fn(); config.onEmbeddedMessagingDisabled = jest.fn(); // initialize Iterable object