Skip to content

Commit 00bac49

Browse files
authored
Merge pull request #557 from adjust/v4330
Version 4.33.0
2 parents 98a78dd + 999f10f commit 00bac49

File tree

39 files changed

+634
-451
lines changed

39 files changed

+634
-451
lines changed

Adjust/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ ext {
99
coreMinSdkVersion = 9
1010
coreCompileSdkVersion = 33
1111
coreTargetSdkVersion = 33
12-
coreVersionName = '4.32.0'
12+
coreVersionName = '4.33.0'
1313
defaultVersionCode = 1
1414
webbridgeMinSdkVersion = 17
15+
samsungReferrerMinSdkVersion = 18
1516

1617
// POM.
1718
adjustGroupId = 'com.adjust.sdk'

Adjust/example-app-webbridge/src/main/java/com/example/examples/MainActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ protected void onCreate(Bundle savedInstanceState) {
2323

2424
AdjustBridge.registerAndGetInstance(getApplication(), webView);
2525
try {
26+
// webView.loadUrl("file:///android_asset/AdjustExample-WebView.html");
2627
webView.loadUrl("https://adjustweb.neocities.org");
2728
} catch (Exception e) {
2829
e.printStackTrace();

Adjust/sdk-core/build.gradle

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,18 @@ artifacts {
9393

9494
publishing {
9595
publications {
96-
mavenAndroidCore(MavenPublication) {
97-
customizePom(pom)
98-
groupId rootProject.ext.adjustGroupId
99-
artifactId 'adjust-android'
100-
version rootProject.ext.coreVersionName
101-
102-
artifact adjustCoreJarRelease
103-
artifact adjustCoreAndroidJavadocsJar
104-
artifact adjustCoreAndroidSourcesJar
105-
}
106-
107-
mavenAndroidCoreAAR(MavenPublication) {
96+
// mavenAndroidCoreJar(MavenPublication) {
97+
// customizePomForJar(pom)
98+
// groupId rootProject.ext.adjustGroupId
99+
// artifactId 'adjust-android'
100+
// version rootProject.ext.coreVersionName
101+
//
102+
// artifact adjustCoreJarRelease
103+
// artifact adjustCoreAndroidJavadocsJar
104+
// artifact adjustCoreAndroidSourcesJar
105+
// }
106+
107+
mavenAndroidCoreAar(MavenPublication) {
108108
customizePomForAar(pom)
109109
groupId rootProject.ext.adjustGroupId
110110
artifactId 'adjust-android'
@@ -137,7 +137,7 @@ publishing {
137137
}
138138
}
139139

140-
def customizePom(pom) {
140+
def customizePomForJar(pom) {
141141
pom.withXml {
142142
// Add all items necessary for maven central publication.
143143
asNode().children().last() + {
@@ -216,9 +216,9 @@ def customizePomForAar(pom) {
216216
}
217217

218218
model {
219-
tasks.generatePomFileForMavenAndroidCorePublication {
220-
destination = file("${project.buildDir}/generated-pom.xml")
221-
}
219+
// tasks.generatePomFileForMavenAndroidCoreJarPublication {
220+
// destination = file("${project.buildDir}/generated-pom.xml")
221+
// }
222222
/* TODO check if/how to replace this tasks
223223
tasks.publishMavenAndroidCorePublicationToMavenLocal {
224224
dependsOn project.tasks.signArchives
@@ -227,7 +227,7 @@ model {
227227
dependsOn project.tasks.signArchives
228228
}
229229
*/
230-
tasks.generatePomFileForMavenAndroidCoreAARPublication {
230+
tasks.generatePomFileForMavenAndroidCoreAarPublication {
231231
destination = file("${project.buildDir}/generated-pom.xml")
232232
}
233233
/* TODO check if/how to replace this tasks
@@ -241,6 +241,6 @@ model {
241241
}
242242

243243
signing {
244-
sign publishing.publications.mavenAndroidCore
245-
sign publishing.publications.mavenAndroidCoreAAR
244+
// sign publishing.publications.mavenAndroidCoreJar
245+
sign publishing.publications.mavenAndroidCoreAar
246246
}

Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
import static com.adjust.sdk.Constants.ACTIVITY_STATE_FILENAME;
3838
import static com.adjust.sdk.Constants.ATTRIBUTION_FILENAME;
39+
import static com.adjust.sdk.Constants.REFERRER_API_SAMSUNG;
3940
import static com.adjust.sdk.Constants.REFERRER_API_XIAOMI;
4041
import static com.adjust.sdk.Constants.SESSION_CALLBACK_PARAMETERS_FILENAME;
4142
import static com.adjust.sdk.Constants.SESSION_PARTNER_PARAMETERS_FILENAME;
@@ -1257,6 +1258,7 @@ private void processSessionI() {
12571258
// Try to check if there's new referrer information.
12581259
installReferrer.startConnection();
12591260
installReferrerHuawei.readReferrer();
1261+
readInstallReferrerSamsung();
12601262
readInstallReferrerXiaomi();
12611263

12621264
return;
@@ -1265,6 +1267,18 @@ private void processSessionI() {
12651267
logger.verbose("Time span since last activity too short for a new subsession");
12661268
}
12671269

1270+
private void readInstallReferrerSamsung() {
1271+
executor.submit(new Runnable() {
1272+
@Override
1273+
public void run() {
1274+
ReferrerDetails referrerDetails = Reflection.getSamsungReferrer(getContext(), logger);
1275+
if (referrerDetails != null) {
1276+
sendInstallReferrer(referrerDetails, REFERRER_API_SAMSUNG);
1277+
}
1278+
}
1279+
});
1280+
}
1281+
12681282
private void readInstallReferrerXiaomi() {
12691283
executor.submit(new Runnable() {
12701284
@Override
@@ -1703,6 +1717,7 @@ private void checkAfterNewStartI(SharedPreferencesManager sharedPreferencesManag
17031717
// try to read and send the install referrer
17041718
installReferrer.startConnection();
17051719
installReferrerHuawei.readReferrer();
1720+
readInstallReferrerSamsung();
17061721
readInstallReferrerXiaomi();
17071722
}
17081723

@@ -2606,6 +2621,19 @@ private void checkForInstallReferrerInfo(final SdkClickResponseData responseData
26062621
return;
26072622
}
26082623

2624+
boolean isInstallReferrerSamsung =
2625+
responseData.referrerApi != null &&
2626+
(responseData.referrerApi.equalsIgnoreCase(REFERRER_API_SAMSUNG));
2627+
2628+
if (isInstallReferrerSamsung) {
2629+
activityState.clickTimeSamsung = responseData.clickTime;
2630+
activityState.installBeginSamsung = responseData.installBegin;
2631+
activityState.installReferrerSamsung = responseData.installReferrer;
2632+
2633+
writeActivityStateI();
2634+
return;
2635+
}
2636+
26092637
boolean isInstallReferrerXiaomi =
26102638
responseData.referrerApi != null &&
26112639
(responseData.referrerApi.equalsIgnoreCase(REFERRER_API_XIAOMI));
@@ -2616,6 +2644,7 @@ private void checkForInstallReferrerInfo(final SdkClickResponseData responseData
26162644
activityState.installReferrerXiaomi = responseData.installReferrer;
26172645
activityState.clickTimeServerXiaomi = responseData.clickTimeServer;
26182646
activityState.installBeginServerXiaomi = responseData.installBeginServer;
2647+
activityState.installVersionXiaomi = responseData.installVersion;
26192648

26202649
writeActivityStateI();
26212650
return;

Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityState.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ public class ActivityState implements Serializable, Cloneable {
5656
new ObjectStreamField("installReferrerXiaomi", String.class),
5757
new ObjectStreamField("clickTimeServerXiaomi", long.class),
5858
new ObjectStreamField("installBeginServerXiaomi", long.class),
59+
new ObjectStreamField("installVersionXiaomi", String.class),
60+
new ObjectStreamField("clickTimeSamsung", long.class),
61+
new ObjectStreamField("installBeginSamsung", long.class),
62+
new ObjectStreamField("installReferrerSamsung", String.class),
5963
};
6064

6165
// persistent data
@@ -103,6 +107,11 @@ public class ActivityState implements Serializable, Cloneable {
103107
protected String installReferrerXiaomi;
104108
protected long clickTimeServerXiaomi;
105109
protected long installBeginServerXiaomi;
110+
protected String installVersionXiaomi;
111+
112+
protected long clickTimeSamsung;
113+
protected long installBeginSamsung;
114+
protected String installReferrerSamsung;
106115

107116
protected ActivityState() {
108117
logger = AdjustFactory.getLogger();
@@ -140,6 +149,10 @@ protected ActivityState() {
140149
installReferrerXiaomi = null;
141150
clickTimeServerXiaomi = 0;
142151
installBeginServerXiaomi = 0;
152+
installVersionXiaomi = null;
153+
clickTimeSamsung = 0;
154+
installBeginSamsung = 0;
155+
installReferrerSamsung = null;
143156
}
144157

145158
protected void resetSessionAttributes(long now) {
@@ -215,6 +228,10 @@ public boolean equals(Object other) {
215228
if (!Util.equalString(installReferrerXiaomi, otherActivityState.installReferrerXiaomi)) return false;
216229
if (!Util.equalLong(clickTimeServerXiaomi, otherActivityState.clickTimeServerXiaomi)) return false;
217230
if (!Util.equalLong(installBeginServerXiaomi, otherActivityState.installBeginServerXiaomi)) return false;
231+
if (!Util.equalString(installVersionXiaomi, otherActivityState.installVersionXiaomi)) return false;
232+
if (!Util.equalLong(clickTimeSamsung, otherActivityState.clickTimeSamsung)) return false;
233+
if (!Util.equalLong(installBeginSamsung, otherActivityState.installBeginSamsung)) return false;
234+
if (!Util.equalString(installReferrerSamsung, otherActivityState.installReferrerSamsung)) return false;
218235
return true;
219236
}
220237

@@ -253,6 +270,10 @@ public int hashCode() {
253270
hashCode = 37 * hashCode + Util.hashString(installReferrerXiaomi);
254271
hashCode = 37 * hashCode + Util.hashLong(clickTimeServerXiaomi);
255272
hashCode = 37 * hashCode + Util.hashLong(installBeginServerXiaomi);
273+
hashCode = 37 * hashCode + Util.hashString(installVersionXiaomi);
274+
hashCode = 37 * hashCode + Util.hashLong(clickTimeSamsung);
275+
hashCode = 37 * hashCode + Util.hashLong(installBeginSamsung);
276+
hashCode = 37 * hashCode + Util.hashString(installReferrerSamsung);
256277
return hashCode;
257278
}
258279

@@ -298,6 +319,11 @@ private void readObject(ObjectInputStream stream) throws IOException, ClassNotFo
298319
installReferrerXiaomi = Util.readStringField(fields, "installReferrerXiaomi", null);
299320
clickTimeServerXiaomi = Util.readLongField(fields, "clickTimeServerXiaomi", -1l);
300321
installBeginServerXiaomi = Util.readLongField(fields, "installBeginServerXiaomi", -1l);
322+
installVersionXiaomi = Util.readStringField(fields, "installVersionXiaomi", null);
323+
324+
clickTimeSamsung = Util.readLongField(fields, "clickTimeSamsung", -1l);
325+
installBeginSamsung = Util.readLongField(fields, "installBeginSamsung", -1l);
326+
installReferrerSamsung = Util.readStringField(fields, "installReferrerSamsung", null);
301327

302328
// create UUID for migrating devices
303329
if (uuid == null) {

Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import org.json.JSONObject;
77

8+
import java.util.Map;
9+
810
/**
911
* The main interface to Adjust.
1012
* Use the methods of this class to tell Adjust about the usage of your app.
@@ -32,7 +34,7 @@ private Adjust() {
3234
*/
3335
public static synchronized AdjustInstance getDefaultInstance() {
3436
@SuppressWarnings("unused")
35-
String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.32.0";
37+
String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.33.0";
3638

3739
if (defaultInstance == null) {
3840
defaultInstance = new AdjustInstance();
@@ -96,6 +98,15 @@ public static boolean isEnabled() {
9698
return adjustInstance.isEnabled();
9799
}
98100

101+
/**
102+
* Get information if the payload originates from Adjust.
103+
*
104+
* @return boolean indicating whether payload originates from Adjust or not.
105+
*/
106+
public static boolean isAdjustUninstallDetectionPayload(Map<String, String> payload) {
107+
return Util.isAdjustUninstallDetectionPayload(payload);
108+
}
109+
99110
/**
100111
* Called to process deep link.
101112
*

Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,14 @@ public interface Constants {
2929

3030
String SCHEME = "https";
3131
String AUTHORITY = "app.adjust.com";
32-
String CLIENT_SDK = "android4.32.0";
32+
String CLIENT_SDK = "android4.33.0";
3333
String LOGTAG = "Adjust";
3434
String REFTAG = "reftag";
3535
String INSTALL_REFERRER = "install_referrer";
3636
String REFERRER_API_GOOGLE = "google";
3737
String REFERRER_API_HUAWEI_ADS = "huawei_ads";
3838
String REFERRER_API_HUAWEI_APP_GALLERY = "huawei_app_gallery";
39+
String REFERRER_API_SAMSUNG = "samsung";
3940
String REFERRER_API_XIAOMI = "xiaomi";
4041
String DEEPLINK = "deeplink";
4142
String PUSH = "push";
@@ -64,6 +65,10 @@ public interface Constants {
6465
String CALLBACK_PARAMETERS = "callback_params";
6566
String PARTNER_PARAMETERS = "partner_params";
6667

68+
String FCM_PAYLOAD_KEY = "adjust_purpose";
69+
70+
String FCM_PAYLOAD_VALUE = "uninstall detection";
71+
6772
int MAX_INSTALL_REFERRER_RETRIES = 2;
6873

6974
String FB_AUTH_REGEX = "^(fb|vk)[0-9]{5,}[^:]*://authorize.*access_token=.*";

Adjust/sdk-core/src/main/java/com/adjust/sdk/Reflection.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ public static Boolean isPlayTrackingEnabled(Context context, Object AdvertisingI
5757
}
5858
}
5959

60+
public static ReferrerDetails getSamsungReferrer(Context context, ILogger logger) {
61+
ReferrerDetails referrerDetails = null;
62+
try {
63+
referrerDetails = (ReferrerDetails) invokeStaticMethod("com.adjust.sdk.samsung.Util",
64+
"getSamsungInstallReferrerDetails",
65+
new Class[]{Context.class, ILogger.class},
66+
context, logger);
67+
} catch (Exception e) {
68+
logger.error("invoke getSamsungInstallReferrerDetails error: " + e.getMessage());
69+
}
70+
return referrerDetails;
71+
}
72+
6073
public static ReferrerDetails getXiaomiReferrer(Context context, ILogger logger) {
6174
ReferrerDetails referrerDetails = null;
6275
try {

Adjust/sdk-core/src/main/java/com/adjust/sdk/Util.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import android.net.Uri;
2121
import android.os.Build;
2222
import android.os.LocaleList;
23-
import android.os.Looper;
2423
import android.provider.Settings.Secure;
2524
import android.telephony.TelephonyManager;
2625
import android.text.TextUtils;
@@ -47,6 +46,7 @@
4746
import java.util.HashMap;
4847
import java.util.Locale;
4948
import java.util.Map;
49+
import java.util.Objects;
5050
import java.util.Random;
5151
import java.util.UUID;
5252
import java.util.concurrent.Callable;
@@ -484,6 +484,14 @@ public static boolean isValidParameter(String attribute, String attributeType, S
484484
return true;
485485
}
486486

487+
public static boolean isAdjustUninstallDetectionPayload(Map<String, String> payload) {
488+
if (payload == null) {
489+
return false;
490+
}
491+
return payload.size() == 1 &&
492+
Objects.equals(payload.get(Constants.FCM_PAYLOAD_KEY), Constants.FCM_PAYLOAD_VALUE);
493+
}
494+
487495
public static Map<String, String> mergeParameters(Map<String, String> target,
488496
Map<String, String> source,
489497
String parameterName) {
@@ -751,6 +759,8 @@ public static boolean isEqualReferrerDetails(final ReferrerDetails referrerDetai
751759
return isEqualHuaweiReferrerAdsDetails(referrerDetails, activityState);
752760
} else if (referrerApi.equals(Constants.REFERRER_API_HUAWEI_APP_GALLERY)) {
753761
return isEqualHuaweiReferrerAppGalleryDetails(referrerDetails, activityState);
762+
} else if (referrerApi.equals(Constants.REFERRER_API_SAMSUNG)) {
763+
return isEqualSamsungReferrerDetails(referrerDetails, activityState);
754764
} else if (referrerApi.equals(Constants.REFERRER_API_XIAOMI)) {
755765
return isEqualXiaomiReferrerDetails(referrerDetails, activityState);
756766
}
@@ -839,12 +849,20 @@ private static boolean isEqualHuaweiReferrerAppGalleryDetails(final ReferrerDeta
839849
&& Util.equalString(referrerDetails.installReferrer, activityState.installReferrerHuaweiAppGallery);
840850
}
841851

852+
private static boolean isEqualSamsungReferrerDetails(final ReferrerDetails referrerDetails,
853+
final ActivityState activityState) {
854+
return referrerDetails.referrerClickTimestampSeconds == activityState.clickTimeSamsung
855+
&& referrerDetails.installBeginTimestampSeconds == activityState.installBeginSamsung
856+
&& Util.equalString(referrerDetails.installReferrer, activityState.installReferrerSamsung);
857+
}
858+
842859
private static boolean isEqualXiaomiReferrerDetails(final ReferrerDetails referrerDetails,
843860
final ActivityState activityState) {
844861
return referrerDetails.referrerClickTimestampSeconds == activityState.clickTimeXiaomi
845862
&& referrerDetails.installBeginTimestampSeconds == activityState.installBeginXiaomi
846863
&& referrerDetails.referrerClickTimestampServerSeconds == activityState.clickTimeServerXiaomi
847864
&& referrerDetails.installBeginTimestampServerSeconds == activityState.installBeginServerXiaomi
848-
&& Util.equalString(referrerDetails.installReferrer, activityState.installReferrerXiaomi);
865+
&& Util.equalString(referrerDetails.installReferrer, activityState.installReferrerXiaomi)
866+
&& Util.equalString(referrerDetails.installVersion, activityState.installVersionXiaomi);
849867
}
850868
}

Adjust/sdk-plugin-criteo/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ dependencies {
2323
// Add SDK via module.
2424
compileOnly project(':sdk-core')
2525
// Add SDK via Maven.
26-
// implementation 'com.adjust.sdk:adjust-android:4.32.0'
26+
// implementation 'com.adjust.sdk:adjust-android:4.33.0'
2727
}
2828

2929
// read local properties

0 commit comments

Comments
 (0)