Skip to content

Commit b5c8048

Browse files
authored
Merge pull request #808 from Iterable/feature/SDK-327-getmessages-is-inconsistent-in-ios-vs-android
[SDK-327] Make getEmbeddedMessage return consistent
2 parents 39e73ab + fe0a6db commit b5c8048

4 files changed

Lines changed: 32 additions & 39 deletions

File tree

android/src/main/java/com/iterable/reactnative/RNIterableAPIModuleImpl.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -755,12 +755,16 @@ public void getEmbeddedMessages(@Nullable ReadableArray placementIds, Promise pr
755755
List<IterableEmbeddedMessage> allMessages = new ArrayList<>();
756756

757757
if (placementIds == null || placementIds.size() == 0) {
758-
// If no placement IDs provided, we need to get messages for all possible placements
759-
// Since the Android SDK requires a placement ID, we'll use 0 as a default
760-
// This might need to be adjusted based on the actual SDK behavior
761-
List<IterableEmbeddedMessage> messages = IterableApi.getInstance().getEmbeddedManager().getMessages(0L);
762-
if (messages != null) {
763-
allMessages.addAll(messages);
758+
// If no placement IDs provided, get messages from all placements
759+
// Get all available placement IDs and fetch messages for each
760+
List<Long> allPlacementIds = IterableApi.getInstance().getEmbeddedManager().getPlacementIds();
761+
IterableLogger.d(TAG, "Getting messages for all placement IDs: " + allPlacementIds);
762+
763+
for (Long placementId : allPlacementIds) {
764+
List<IterableEmbeddedMessage> messages = IterableApi.getInstance().getEmbeddedManager().getMessages(placementId);
765+
if (messages != null) {
766+
allMessages.addAll(messages);
767+
}
764768
}
765769
} else {
766770
// Convert ReadableArray to individual placement IDs and get messages for each

example/src/components/Embedded/Embedded.styles.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
import { StyleSheet } from 'react-native';
22
import { button, buttonText, container, hr, link, input, title, subtitle } from '../../constants';
3-
import { neutrals, utilityColors, backgroundColors } from '../../constants/styles/colors';
3+
import { utilityColors, backgroundColors } from '../../constants/styles/colors';
44

55
const styles = StyleSheet.create({
66
button,
7-
buttonDisabled: {
8-
backgroundColor: neutrals.grey25,
9-
opacity: 0.6,
10-
},
117
buttonText,
12-
buttonTextDisabled: {
13-
color: neutrals.grey50,
14-
},
158
container,
169
embeddedSection: {
1710
display: 'flex',

example/src/components/Embedded/Embedded.tsx

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
import { ScrollView, Text, TextInput, TouchableOpacity, View } from 'react-native';
1+
import {
2+
ScrollView,
3+
Text,
4+
TextInput,
5+
TouchableOpacity,
6+
View,
7+
} from 'react-native';
28
import { useCallback, useState } from 'react';
39
import {
410
Iterable,
@@ -44,19 +50,15 @@ export const Embedded = () => {
4450
}, []);
4551

4652
const getEmbeddedMessages = useCallback(() => {
47-
// Don't fetch if no IDs
48-
if (parsedPlacementIds.length === 0) {
49-
console.log('No placement IDs entered, button should be disabled');
50-
return;
51-
}
52-
5353
console.log('Fetching messages for placement IDs:', idsToFetch);
5454

55-
Iterable.embeddedManager.getMessages(idsToFetch).then((messages: IterableEmbeddedMessage[]) => {
55+
Iterable.embeddedManager
56+
.getMessages(idsToFetch)
57+
.then((messages: IterableEmbeddedMessage[]) => {
5658
setEmbeddedMessages(messages);
5759
console.log(messages);
5860
});
59-
}, [idsToFetch, parsedPlacementIds.length]);
61+
}, [idsToFetch]);
6062

6163
const startEmbeddedImpression = useCallback(
6264
(message: IterableEmbeddedMessage) => {
@@ -96,7 +98,8 @@ export const Embedded = () => {
9698
{!Iterable.embeddedManager.isEnabled && (
9799
<View style={styles.warningContainer}>
98100
<Text style={styles.warningText}>
99-
⚠️ Embedded messaging is disabled. Please enable it in your Iterable config.
101+
⚠️ Embedded messaging is disabled. Please enable it in your Iterable
102+
config.
100103
</Text>
101104
</View>
102105
)}
@@ -114,9 +117,7 @@ export const Embedded = () => {
114117
<Text style={styles.buttonText}>End session</Text>
115118
</TouchableOpacity>
116119
<View style={styles.inputContainer}>
117-
<Text style={styles.text}>
118-
Placement IDs (comma-separated):
119-
</Text>
120+
<Text style={styles.text}>Placement IDs (comma-separated):</Text>
120121
<TextInput
121122
style={styles.textInput}
122123
placeholder="e.g., 1, 2, 3"
@@ -125,18 +126,8 @@ export const Embedded = () => {
125126
onChangeText={setPlacementIdsInput}
126127
keyboardType="numbers-and-punctuation"
127128
/>
128-
<TouchableOpacity
129-
style={[
130-
styles.button,
131-
parsedPlacementIds.length === 0 && styles.buttonDisabled
132-
]}
133-
onPress={getEmbeddedMessages}
134-
disabled={parsedPlacementIds.length === 0}
135-
>
136-
<Text style={[
137-
styles.buttonText,
138-
parsedPlacementIds.length === 0 && styles.buttonTextDisabled
139-
]}>
129+
<TouchableOpacity style={styles.button} onPress={getEmbeddedMessages}>
130+
<Text style={styles.buttonText}>
140131
Get messages for placement ids
141132
</Text>
142133
</TouchableOpacity>

src/core/classes/Iterable.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,6 +1247,7 @@ describe('Iterable', () => {
12471247
// sets up config file and onEmbeddedMessageUpdate callback
12481248
const config = new IterableConfig();
12491249
config.logReactNativeSdkCalls = false;
1250+
config.enableEmbeddedMessaging = true;
12501251
config.onEmbeddedMessageUpdate = jest.fn();
12511252
// initialize Iterable object
12521253
Iterable.initialize('apiKey', config);
@@ -1288,6 +1289,7 @@ describe('Iterable', () => {
12881289
// sets up config with callback
12891290
const config = new IterableConfig();
12901291
config.logReactNativeSdkCalls = false;
1292+
config.enableEmbeddedMessaging = true;
12911293
config.onEmbeddedMessageUpdate = jest.fn();
12921294
// initialize Iterable object
12931295
Iterable.initialize('apiKey', config);
@@ -1335,6 +1337,7 @@ describe('Iterable', () => {
13351337
// sets up config file and onEmbeddedMessagingDisabled callback
13361338
const config = new IterableConfig();
13371339
config.logReactNativeSdkCalls = false;
1340+
config.enableEmbeddedMessaging = true;
13381341
config.onEmbeddedMessagingDisabled = jest.fn();
13391342
// initialize Iterable object
13401343
Iterable.initialize('apiKey', config);
@@ -1376,6 +1379,7 @@ describe('Iterable', () => {
13761379
// sets up config with callback
13771380
const config = new IterableConfig();
13781381
config.logReactNativeSdkCalls = false;
1382+
config.enableEmbeddedMessaging = true;
13791383
config.onEmbeddedMessagingDisabled = jest.fn();
13801384
// initialize Iterable object
13811385
Iterable.initialize('apiKey', config);
@@ -1420,6 +1424,7 @@ describe('Iterable', () => {
14201424
// sets up config with both callbacks
14211425
const config = new IterableConfig();
14221426
config.logReactNativeSdkCalls = false;
1427+
config.enableEmbeddedMessaging = true;
14231428
config.onEmbeddedMessageUpdate = jest.fn();
14241429
config.onEmbeddedMessagingDisabled = jest.fn();
14251430
// initialize Iterable object

0 commit comments

Comments
 (0)