2424import com .iterable .iterableapi .IterableAction ;
2525import com .iterable .iterableapi .IterableActionContext ;
2626import com .iterable .iterableapi .IterableApi ;
27+ import com .iterable .iterableapi .IterableAttributionInfo ;
2728import com .iterable .iterableapi .IterableAuthHandler ;
2829import com .iterable .iterableapi .IterableConfig ;
2930import 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;
3135import com .iterable .iterableapi .IterableHelper ;
3236import com .iterable .iterableapi .IterableInAppCloseAction ;
3337import com .iterable .iterableapi .IterableInAppHandler ;
4650import java .util .Map ;
4751import java .util .HashMap ;
4852import java .util .List ;
53+ import java .util .ArrayList ;
4954import java .util .concurrent .CountDownLatch ;
5055import 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
664715enum 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}
0 commit comments