diff --git a/CHANGELOG.md b/CHANGELOG.md index 41e4cc5a7..d3919d550 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] - Added support for in-app messages in fully Jetpack Compose apps using a Dialog-based renderer (`IterableInAppDialogNotification`), removing the requirement for a `FragmentActivity`. +- Added `appAlreadyRunning` field to `trackPushOpen`. New `trackPushOpen(int, int, String, boolean, JSONObject)` overload sends the value through; existing overloads default to `false`. ## [3.8.0] ### Added diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java index 3f45cafaa..a49ab8286 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApi.java @@ -1274,7 +1274,7 @@ public void registerDeviceToken(@NonNull String deviceToken) { } public void trackPushOpen(int campaignId, int templateId, @NonNull String messageId) { - queueOrExecute(() -> trackPushOpen(campaignId, templateId, messageId, null), "trackPushOpen(" + campaignId + ", " + templateId + ", " + maskPII(messageId) + ")"); + trackPushOpen(campaignId, templateId, messageId, false, null); } /** @@ -1283,14 +1283,26 @@ public void trackPushOpen(int campaignId, int templateId, @NonNull String messag * @param templateId */ public void trackPushOpen(int campaignId, int templateId, @NonNull String messageId, @Nullable JSONObject dataFields) { + trackPushOpen(campaignId, templateId, messageId, false, dataFields); + } + + /** + * Tracks when a push notification is opened on device. + * @param campaignId + * @param templateId + * @param messageId + * @param appAlreadyRunning Whether the app was already running when the push was received. + * @param dataFields + */ + public void trackPushOpen(int campaignId, int templateId, @NonNull String messageId, boolean appAlreadyRunning, @Nullable JSONObject dataFields) { queueOrExecute(() -> { if (messageId == null) { IterableLogger.e(TAG, "messageId is null"); return; } - apiClient.trackPushOpen(campaignId, templateId, messageId, dataFields); - }, "trackPushOpen(" + campaignId + ", " + templateId + ", " + maskPII(messageId) + ", dataFields)"); + apiClient.trackPushOpen(campaignId, templateId, messageId, appAlreadyRunning, dataFields); + }, "trackPushOpen(" + campaignId + ", " + templateId + ", " + maskPII(messageId) + ", " + appAlreadyRunning + ", dataFields)"); } /** diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java index 924ebc24e..e8e685b5e 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableApiClient.java @@ -587,13 +587,14 @@ public void trackEmbeddedSession(@NonNull IterableEmbeddedSession session) { } } - protected void trackPushOpen(int campaignId, int templateId, @NonNull String messageId, @Nullable JSONObject dataFields) { + protected void trackPushOpen(int campaignId, int templateId, @NonNull String messageId, boolean appAlreadyRunning, @Nullable JSONObject dataFields) { JSONObject requestJSON = new JSONObject(); try { if (dataFields == null) { dataFields = new JSONObject(); } + dataFields.put(IterableConstants.KEY_APP_ALREADY_RUNNING, appAlreadyRunning); addEmailOrUserIdToJson(requestJSON); requestJSON.put(IterableConstants.KEY_CAMPAIGN_ID, campaignId); diff --git a/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java b/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java index eb2d3fc4d..c3ac914a4 100644 --- a/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java +++ b/iterableapi/src/main/java/com/iterable/iterableapi/IterableConstants.java @@ -22,6 +22,7 @@ public final class IterableConstants { public static final String HEADER_SDK_AUTHORIZATION = "Authorization"; public static final String HEADER_SDK_AUTH_FORMAT = "Bearer "; public static final String HEADER_SDK_PROCESSOR_TYPE = "SDK-Request-Processor"; + public static final String KEY_APP_ALREADY_RUNNING = "appAlreadyRunning"; public static final String KEY_APPLICATION_NAME = "applicationName"; public static final String KEY_CAMPAIGN_ID = "campaignId"; public static final String KEY_CURRENT_EMAIL = "currentEmail";