Skip to content

Commit 66b6932

Browse files
authored
Merge pull request #879 from Iterable/evan/MOB-8301-add-placement-id-to-sync-messages
[MOB-8301] adds optional parameter to syncMessages
2 parents df4abfa + 3e84049 commit 66b6932

File tree

5 files changed

+134
-21
lines changed

5 files changed

+134
-21
lines changed

iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java

+21-16
Original file line numberDiff line numberDiff line change
@@ -232,14 +232,8 @@ void getEmbeddedMessages(@Nullable Long[] placementIds, @NonNull IterableHelper.
232232
requestJSON.put(IterableConstants.ITBL_SYSTEM_VERSION, Build.VERSION.RELEASE);
233233
requestJSON.put(IterableConstants.KEY_PACKAGE_NAME, authProvider.getContext().getPackageName());
234234

235-
if (placementIds != null) {
236-
StringBuilder pathBuilder = new StringBuilder(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES + "?");
237-
238-
for (Long placementId : placementIds) {
239-
pathBuilder.append("&placementIds=").append(placementId);
240-
}
241-
242-
String path = pathBuilder.toString();
235+
if (placementIds != null && placementIds.length != 0) {
236+
String path = getEmbeddedMessagesPath(placementIds);
243237
sendGetRequest(path, requestJSON, onCallback);
244238
} else {
245239
sendGetRequest(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES, requestJSON, onCallback);
@@ -260,14 +254,8 @@ void getEmbeddedMessages(@Nullable Long[] placementIds, @NonNull IterableHelper.
260254
requestJSON.put(IterableConstants.ITBL_SYSTEM_VERSION, Build.VERSION.RELEASE);
261255
requestJSON.put(IterableConstants.KEY_PACKAGE_NAME, authProvider.getContext().getPackageName());
262256

263-
if (placementIds != null) {
264-
StringBuilder pathBuilder = new StringBuilder(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES + "?");
265-
266-
for (Long placementId : placementIds) {
267-
pathBuilder.append("&placementIds=").append(placementId);
268-
}
269-
270-
String path = pathBuilder.toString();
257+
if (placementIds != null && placementIds.length != 0) {
258+
String path = getEmbeddedMessagesPath(placementIds);
271259
sendGetRequest(path, requestJSON, onSuccess, onFailure);
272260
} else {
273261
sendGetRequest(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES, requestJSON, onSuccess, onFailure);
@@ -278,6 +266,23 @@ void getEmbeddedMessages(@Nullable Long[] placementIds, @NonNull IterableHelper.
278266
}
279267
}
280268

269+
@NonNull
270+
private static String getEmbeddedMessagesPath(Long[] placementIds) {
271+
StringBuilder pathBuilder = new StringBuilder(IterableConstants.ENDPOINT_GET_EMBEDDED_MESSAGES + "?");
272+
273+
boolean isFirst = true;
274+
for (Long placementId : placementIds) {
275+
if (isFirst) {
276+
pathBuilder.append("placementIds=").append(placementId);
277+
isFirst = false;
278+
} else {
279+
pathBuilder.append("&placementIds=").append(placementId);
280+
}
281+
}
282+
283+
return pathBuilder.toString();
284+
}
285+
281286
public void trackInAppOpen(@NonNull String messageId) {
282287
JSONObject requestJSON = new JSONObject();
283288

iterableapi/src/main/java/com/iterable/iterableapi/IterableEmbeddedManager.kt

+9-5
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class IterableEmbeddedManager : IterableActivityMonitor.AppStateCallback
1313

1414
// region variables
1515
private var localPlacementMessagesMap = mutableMapOf<Long, List<IterableEmbeddedMessage>>()
16-
private var placementIds = mutableListOf<Long>()
16+
private var localPlacementIds = mutableListOf<Long>()
1717

1818
private var updateHandleListeners = mutableListOf<IterableEmbeddedUpdateHandler>()
1919
private var iterableApi: IterableApi
@@ -77,15 +77,19 @@ public class IterableEmbeddedManager : IterableActivityMonitor.AppStateCallback
7777
}
7878

7979
fun getPlacementIds(): List<Long> {
80-
return placementIds
80+
return localPlacementIds
8181
}
8282

83-
//Network call to get the embedded messages
8483
fun syncMessages() {
84+
syncMessages(emptyArray<Long>())
85+
}
86+
87+
//Network call to get the embedded messages
88+
fun syncMessages(placementIds: Array<Long>) {
8589
if (iterableApi.config.enableEmbeddedMessaging) {
8690
IterableLogger.v(TAG, "Syncing messages...")
8791

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

137141
//store placements from payload for next comparison
138-
placementIds = currentPlacementIds
142+
localPlacementIds = currentPlacementIds
139143

140144
} catch (e: JSONException) {
141145
IterableLogger.e(TAG, e.toString())

iterableapi/src/test/java/com/iterable/iterableapi/IterableEmbeddedManagerTest.java

+20
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,26 @@ public void testSyncEmbeddedMultiplePlacements() throws Exception {
8787
assertEquals("grewdvb54ut87y", embeddedManager.getMessages(2L).get(0).getMetadata().getMessageId());
8888
}
8989

90+
@Test
91+
public void testSyncSpecifiedPlacement() throws Exception {
92+
dispatcher.enqueueResponse("/embedded-messaging/messages?placementIds=0", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_single_placement_id_0.json")));
93+
IterableEmbeddedManager embeddedManager = IterableApi.getInstance().getEmbeddedManager();
94+
95+
embeddedManager.syncMessages(new Long[] {0L});
96+
shadowOf(getMainLooper()).idle();
97+
assertEquals(1, embeddedManager.getMessages(0L).size());
98+
assertNull(embeddedManager.getMessages(1L));
99+
assertEquals("doibjo4590340oidiobnw", embeddedManager.getMessages(0L).get(0).getMetadata().getMessageId());
100+
101+
dispatcher.enqueueResponse("/embedded-messaging/messages?placementIds=2", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_single_placement_id_2.json")));
102+
103+
embeddedManager.syncMessages(new Long[] {2L});
104+
shadowOf(getMainLooper()).idle();
105+
assertNull(embeddedManager.getMessages(1L));
106+
assertEquals(1, embeddedManager.getMessages(2L).size());
107+
assertEquals("grewdvb54ut87y", embeddedManager.getMessages(2L).get(0).getMetadata().getMessageId());
108+
}
109+
90110
@Test
91111
public void testSyncEmptyPlacementsPayload() throws Exception {
92112
dispatcher.enqueueResponse("/embedded-messaging/messages", new MockResponse().setBody(IterableTestUtils.getResourceString("embedded_payload_multiple_1.json")));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"placements": [
3+
{
4+
"placementId": 0,
5+
"embeddedMessages": [
6+
{
7+
"metadata": {
8+
"messageId": "doibjo4590340oidiobnw",
9+
"placementId": 0,
10+
"campaignId": 2324,
11+
"isProof": true
12+
},
13+
"elements": {
14+
"title": "Iterable Coffee Shoppe",
15+
"body": "SAVE 15% OFF NOW",
16+
"mediaUrl": "http://placekitten.com/200/300",
17+
"defaultAction": {
18+
"type": "someType",
19+
"data": "someData"
20+
},
21+
"buttons": [{
22+
"id": "reward-button",
23+
"title": "REDEEM MEOW",
24+
"action": {
25+
"type": "openUrl",
26+
"data": "https://www.google.com"
27+
}
28+
}],
29+
"text": [{
30+
"id": "body",
31+
"text": "CATS RULE!!!",
32+
"label": "label"
33+
}]
34+
},
35+
"payload": {
36+
"someKey": "someValue"
37+
}
38+
}
39+
]
40+
}
41+
]
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"placements": [
3+
{
4+
"placementId": 2,
5+
"embeddedMessages": [
6+
{
7+
"metadata": {
8+
"messageId": "grewdvb54ut87y",
9+
"placementId": 2,
10+
"campaignId": 1910,
11+
"isProof": true
12+
},
13+
"elements": {
14+
"title": "Experience the great outdoors",
15+
"body": "Trips are going fast!",
16+
"mediaUrl": "http://placekitten.com/200/300",
17+
"defaultAction": {
18+
"type": "someType",
19+
"data": "someData"
20+
},
21+
"buttons": [{
22+
"id": "reward-button",
23+
"title": "REDEEM MEOW",
24+
"action": {
25+
"type": "openUrl",
26+
"data": "https://www.google.com"
27+
}
28+
}],
29+
"text": [{
30+
"id": "body",
31+
"text": "CATS RULE!!!",
32+
"label": "label"
33+
}]
34+
},
35+
"payload": {
36+
"someKey": "someValue"
37+
}
38+
}
39+
]
40+
}
41+
]
42+
}

0 commit comments

Comments
 (0)