Skip to content

Commit

Permalink
Merge pull request #879 from Iterable/evan/MOB-8301-add-placement-id-…
Browse files Browse the repository at this point in the history
…to-sync-messages

[MOB-8301] adds optional parameter to syncMessages
  • Loading branch information
evantk91 authored Feb 12, 2025
2 parents df4abfa + 3e84049 commit 66b6932
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -232,14 +232,8 @@ void getEmbeddedMessages(@Nullable Long[] placementIds, @NonNull IterableHelper.
requestJSON.put(IterableConstants.ITBL_SYSTEM_VERSION, Build.VERSION.RELEASE);
requestJSON.put(IterableConstants.KEY_PACKAGE_NAME, authProvider.getContext().getPackageName());

if (placementIds != null) {
StringBuilder pathBuilder = new StringBuilder(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES + "?");

for (Long placementId : placementIds) {
pathBuilder.append("&placementIds=").append(placementId);
}

String path = pathBuilder.toString();
if (placementIds != null && placementIds.length != 0) {
String path = getEmbeddedMessagesPath(placementIds);
sendGetRequest(path, requestJSON, onCallback);
} else {
sendGetRequest(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES, requestJSON, onCallback);
Expand All @@ -260,14 +254,8 @@ void getEmbeddedMessages(@Nullable Long[] placementIds, @NonNull IterableHelper.
requestJSON.put(IterableConstants.ITBL_SYSTEM_VERSION, Build.VERSION.RELEASE);
requestJSON.put(IterableConstants.KEY_PACKAGE_NAME, authProvider.getContext().getPackageName());

if (placementIds != null) {
StringBuilder pathBuilder = new StringBuilder(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES + "?");

for (Long placementId : placementIds) {
pathBuilder.append("&placementIds=").append(placementId);
}

String path = pathBuilder.toString();
if (placementIds != null && placementIds.length != 0) {
String path = getEmbeddedMessagesPath(placementIds);
sendGetRequest(path, requestJSON, onSuccess, onFailure);
} else {
sendGetRequest(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES, requestJSON, onSuccess, onFailure);
Expand All @@ -278,6 +266,23 @@ void getEmbeddedMessages(@Nullable Long[] placementIds, @NonNull IterableHelper.
}
}

@NonNull
private static String getEmbeddedMessagesPath(Long[] placementIds) {
StringBuilder pathBuilder = new StringBuilder(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES + "?");

boolean isFirst = true;
for (Long placementId : placementIds) {
if (isFirst) {
pathBuilder.append("placementIds=").append(placementId);
isFirst = false;
} else {
pathBuilder.append("&placementIds=").append(placementId);
}
}

return pathBuilder.toString();
}

public void trackInAppOpen(@NonNull String messageId) {
JSONObject requestJSON = new JSONObject();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class IterableEmbeddedManager : IterableActivityMonitor.AppStateCallback

// region variables
private var localPlacementMessagesMap = mutableMapOf<Long, List<IterableEmbeddedMessage>>()
private var placementIds = mutableListOf<Long>()
private var localPlacementIds = mutableListOf<Long>()

private var updateHandleListeners = mutableListOf<IterableEmbeddedUpdateHandler>()
private var iterableApi: IterableApi
Expand Down Expand Up @@ -77,15 +77,19 @@ public class IterableEmbeddedManager : IterableActivityMonitor.AppStateCallback
}

fun getPlacementIds(): List<Long> {
return placementIds
return localPlacementIds
}

//Network call to get the embedded messages
fun syncMessages() {
syncMessages(emptyArray<Long>())
}

//Network call to get the embedded messages
fun syncMessages(placementIds: Array<Long>) {
if (iterableApi.config.enableEmbeddedMessaging) {
IterableLogger.v(TAG, "Syncing messages...")

IterableApi.sharedInstance.getEmbeddedMessages(SuccessHandler { data ->
IterableApi.sharedInstance.getEmbeddedMessages(placementIds, { data ->
IterableLogger.v(TAG, "Got response from network call to get embedded messages")
try {
val previousPlacementIds = getPlacementIds()
Expand Down Expand Up @@ -135,7 +139,7 @@ public class IterableEmbeddedManager : IterableActivityMonitor.AppStateCallback
}

//store placements from payload for next comparison
placementIds = currentPlacementIds
localPlacementIds = currentPlacementIds

} catch (e: JSONException) {
IterableLogger.e(TAG, e.toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,26 @@ public void testSyncEmbeddedMultiplePlacements() throws Exception {
assertEquals("grewdvb54ut87y", embeddedManager.getMessages(2L).get(0).getMetadata().getMessageId());
}

@Test
public void testSyncSpecifiedPlacement() throws Exception {
dispatcher.enqueueResponse("/embedded-messaging/messages?placementIds=0", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_single_placement_id_0.json")));
IterableEmbeddedManager embeddedManager = IterableApi.getInstance().getEmbeddedManager();

embeddedManager.syncMessages(new Long[] {0L});
shadowOf(getMainLooper()).idle();
assertEquals(1, embeddedManager.getMessages(0L).size());
assertNull(embeddedManager.getMessages(1L));
assertEquals("doibjo4590340oidiobnw", embeddedManager.getMessages(0L).get(0).getMetadata().getMessageId());

dispatcher.enqueueResponse("/embedded-messaging/messages?placementIds=2", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_single_placement_id_2.json")));

embeddedManager.syncMessages(new Long[] {2L});
shadowOf(getMainLooper()).idle();
assertNull(embeddedManager.getMessages(1L));
assertEquals(1, embeddedManager.getMessages(2L).size());
assertEquals("grewdvb54ut87y", embeddedManager.getMessages(2L).get(0).getMetadata().getMessageId());
}

@Test
public void testSyncEmptyPlacementsPayload() throws Exception {
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_multiple_1.json")));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"placements": [
{
"placementId": 0,
"embeddedMessages": [
{
"metadata": {
"messageId": "doibjo4590340oidiobnw",
"placementId": 0,
"campaignId": 2324,
"isProof": true
},
"elements": {
"title": "Iterable Coffee Shoppe",
"body": "SAVE 15% OFF NOW",
"mediaUrl": "http://placekitten.com/200/300",
"defaultAction": {
"type": "someType",
"data": "someData"
},
"buttons": [{
"id": "reward-button",
"title": "REDEEM MEOW",
"action": {
"type": "openUrl",
"data": "https://www.google.com"
}
}],
"text": [{
"id": "body",
"text": "CATS RULE!!!",
"label": "label"
}]
},
"payload": {
"someKey": "someValue"
}
}
]
}
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"placements": [
{
"placementId": 2,
"embeddedMessages": [
{
"metadata": {
"messageId": "grewdvb54ut87y",
"placementId": 2,
"campaignId": 1910,
"isProof": true
},
"elements": {
"title": "Experience the great outdoors",
"body": "Trips are going fast!",
"mediaUrl": "http://placekitten.com/200/300",
"defaultAction": {
"type": "someType",
"data": "someData"
},
"buttons": [{
"id": "reward-button",
"title": "REDEEM MEOW",
"action": {
"type": "openUrl",
"data": "https://www.google.com"
}
}],
"text": [{
"id": "body",
"text": "CATS RULE!!!",
"label": "label"
}]
},
"payload": {
"someKey": "someValue"
}
}
]
}
]
}

0 comments on commit 66b6932

Please sign in to comment.