Skip to content

Commit d5e3bba

Browse files
committed
Fixed tags resending when no changes were made
* Cached tags were being overridden instead of updated.
1 parent 27347f1 commit d5e3bba

File tree

2 files changed

+40
-4
lines changed

2 files changed

+40
-4
lines changed

OneSignalSDK/app/src/test/java/com/test/onesignal/MainOneSignalClassRunner.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,30 @@ public void shouldSendTags() throws Exception {
720720
Assert.assertEquals("value3", sentTags.getString("test3"));
721721
}
722722

723+
@Test
724+
public void shouldNotSendTagOnRepeats() throws Exception {
725+
OneSignalInit();
726+
OneSignal.sendTag("test1", "value1");
727+
threadAndTaskWait();
728+
Assert.assertEquals(2, ShadowOneSignalRestClient.networkCallCount);
729+
Assert.assertEquals(ONESIGNAL_APP_ID, ShadowOneSignalRestClient.lastPost.getString("app_id"));
730+
Assert.assertEquals("value1", ShadowOneSignalRestClient.lastPost.getJSONObject("tags").getString("test1"));
731+
732+
// Should only send new tag
733+
ShadowOneSignalRestClient.lastPost = null;
734+
OneSignal.sendTag("test2", "value2");
735+
threadAndTaskWait();
736+
Assert.assertEquals(3, ShadowOneSignalRestClient.networkCallCount);
737+
Assert.assertEquals("value2", ShadowOneSignalRestClient.lastPost.getJSONObject("tags").getString("test2"));
738+
739+
// Should not resend first tags
740+
ShadowOneSignalRestClient.lastPost = null;
741+
OneSignal.sendTag("test1", "value1");
742+
threadAndTaskWait();
743+
Assert.assertEquals(3, ShadowOneSignalRestClient.networkCallCount);
744+
Assert.assertNull(ShadowOneSignalRestClient.lastPost);
745+
}
746+
723747
@Test
724748
public void shouldSendTagsWithRequestBatching() throws Exception {
725749
OneSignalInit();

OneSignalSDK/onesignal/src/main/java/com/onesignal/OneSignalStateSynchronizer.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,9 +252,9 @@ private int getNotificationTypes() {
252252
private Set<String> getGroupChangeField(JSONObject cur, JSONObject changedTo) {
253253
try {
254254
if (cur.getDouble("lat") != changedTo.getDouble("lat")
255-
|| cur.getDouble("long") != changedTo.getDouble("long")
256-
|| cur.getDouble("loc_acc") != changedTo.getDouble("loc_acc")
257-
|| cur.getDouble("loc_type") != changedTo.getDouble("loc_type"))
255+
|| cur.getDouble("long") != changedTo.getDouble("long")
256+
|| cur.getDouble("loc_acc") != changedTo.getDouble("loc_acc")
257+
|| cur.getDouble("loc_type") != changedTo.getDouble("loc_type"))
258258
return LOCATION_FIELDS_SET;
259259
} catch (Throwable t) {
260260
return LOCATION_FIELDS_SET;
@@ -392,7 +392,17 @@ private void persistStateAfterSync(JSONObject inDependValues, JSONObject inSyncV
392392

393393
synchronized (syncLock) {
394394
if (inSyncValues.has("tags")) {
395-
JSONObject newTags = new JSONObject();
395+
JSONObject newTags;
396+
if (syncValues.has("tags")) {
397+
try {
398+
newTags = new JSONObject(syncValues.optString("tags"));
399+
} catch (JSONException e) {
400+
newTags = new JSONObject();
401+
}
402+
}
403+
else
404+
newTags = new JSONObject();
405+
396406
JSONObject curTags = inSyncValues.optJSONObject("tags");
397407
Iterator<String> keys = curTags.keys();
398408
String key;
@@ -402,6 +412,8 @@ private void persistStateAfterSync(JSONObject inDependValues, JSONObject inSyncV
402412
key = keys.next();
403413
if (!"".equals(curTags.optString(key)))
404414
newTags.put(key, curTags.optString(key));
415+
else
416+
newTags.remove(key);
405417
}
406418

407419
if (newTags.toString().equals("{}"))

0 commit comments

Comments
 (0)