Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MOB-8301] adds optional parameter to syncMessages #879

Merged
merged 9 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 ->
evantk91 marked this conversation as resolved.
Show resolved Hide resolved
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!!!",
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a dog person I can not let this one pass I'm sorry!

"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"
}
}
]
}
]
}
Loading