Skip to content

Commit 38ef376

Browse files
committed
Storing pageIds to prefs to fix double impression
1 parent d865c22 commit 38ef376

File tree

3 files changed

+35
-25
lines changed

3 files changed

+35
-25
lines changed

Examples/OneSignalDemo/local.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
# Location of the SDK. This is only used by Gradle.
55
# For customization when using a Version Control System, please read the
66
# header note.
7-
#Wed Sep 09 11:15:20 PDT 2020
7+
#Tue Jul 23 19:22:28 PDT 2019
88
ndk.dir=/Users/mikechoch/Library/Android/sdk/ndk-bundle
9-
sdk.dir=/Users/elliotmawby/Library/Android/sdk
9+
sdk.dir=/Users/mikechoch/Library/Android/sdk

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,6 @@ class OSInAppMessage {
4848
@NonNull
4949
private Set<String> clickedClickIds;
5050

51-
/**
52-
* IAM carousel pages viewed
53-
*/
54-
@NonNull
55-
private Set<String> viewedPageIds = new HashSet<>();
56-
5751
/**
5852
* Reference to redisplay properties
5953
*/
@@ -216,13 +210,6 @@ void addClickId(String clickId) {
216210
clickedClickIds.add(clickId);
217211
}
218212

219-
@NonNull
220-
Set<String> getViewedPageIds() { return viewedPageIds; }
221-
222-
void clearPageIds() { viewedPageIds.clear(); }
223-
224-
void addPageId(String pageId) { viewedPageIds.add(pageId); }
225-
226213
OSInAppMessageRedisplayStats getRedisplayStats() {
227214
return redisplayStats;
228215
}

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

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ class OSInAppMessageController implements OSDynamicTriggerControllerObserver, OS
5151
// This means their impression has been successfully posted to our backend and should not be counted again
5252
@NonNull
5353
final private Set<String> impressionedMessages;
54+
// This means their impression has been successfully posted to our backend and should not be counted again
55+
@NonNull
56+
final private Set<String> viewedPageIds;
5457
// IAM clicks that have been successfully posted to our backend and should not be counted again
5558
@NonNull
5659
final private Set<String> clickedClickIds;
@@ -75,6 +78,7 @@ protected OSInAppMessageController(OneSignalDbHelper dbHelper, OSLogger logger)
7578
dismissedMessages = OSUtils.newConcurrentSet();
7679
messageDisplayQueue = new ArrayList<>();
7780
impressionedMessages = OSUtils.newConcurrentSet();
81+
viewedPageIds = OSUtils.newConcurrentSet();
7882
clickedClickIds = OSUtils.newConcurrentSet();
7983
triggerController = new OSTriggerController(this);
8084
systemConditionController = new OSSystemConditionController(this);
@@ -96,6 +100,14 @@ protected OSInAppMessageController(OneSignalDbHelper dbHelper, OSLogger logger)
96100
if (tempImpressionsSet != null)
97101
impressionedMessages.addAll(tempImpressionsSet);
98102

103+
Set<String> tempPageImpressionsSet = OneSignalPrefs.getStringSet(
104+
OneSignalPrefs.PREFS_ONESIGNAL,
105+
OneSignalPrefs.PREFS_OS_PAGE_IMPRESSIONED_IAMS,
106+
null
107+
);
108+
if (tempPageImpressionsSet != null)
109+
viewedPageIds.addAll(tempPageImpressionsSet);
110+
99111
Set<String> tempClickedMessageIdsSet = OneSignalPrefs.getStringSet(
100112
OneSignalPrefs.PREFS_ONESIGNAL,
101113
OneSignalPrefs.PREFS_OS_CLICKED_CLICK_IDS_IAMS,
@@ -417,18 +429,30 @@ else if (action.getUrlTarget() == OSInAppMessageAction.OSInAppMessageActionUrlTy
417429
}
418430
}
419431

432+
private void saveViewedPageIdsToPrefs() {
433+
OneSignalPrefs.saveStringSet(
434+
OneSignalPrefs.PREFS_ONESIGNAL,
435+
OneSignalPrefs.PREFS_OS_PAGE_IMPRESSIONED_IAMS,
436+
// Post success, store impressioned pages to disk
437+
viewedPageIds);
438+
}
439+
420440
private void fireRESTCallForPageChange(@NonNull final OSInAppMessage message, @NonNull final OSInAppMessagePage page) {
421441
final String variantId = variantIdForMessage(message);
422442
if (variantId == null)
423443
return;
424444

425445
final String pageId = page.getPageId();
426446

447+
final String messagePrefixedPageId = message.messageId + pageId;
448+
427449
// Never send multiple page impressions for the same message UUID unless that page change is from an IAM with redisplay
428-
if (message.getViewedPageIds().contains(pageId))
450+
if (viewedPageIds.contains(messagePrefixedPageId)) {
451+
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.VERBOSE, "Already sent page impression for id: " + pageId);
429452
return;
453+
}
430454

431-
message.addPageId(page.getPageId());
455+
viewedPageIds.add(messagePrefixedPageId);
432456

433457
try {
434458
JSONObject json = new JSONObject() {{
@@ -443,18 +467,14 @@ private void fireRESTCallForPageChange(@NonNull final OSInAppMessage message, @N
443467
@Override
444468
void onSuccess(String response) {
445469
printHttpSuccessForInAppMessageRequest("page impression", response);
446-
/*OneSignalPrefs.saveStringSet(
447-
OneSignalPrefs.PREFS_ONESIGNAL,
448-
OneSignalPrefs.PREFS_OS_PAGE_IMPRESSIONED_IAMS,
449-
// Post success, store impressioned page to disk
450-
impressionedMessages);*/
470+
saveViewedPageIdsToPrefs();
451471
}
452472

453473
@Override
454474
void onFailure(int statusCode, String response, Throwable throwable) {
455475
printHttpErrorForInAppMessageRequest("page impression", statusCode, response);
456-
// Post failed, impressionedMessage should be removed and this way another post can be attempted
457-
message.getViewedPageIds().remove(page.getPageId());
476+
// Post failed, viewed page should be removed and this way another post can be attempted
477+
viewedPageIds.remove(messagePrefixedPageId);
458478
}
459479
});
460480
} catch (JSONException e) {
@@ -548,8 +568,11 @@ private void setDataForRedisplay(OSInAppMessage message) {
548568

549569
dismissedMessages.remove(message.messageId);
550570
impressionedMessages.remove(message.messageId);
571+
// Pages from different IAMs should not impact each other so we can clear the entire
572+
// list when an IAM is dismissed or we are re-displaying the same one
573+
viewedPageIds.clear();
574+
saveViewedPageIdsToPrefs();
551575
message.clearClickIds();
552-
message.clearPageIds();
553576
}
554577
}
555578
}

0 commit comments

Comments
 (0)