Skip to content

Commit d42dd73

Browse files
committed
feat: implement methods to retrieve and sync embedded messages in RNIterableAPIModuleImpl
1 parent b0e17f9 commit d42dd73

2 files changed

Lines changed: 98 additions & 30 deletions

File tree

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

Lines changed: 81 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,14 @@
2424
import com.iterable.iterableapi.IterableAction;
2525
import com.iterable.iterableapi.IterableActionContext;
2626
import com.iterable.iterableapi.IterableApi;
27+
import com.iterable.iterableapi.IterableAttributionInfo;
2728
import com.iterable.iterableapi.IterableAuthHandler;
2829
import com.iterable.iterableapi.IterableConfig;
2930
import com.iterable.iterableapi.IterableCustomActionHandler;
30-
import com.iterable.iterableapi.IterableAttributionInfo;
31+
// import com.iterable.iterableapi.IterableEmbeddedManager;
32+
import com.iterable.iterableapi.IterableEmbeddedMessage;
33+
// import com.iterable.iterableapi.IterableEmbeddedSession;
34+
// import com.iterable.iterableapi.IterableEmbeddedUpdateHandler;
3135
import com.iterable.iterableapi.IterableHelper;
3236
import com.iterable.iterableapi.IterableInAppCloseAction;
3337
import com.iterable.iterableapi.IterableInAppHandler;
@@ -46,6 +50,7 @@
4650
import java.util.Map;
4751
import java.util.HashMap;
4852
import java.util.List;
53+
import java.util.ArrayList;
4954
import java.util.concurrent.CountDownLatch;
5055
import java.util.concurrent.TimeUnit;
5156

@@ -97,6 +102,7 @@ public void initializeWithApiKey(String apiKey, ReadableMap configReadableMap, S
97102
IterableApi.getInstance().setDeviceAttribute("reactNativeSDKVersion", version);
98103

99104
IterableApi.getInstance().getInAppManager().addListener(this);
105+
IterableApi.getInstance().getEmbeddedManager().syncMessages();
100106

101107
// MOB-10421: Figure out what the error cases are and handle them appropriately
102108
// This is just here to match the TS types and let the JS thread know when we are done initializing
@@ -124,8 +130,8 @@ public void initialize2WithApiKey(String apiKey, ReadableMap configReadableMap,
124130
}
125131

126132
if (configReadableMap.hasKey("enableEmbeddedMessaging")) {
127-
configBuilder.setEnableEmbeddedMessaging(configReadableMap.getBoolean("enableEmbeddedMessaging"));
128-
}
133+
configBuilder.setEnableEmbeddedMessaging(configReadableMap.getBoolean("enableEmbeddedMessaging"));
134+
}
129135

130136
// NOTE: There does not seem to be a way to set the API endpoint
131137
// override in the Android SDK. Check with @Ayyanchira and @evantk91 to
@@ -135,6 +141,7 @@ public void initialize2WithApiKey(String apiKey, ReadableMap configReadableMap,
135141
IterableApi.getInstance().setDeviceAttribute("reactNativeSDKVersion", version);
136142

137143
IterableApi.getInstance().getInAppManager().addListener(this);
144+
IterableApi.getInstance().getEmbeddedManager().syncMessages();
138145

139146
// MOB-10421: Figure out what the error cases are and handle them appropriately
140147
// This is just here to match the TS types and let the JS thread know when we are done initializing
@@ -508,27 +515,6 @@ private static JSONObject optSerializedDataFields(ReadableMap dataFields) {
508515
// endregion
509516

510517
// ---------------------------------------------------------------------------------------
511-
// region Embedded Messaging
512-
513-
public void getEmbeddedPlacementIds(Promise promise) {
514-
IterableLogger.d(TAG, "getEmbeddedPlacementIds");
515-
try {
516-
List<Long> placementIds = IterableApi.getInstance().getEmbeddedManager().getPlacementIds();
517-
WritableArray writableArray = Arguments.createArray();
518-
if (placementIds != null) {
519-
for (Long placementId : placementIds) {
520-
writableArray.pushDouble(placementId.doubleValue());
521-
}
522-
}
523-
promise.resolve(writableArray);
524-
} catch (Exception e) {
525-
IterableLogger.e(TAG, "Error getting placement IDs: " + e.getLocalizedMessage());
526-
promise.reject("", "Failed to get placement IDs: " + e.getLocalizedMessage());
527-
}
528-
}
529-
530-
// ---------------------------------------------------------------------------------------
531-
// endregion
532518
// region IterableSDK callbacks
533519

534520
@Override
@@ -659,14 +645,80 @@ public void sendEvent(@NonNull String eventName, @Nullable Object eventData) {
659645
public void onInboxUpdated() {
660646
sendEvent(EventName.receivedIterableInboxChanged.name(), null);
661647
}
648+
// ---------------------------------------------------------------------------------------
649+
// endregion
650+
651+
// ---------------------------------------------------------------------------------------
652+
// region Embedded messaging
653+
654+
public void getEmbeddedMessages(@Nullable ReadableArray placementIds, Promise promise) {
655+
IterableLogger.d(TAG, "getEmbeddedMessages for placements: " + placementIds);
656+
657+
try {
658+
List<IterableEmbeddedMessage> allMessages = new ArrayList<>();
659+
660+
if (placementIds == null || placementIds.size() == 0) {
661+
// If no placement IDs provided, we need to get messages for all possible placements
662+
// Since the Android SDK requires a placement ID, we'll use 0 as a default
663+
// This might need to be adjusted based on the actual SDK behavior
664+
List<IterableEmbeddedMessage> messages = IterableApi.getInstance().getEmbeddedManager().getMessages(0L);
665+
if (messages != null) {
666+
allMessages.addAll(messages);
667+
}
668+
} else {
669+
// Convert ReadableArray to individual placement IDs and get messages for each
670+
for (int i = 0; i < placementIds.size(); i++) {
671+
long placementId = placementIds.getInt(i);
672+
List<IterableEmbeddedMessage> messages = IterableApi.getInstance().getEmbeddedManager().getMessages(placementId);
673+
if (messages != null) {
674+
allMessages.addAll(messages);
675+
}
676+
}
677+
}
678+
679+
JSONArray embeddedMessageJsonArray = Serialization.serializeEmbeddedMessages(allMessages);
680+
IterableLogger.d(TAG, "Messages for placements: " + embeddedMessageJsonArray);
681+
682+
promise.resolve(Serialization.convertJsonToArray(embeddedMessageJsonArray));
683+
} catch (JSONException e) {
684+
IterableLogger.e(TAG, e.getLocalizedMessage());
685+
promise.reject("", "Failed to fetch messages with error " + e.getLocalizedMessage());
686+
}
687+
}
688+
689+
public void syncEmbeddedMessages() {
690+
IterableLogger.d(TAG, "syncEmbeddedMessages");
691+
IterableApi.getInstance().getEmbeddedManager().syncMessages();
692+
}
693+
694+
public void getEmbeddedPlacementIds(Promise promise) {
695+
IterableLogger.d(TAG, "getEmbeddedPlacementIds");
696+
try {
697+
List<Long> placementIds = IterableApi.getInstance().getEmbeddedManager().getPlacementIds();
698+
WritableArray writableArray = Arguments.createArray();
699+
if (placementIds != null) {
700+
for (Long placementId : placementIds) {
701+
writableArray.pushDouble(placementId.doubleValue());
702+
}
703+
}
704+
promise.resolve(writableArray);
705+
} catch (Exception e) {
706+
IterableLogger.e(TAG, "Error getting placement IDs: " + e.getLocalizedMessage());
707+
promise.reject("", "Failed to get placement IDs: " + e.getLocalizedMessage());
708+
}
709+
}
710+
711+
// ---------------------------------------------------------------------------------------
712+
// endregion
662713
}
663714

664715
enum EventName {
665-
handleUrlCalled,
666-
handleCustomActionCalled,
667-
handleInAppCalled,
668716
handleAuthCalled,
669-
receivedIterableInboxChanged,
717+
handleAuthFailureCalled,
670718
handleAuthSuccessCalled,
671-
handleAuthFailureCalled
719+
handleCustomActionCalled,
720+
handleInAppCalled,
721+
handleUrlCalled,
722+
receivedIterableEmbeddedMessagesChanged,
723+
receivedIterableInboxChanged
672724
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616
import com.iterable.iterableapi.IterableActionContext;
1717
import com.iterable.iterableapi.IterableConfig;
1818
import com.iterable.iterableapi.IterableDataRegion;
19+
import com.iterable.iterableapi.IterableEmbeddedMessage;
1920
import com.iterable.iterableapi.IterableInAppCloseAction;
2021
import com.iterable.iterableapi.IterableInAppDeleteActionType;
2122
import com.iterable.iterableapi.IterableInAppHandler;
2223
import com.iterable.iterableapi.IterableInAppLocation;
2324
import com.iterable.iterableapi.IterableInAppMessage;
2425
import com.iterable.iterableapi.IterableInboxSession;
2526
import com.iterable.iterableapi.IterableLogger;
26-
import com.iterable.iterableapi.RNIterableInternal;
2727
import com.iterable.iterableapi.RetryPolicy;
28+
import com.iterable.iterableapi.RNIterableInternal;
2829

2930
import org.json.JSONArray;
3031
import org.json.JSONException;
@@ -137,6 +138,17 @@ static JSONArray serializeInAppMessages(List<IterableInAppMessage> inAppMessages
137138
return inAppMessagesJson;
138139
}
139140

141+
static JSONArray serializeEmbeddedMessages(List<IterableEmbeddedMessage> embeddedMessages) {
142+
JSONArray embeddedMessagesJson = new JSONArray();
143+
if (embeddedMessages != null) {
144+
for (IterableEmbeddedMessage message : embeddedMessages) {
145+
JSONObject messageJson = IterableEmbeddedMessage.Companion.toJSONObject(message);
146+
embeddedMessagesJson.put(messageJson);
147+
}
148+
}
149+
return embeddedMessagesJson;
150+
}
151+
140152
static IterableConfig.Builder getConfigFromReadableMap(ReadableMap iterableContextMap) {
141153
try {
142154
JSONObject iterableContextJSON = convertMapToJson(iterableContextMap);
@@ -218,6 +230,10 @@ static IterableConfig.Builder getConfigFromReadableMap(ReadableMap iterableConte
218230
configBuilder.setDataRegion(iterableDataRegion);
219231
}
220232

233+
if (iterableContextJSON.has("enableEmbeddedMessaging")) {
234+
configBuilder.setEnableEmbeddedMessaging(iterableContextJSON.optBoolean("enableEmbeddedMessaging"));
235+
}
236+
221237
if (iterableContextJSON.has("retryPolicy")) {
222238
JSONObject retryPolicyJson = iterableContextJSON.getJSONObject("retryPolicy");
223239
int maxRetry = retryPolicyJson.getInt("maxRetry");

0 commit comments

Comments
 (0)