Skip to content

Commit 56be7e9

Browse files
committed
Pull request #472: - fixed in app click reports, and provided maximum retry limit
Merge in MML/infobip-mobile-messaging-android from bugfix/MM-6966-android-fix-inapp-click-reports to master Squashed commit of the following: commit 3922cb95643e94090748bd44e41ba7627f0365f0 Author: ikresic <ivan.kresic@infobip.com> Date: Thu Dec 5 15:05:32 2024 +0100 - fixed in app click reports, and provided maximum retry limit commit 33296c7081223d4ecc53bfdaac1242b45ed55cb2 Author: ikresic <ivan.kresic@infobip.com> Date: Thu Dec 5 15:02:53 2024 +0100 - fixed in app click reports, and provided maximum retry limit commit c6a01f4400a218cf18ff7d3d6ef46088531a82a6 Author: ikresic <ivan.kresic@infobip.com> Date: Thu Dec 5 14:45:03 2024 +0100 - fixed in app click reports, and provided maximum retry limit
1 parent 5cf5b7d commit 56be7e9

File tree

5 files changed

+35
-25
lines changed

5 files changed

+35
-25
lines changed

infobip-mobile-messaging-android-sdk/src/androidTest/java/org/infobip/mobile/messaging/ClickUrlReporterTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public void setUp() throws Exception {
3333

3434
MobileMessagingStats stats = mobileMessagingCore.getStats();
3535
executor = mock(Executor.class);
36-
inAppClickReporter = new InAppClickReporter(mobileMessagingCore, stats, executor, broadcaster, batchReporter, retryPolicy);
36+
inAppClickReporter = new InAppClickReporter(mobileMessagingCore, context, stats, executor, broadcaster, batchReporter, retryPolicy);
3737
}
3838

3939
@Test

infobip-mobile-messaging-android-sdk/src/main/java/org/infobip/mobile/messaging/MobileMessagingCore.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ private void initCustomChannels() {
299299

300300
CharSequence appName = SoftwareInformation.getAppName(context);
301301
if (channelName != null)
302-
appName = appName +" "+ channelName;
302+
appName = appName + " " + channelName;
303303

304304

305305
NotificationChannelCompat.Builder notificationChannelBuilder = new NotificationChannelCompat.Builder(channelId, NotificationManagerCompat.IMPORTANCE_DEFAULT)
@@ -1006,7 +1006,7 @@ public String[] getUnreportedInAppClickActions() {
10061006
return PreferenceHelper.findStringArray(context, MobileMessagingProperty.INFOBIP_UNREPORTED_IN_APP_CLICK_URLS);
10071007
}
10081008

1009-
public void removeUnreportedInAppClickActions(final String... clickUrls) {
1009+
public void removeReportedInAppClickActions(final String... clickUrls) {
10101010
PreferenceHelper.deleteFromStringArray(context, MobileMessagingProperty.INFOBIP_UNREPORTED_IN_APP_CLICK_URLS, clickUrls);
10111011
}
10121012

@@ -2036,7 +2036,7 @@ private SeenStatusReporter seenStatusReporter() {
20362036
@NonNull
20372037
private InAppClickReporter inAppClickReporter() {
20382038
if (inAppClickReporter == null) {
2039-
inAppClickReporter = new InAppClickReporter(this, stats, registrationAlignedExecutor, broadcaster, new BatchReporter(PreferenceHelper.findLong(context, MobileMessagingProperty.BATCH_REPORTING_DELAY)), retryPolicyProvider.DEFAULT());
2039+
inAppClickReporter = new InAppClickReporter(this, context, stats, registrationAlignedExecutor, broadcaster, new BatchReporter(PreferenceHelper.findLong(context, MobileMessagingProperty.BATCH_REPORTING_DELAY)), retryPolicyProvider.DEFAULT());
20402040
}
20412041
return inAppClickReporter;
20422042
}

infobip-mobile-messaging-android-sdk/src/main/java/org/infobip/mobile/messaging/interactive/inapp/view/InAppWebViewDialog.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public class InAppWebViewDialog implements InAppWebView, ActivityLifecycleListen
5858
public static final String PRIMARY_BUTTON_CLICKED = "primary_button";
5959
public static final int ACTION_TYPE_OPEN = 1;
6060
public static final int ACTION_TYPE_CLOSE = 0;
61+
public static final String SET_START_ATTEMPTS = "0";
6162
private final Callback callback;
6263
private AndroidBroadcaster coreBroadcaster;
6364
private NotificationAction[] action;
@@ -182,7 +183,8 @@ private void reportInAppClick(String clickType) {
182183
if (StringUtils.isNotBlank(message.clickUrl)) {
183184
String temp = StringUtils.concat(message.clickUrl, clickType, StringUtils.COMMA_WITH_SPACE);
184185
String clickReport = StringUtils.concat(temp, userAgent, StringUtils.COMMA_WITH_SPACE);
185-
MobileMessagingCore.getInstance(getActivity()).reportInAppClick(clickReport);
186+
String clickToReport = StringUtils.concat(clickReport, SET_START_ATTEMPTS, StringUtils.COMMA_WITH_SPACE);
187+
MobileMessagingCore.getInstance(getActivity()).reportInAppClick(clickToReport);
186188
}
187189
}
188190
}

infobip-mobile-messaging-android-sdk/src/main/java/org/infobip/mobile/messaging/mobileapi/inapp/InAppClickReporter.java

+24-20
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.infobip.mobile.messaging.mobileapi.inapp;
22

3+
import android.content.Context;
4+
35
import androidx.annotation.NonNull;
46

57
import org.infobip.mobile.messaging.MobileMessagingCore;
8+
import org.infobip.mobile.messaging.MobileMessagingProperty;
69
import org.infobip.mobile.messaging.api.support.util.ApiConstants;
710
import org.infobip.mobile.messaging.logging.MobileMessagingLogger;
811
import org.infobip.mobile.messaging.mobileapi.BatchReporter;
@@ -12,11 +15,10 @@
1215
import org.infobip.mobile.messaging.platform.Broadcaster;
1316
import org.infobip.mobile.messaging.stats.MobileMessagingStats;
1417
import org.infobip.mobile.messaging.stats.MobileMessagingStatsError;
18+
import org.infobip.mobile.messaging.util.PreferenceHelper;
1519
import org.infobip.mobile.messaging.util.StringUtils;
1620

17-
import java.io.BufferedReader;
1821
import java.io.IOException;
19-
import java.io.InputStreamReader;
2022
import java.net.HttpURLConnection;
2123
import java.net.URL;
2224
import java.util.HashMap;
@@ -25,6 +27,7 @@
2527

2628
public class InAppClickReporter {
2729
private final MobileMessagingCore mobileMessagingCore;
30+
private final Context context;
2831
private final MobileMessagingStats stats;
2932
private final Executor executor;
3033
private final Broadcaster broadcaster;
@@ -33,12 +36,14 @@ public class InAppClickReporter {
3336

3437
public InAppClickReporter(
3538
MobileMessagingCore mobileMessagingCore,
39+
Context context,
3640
MobileMessagingStats stats,
3741
Executor executor,
3842
Broadcaster broadcaster,
3943
BatchReporter batchReporter,
4044
MRetryPolicy retryPolicy) {
4145
this.mobileMessagingCore = mobileMessagingCore;
46+
this.context = context;
4247
this.stats = stats;
4348
this.executor = executor;
4449
this.broadcaster = broadcaster;
@@ -52,6 +57,7 @@ public void sync() {
5257
return;
5358
}
5459

60+
5561
batchReporter.put(() -> new MRetryableTask<Void, String[]>() {
5662
@Override
5763
public String[] run(Void[] voids) {
@@ -66,12 +72,10 @@ public String[] run(Void[] voids) {
6672

6773
MobileMessagingLogger.v("INAPPCLICK >>>");
6874
for (String clickAction : clickActions) {
69-
String[] payload = clickAction.split(StringUtils.COMMA_WITH_SPACE); // [0] - clickUrl, [1] - buttonIdx, [2] - userAgent
70-
makeHttpRequest(payload[0], getHeaders(payload));
75+
makeHttpRequest(clickAction);
7176
}
7277
MobileMessagingLogger.v("INAPPCLICK DONE <<<");
7378

74-
mobileMessagingCore.removeUnreportedInAppClickActions(clickActions);
7579
return clickActions;
7680
}
7781

@@ -103,30 +107,30 @@ public void error(Throwable error) {
103107
return headers;
104108
}
105109

106-
private void makeHttpRequest(String urlString, Map<String, String> headers) {
107-
URL url;
110+
private void makeHttpRequest(String clickAction) {
111+
String[] payload = clickAction.split(StringUtils.COMMA_WITH_SPACE); // [0] - clickUrl, [1] - buttonIdx, [2] - userAgent, [3] - attempt
112+
if (Integer.parseInt(payload[3]) == retryPolicy.getMaxRetries()) {
113+
mobileMessagingCore.removeReportedInAppClickActions(clickAction);
114+
return;
115+
}
108116
try {
109-
url = new URL(urlString);
110-
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
117+
HttpURLConnection conn = (HttpURLConnection) new URL(payload[0]).openConnection();
111118

112119
conn.setRequestMethod("GET");
113120

114-
for (Map.Entry<String, String> header : headers.entrySet()) {
121+
for (Map.Entry<String, String> header : getHeaders(payload).entrySet()) {
115122
conn.setRequestProperty(header.getKey(), header.getValue());
116123
}
117124

118125
int responseCode = conn.getResponseCode();
119-
MobileMessagingLogger.i("Response Code : " + responseCode);
120-
121-
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
122-
String inputLine;
123-
StringBuilder response = new StringBuilder();
124-
125-
while ((inputLine = in.readLine()) != null) {
126-
response.append(inputLine);
126+
MobileMessagingLogger.d("Response Code : " + responseCode);
127+
if (responseCode == 200) {
128+
mobileMessagingCore.removeReportedInAppClickActions(clickAction);
129+
} else {
130+
mobileMessagingCore.removeReportedInAppClickActions(clickAction);
131+
payload[3] = String.valueOf(Integer.parseInt(payload[3]) + 1);
132+
PreferenceHelper.appendToStringArray(context, MobileMessagingProperty.INFOBIP_UNREPORTED_IN_APP_CLICK_URLS, StringUtils.concat(payload, StringUtils.COMMA_WITH_SPACE));
127133
}
128-
in.close();
129-
130134
} catch (IOException e) {
131135
throw new RuntimeException(e);
132136
}

infobip-mobile-messaging-android-sdk/src/main/java/org/infobip/mobile/messaging/util/StringUtils.java

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ public static String concat(String s1, String s2, String separator) {
3131
return String.format(Locale.getDefault(), "%s%s%s", s1, separator, s2);
3232
}
3333

34+
public static String concat(String[] stringArray, String separator) {
35+
return StringUtils.join(separator, stringArray);
36+
}
37+
3438
public static String join(CharSequence delimiter, CharSequence... values) {
3539
return join(delimiter, "", "", values);
3640
}

0 commit comments

Comments
 (0)