diff --git a/Adjust/build.gradle b/Adjust/build.gradle
index 70abd26e8..8e7e163e0 100644
--- a/Adjust/build.gradle
+++ b/Adjust/build.gradle
@@ -9,7 +9,7 @@ ext {
coreMinSdkVersion = 9
coreCompileSdkVersion = 30
coreTargetSdkVersion = 30
- coreVersionName = '4.28.3'
+ coreVersionName = '4.28.4'
defaultVersionCode = 1
webbridgeMinSdkVersion = 17
diff --git a/Adjust/example-app-tv/src/main/AndroidManifest.xml b/Adjust/example-app-tv/src/main/AndroidManifest.xml
index 38f598777..9898d3132 100755
--- a/Adjust/example-app-tv/src/main/AndroidManifest.xml
+++ b/Adjust/example-app-tv/src/main/AndroidManifest.xml
@@ -5,13 +5,20 @@
+
+
+
+
+ android:theme="@style/Theme.AppCompat"
+ android:banner="@mipmap/ic_launcher">
+
@@ -38,7 +46,7 @@
note that the leading "/" is required for pathPrefix
Accepts URIs that begin with "example://”
-->
-
+
diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java
index d4171fcb4..6ea79b848 100644
--- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java
+++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Adjust.java
@@ -32,7 +32,7 @@ private Adjust() {
*/
public static synchronized AdjustInstance getDefaultInstance() {
@SuppressWarnings("unused")
- String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.28.3";
+ String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.28.4";
if (defaultInstance == null) {
defaultInstance = new AdjustInstance();
diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java
index 36f4cfcc9..abbed1e4c 100644
--- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java
+++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustInstance.java
@@ -101,7 +101,7 @@ public void onCreate(final AdjustConfig adjustConfig) {
* @param event AdjustEvent object to be tracked
*/
public void trackEvent(final AdjustEvent event) {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("trackEvent")) {
return;
}
activityHandler.trackEvent(event);
@@ -111,7 +111,7 @@ public void trackEvent(final AdjustEvent event) {
* Called upon each Activity's onResume() method call.
*/
public void onResume() {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("onResume")) {
return;
}
activityHandler.onResume();
@@ -121,7 +121,7 @@ public void onResume() {
* Called upon each Activity's onPause() method call.
*/
public void onPause() {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("onPause")) {
return;
}
activityHandler.onPause();
@@ -145,7 +145,7 @@ public void setEnabled(final boolean enabled) {
* @return boolean indicating whether SDK is enabled or not
*/
public boolean isEnabled() {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("isEnabled")) {
return isInstanceEnabled();
}
return activityHandler.isEnabled();
@@ -157,7 +157,7 @@ public boolean isEnabled() {
* @param url Deep link URL to process
*/
public void appWillOpenUrl(final Uri url) {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("appWillOpenUrl")) {
return;
}
long clickTime = System.currentTimeMillis();
@@ -171,10 +171,16 @@ public void appWillOpenUrl(final Uri url) {
* @param context Application context
*/
public void appWillOpenUrl(final Uri url, final Context context) {
+ // Check for deep link validity. If invalid, return.
+ if (url == null || url.toString().length() == 0) {
+ AdjustFactory.getLogger().warn(
+ "Skipping deep link processing (null or empty)");
+ return;
+ }
+
long clickTime = System.currentTimeMillis();
- if (!checkActivityHandler()) {
- SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager(context);
- sharedPreferencesManager.saveDeeplink(url, clickTime);
+ if (!checkActivityHandler("appWillOpenUrl", true)) {
+ saveDeeplink(url, clickTime, context);
return;
}
@@ -192,11 +198,13 @@ public void sendReferrer(final String rawReferrer, final Context context) {
// Check for referrer validity. If invalid, return.
if (rawReferrer == null || rawReferrer.length() == 0) {
+ AdjustFactory.getLogger().warn(
+ "Skipping INSTALL_REFERRER intent referrer processing (null or empty)");
return;
}
saveRawReferrer(rawReferrer, clickTime, context);
- if (checkActivityHandler("referrer")) {
+ if (checkActivityHandler("referrer", true)) {
if (activityHandler.isEnabled()) {
activityHandler.sendReftagReferrer();
}
@@ -212,11 +220,13 @@ public void sendReferrer(final String rawReferrer, final Context context) {
public void sendPreinstallReferrer(final String referrer, final Context context) {
// Check for referrer validity. If invalid, return.
if (referrer == null || referrer.length() == 0) {
+ AdjustFactory.getLogger().warn(
+ "Skipping SYSTEM_INSTALLER_REFERRER preinstall referrer processing (null or empty)");
return;
}
savePreinstallReferrer(referrer, context);
- if (checkActivityHandler("preinstall referrer")) {
+ if (checkActivityHandler("preinstall referrer", true)) {
if (activityHandler.isEnabled()) {
activityHandler.sendPreinstallReferrer();
}
@@ -240,7 +250,7 @@ public void setOfflineMode(final boolean enabled) {
* Called if SDK initialisation was delayed and you would like to stop waiting for timer.
*/
public void sendFirstPackages() {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("sendFirstPackages")) {
return;
}
activityHandler.sendFirstPackages();
@@ -253,7 +263,7 @@ public void sendFirstPackages() {
* @param value Global callback parameter value
*/
public void addSessionCallbackParameter(final String key, final String value) {
- if (checkActivityHandler("adding session callback parameter")) {
+ if (checkActivityHandler("adding session callback parameter", true)) {
activityHandler.addSessionCallbackParameter(key, value);
return;
}
@@ -273,7 +283,7 @@ public void run(final ActivityHandler activityHandler) {
* @param value Global partner parameter value
*/
public void addSessionPartnerParameter(final String key, final String value) {
- if (checkActivityHandler("adding session partner parameter")) {
+ if (checkActivityHandler("adding session partner parameter", true)) {
activityHandler.addSessionPartnerParameter(key, value);
return;
}
@@ -291,7 +301,7 @@ public void run(final ActivityHandler activityHandler) {
* @param key Global callback parameter key
*/
public void removeSessionCallbackParameter(final String key) {
- if (checkActivityHandler("removing session callback parameter")) {
+ if (checkActivityHandler("removing session callback parameter", true)) {
activityHandler.removeSessionCallbackParameter(key);
return;
}
@@ -309,7 +319,7 @@ public void run(final ActivityHandler activityHandler) {
* @param key Global partner parameter key
*/
public void removeSessionPartnerParameter(final String key) {
- if (checkActivityHandler("removing session partner parameter")) {
+ if (checkActivityHandler("removing session partner parameter", true)) {
activityHandler.removeSessionPartnerParameter(key);
return;
}
@@ -325,7 +335,7 @@ public void run(final ActivityHandler activityHandler) {
* Called to remove all added global callback parameters.
*/
public void resetSessionCallbackParameters() {
- if (checkActivityHandler("resetting session callback parameters")) {
+ if (checkActivityHandler("resetting session callback parameters", true)) {
activityHandler.resetSessionCallbackParameters();
return;
}
@@ -341,7 +351,7 @@ public void run(final ActivityHandler activityHandler) {
* Called to remove all added global partner parameters.
*/
public void resetSessionPartnerParameters() {
- if (checkActivityHandler("resetting session partner parameters")) {
+ if (checkActivityHandler("resetting session partner parameters", true)) {
activityHandler.resetSessionPartnerParameters();
return;
}
@@ -358,7 +368,7 @@ public void run(final ActivityHandler activityHandler) {
* Used only for Adjust tests, shouldn't be used in client apps.
*/
public void teardown() {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("teardown")) {
return;
}
activityHandler.teardown();
@@ -371,7 +381,7 @@ public void teardown() {
* @param token Push notifications token
*/
public void setPushToken(final String token) {
- if (!checkActivityHandler("push token")) {
+ if (!checkActivityHandler("push token", true)) {
this.pushToken = token;
} else {
activityHandler.setPushToken(token, false);
@@ -386,7 +396,7 @@ public void setPushToken(final String token) {
*/
public void setPushToken(final String token, final Context context) {
savePushToken(token, context);
- if (checkActivityHandler("push token")) {
+ if (checkActivityHandler("push token", true)) {
if (activityHandler.isEnabled()) {
activityHandler.setPushToken(token, true);
}
@@ -400,7 +410,7 @@ public void setPushToken(final String token, final Context context) {
*/
public void gdprForgetMe(final Context context) {
saveGdprForgetMe(context);
- if (checkActivityHandler("gdpr")) {
+ if (checkActivityHandler("gdpr", true)) {
if (activityHandler.isEnabled()) {
activityHandler.gdprForgetMe();
}
@@ -413,7 +423,7 @@ public void gdprForgetMe(final Context context) {
* @param context Application context
*/
public void disableThirdPartySharing(final Context context) {
- if (!checkActivityHandler("disable third party sharing")) {
+ if (!checkActivityHandler("disable third party sharing", true)) {
saveDisableThirdPartySharing(context);
return;
}
@@ -422,7 +432,7 @@ public void disableThirdPartySharing(final Context context) {
}
public void trackThirdPartySharing(final AdjustThirdPartySharing adjustThirdPartySharing) {
- if (!checkActivityHandler("third party sharing")) {
+ if (!checkActivityHandler("third party sharing", true)) {
preLaunchActions.preLaunchAdjustThirdPartySharingArray.add(adjustThirdPartySharing);
return;
}
@@ -431,7 +441,7 @@ public void trackThirdPartySharing(final AdjustThirdPartySharing adjustThirdPart
}
public void trackMeasurementConsent(final boolean consentMeasurement) {
- if (!checkActivityHandler("measurement consent")) {
+ if (!checkActivityHandler("measurement consent", true)) {
preLaunchActions.lastMeasurementConsentTracked = consentMeasurement;
return;
}
@@ -446,7 +456,7 @@ public void trackMeasurementConsent(final boolean consentMeasurement) {
* @param adRevenueJson JsonObject content of the ad revenue information
*/
public void trackAdRevenue(String source, JSONObject adRevenueJson) {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("trackAdRevenue")) {
return;
}
activityHandler.trackAdRevenue(source, adRevenueJson);
@@ -458,7 +468,7 @@ public void trackAdRevenue(String source, JSONObject adRevenueJson) {
* @param adjustAdRevenue Adjust ad revenue information like source, revenue, currency etc
*/
public void trackAdRevenue(final AdjustAdRevenue adjustAdRevenue) {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("trackAdRevenue")) {
return;
}
@@ -471,7 +481,7 @@ public void trackAdRevenue(final AdjustAdRevenue adjustAdRevenue) {
* @param subscription AdjustPlayStoreSubscription object to be tracked
*/
public void trackPlayStoreSubscription(AdjustPlayStoreSubscription subscription) {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("trackPlayStoreSubscription")) {
return;
}
activityHandler.trackPlayStoreSubscription(subscription);
@@ -483,7 +493,7 @@ public void trackPlayStoreSubscription(AdjustPlayStoreSubscription subscription)
* @return Unique Adjust device indetifier
*/
public String getAdid() {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("getAdid")) {
return null;
}
return activityHandler.getAdid();
@@ -495,7 +505,7 @@ public String getAdid() {
* @return AdjustAttribution object with current attribution value
*/
public AdjustAttribution getAttribution() {
- if (!checkActivityHandler()) {
+ if (!checkActivityHandler("getAttribution")) {
return null;
}
return activityHandler.getAttribution();
@@ -515,8 +525,8 @@ public String getSdkVersion() {
*
* @return boolean indicating whether ActivityHandler instance is set or not
*/
- private boolean checkActivityHandler() {
- return checkActivityHandler(null);
+ private boolean checkActivityHandler(final String action) {
+ return checkActivityHandler(action, false);
}
/**
@@ -529,31 +539,38 @@ private boolean checkActivityHandler() {
*/
private boolean checkActivityHandler(final boolean status, final String trueMessage, final String falseMessage) {
if (status) {
- return checkActivityHandler(trueMessage);
+ return checkActivityHandler(trueMessage, true);
} else {
- return checkActivityHandler(falseMessage);
+ return checkActivityHandler(falseMessage, true);
}
}
/**
* Check if ActivityHandler instance is set or not.
*
- * @param savedForLaunchWarningSuffixMessage Log message to indicate action that was asked when SDK was disabled
+ * @param action Log message to indicate action that was asked to perform when SDK was disabled
* @return boolean indicating whether ActivityHandler instance is set or not
*/
- private boolean checkActivityHandler(final String savedForLaunchWarningSuffixMessage) {
- if (activityHandler == null) {
- if (savedForLaunchWarningSuffixMessage != null) {
- AdjustFactory.getLogger().warn(
- "Adjust not initialized, but %s saved for launch",
- savedForLaunchWarningSuffixMessage);
- } else {
- AdjustFactory.getLogger().error("Adjust not initialized correctly");
- }
+ private boolean checkActivityHandler(final String action, final boolean actionSaved) {
+ if (activityHandler != null) {
+ return true;
+ }
+
+ if (action == null) {
+ AdjustFactory.getLogger().error("Adjust not initialized correctly");
return false;
+ }
+
+ if (actionSaved) {
+ AdjustFactory.getLogger().warn(
+ "Adjust not initialized, but %s saved for launch",
+ action);
} else {
- return true;
+ AdjustFactory.getLogger().warn(
+ "Adjust not initialized, can't perform %s",
+ action);
}
+ return false;
}
/**
@@ -640,6 +657,24 @@ public void run() {
Util.runInBackground(command);
}
+ /**
+ * Save deep link to shared preferences.
+ *
+ * @param deeplink Deeplink Uri object
+ * @param clickTime Time when appWillOpenUrl(Uri, Context) method was called
+ * @param context Application context
+ */
+ private void saveDeeplink(final Uri deeplink, final long clickTime, final Context context) {
+ Runnable command = new Runnable() {
+ @Override
+ public void run() {
+ SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager(context);
+ sharedPreferencesManager.saveDeeplink(deeplink, clickTime);
+ }
+ };
+ Util.runInBackground(command);
+ }
+
/**
* Flag stored referrers as still not sent.
*
diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java
index dc0d2ff5c..67dba2015 100644
--- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java
+++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/Constants.java
@@ -29,7 +29,7 @@ public interface Constants {
String SCHEME = "https";
String AUTHORITY = "app.adjust.com";
- String CLIENT_SDK = "android4.28.3";
+ String CLIENT_SDK = "android4.28.4";
String LOGTAG = "Adjust";
String REFTAG = "reftag";
String INSTALL_REFERRER = "install_referrer";
diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/DeviceInfo.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/DeviceInfo.java
index f85ea280e..66a51bb3c 100644
--- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/DeviceInfo.java
+++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/DeviceInfo.java
@@ -16,6 +16,8 @@
import java.util.Date;
import java.util.Locale;
+import static android.content.res.Configuration.UI_MODE_TYPE_MASK;
+import static android.content.res.Configuration.UI_MODE_TYPE_TELEVISION;
import static com.adjust.sdk.Constants.HIGH;
import static com.adjust.sdk.Constants.LARGE;
import static com.adjust.sdk.Constants.LONG;
@@ -79,6 +81,7 @@ class DeviceInfo {
String buildName;
String appInstallTime;
String appUpdateTime;
+ int uiMode;
DeviceInfo(Context context, String sdkPrefix) {
Resources resources = context.getResources();
@@ -86,11 +89,10 @@ class DeviceInfo {
Configuration configuration = resources.getConfiguration();
Locale locale = Util.getLocale(configuration);
int screenLayout = configuration.screenLayout;
- ContentResolver contentResolver = context.getContentResolver();
packageName = getPackageName(context);
appVersion = getAppVersion(context);
- deviceType = getDeviceType(screenLayout);
+ deviceType = getDeviceType(configuration);
deviceName = getDeviceName();
deviceManufacturer = getDeviceManufacturer();
osName = getOsName();
@@ -110,6 +112,7 @@ class DeviceInfo {
buildName = getBuildName();
appInstallTime = getAppInstallTime(context);
appUpdateTime = getAppUpdateTime(context);
+ uiMode = getDeviceUiMode(configuration);
}
void reloadPlayIds(Context context) {
@@ -223,9 +226,13 @@ private String getAppVersion(Context context) {
}
}
- private String getDeviceType(int screenLayout) {
- int screenSize = screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
+ private String getDeviceType(Configuration configuration) {
+ int uiMode = configuration.uiMode & UI_MODE_TYPE_MASK;
+ if (uiMode == UI_MODE_TYPE_TELEVISION) {
+ return "tv";
+ }
+ int screenSize = configuration.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;
switch (screenSize) {
case Configuration.SCREENLAYOUT_SIZE_SMALL:
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
@@ -238,6 +245,10 @@ private String getDeviceType(int screenLayout) {
}
}
+ private int getDeviceUiMode(Configuration configuration) {
+ return configuration.uiMode & UI_MODE_TYPE_MASK;
+ }
+
private String getDeviceName() {
return Build.MODEL;
}
diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/PackageBuilder.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/PackageBuilder.java
index 68648f1b6..a5012cce8 100644
--- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/PackageBuilder.java
+++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/PackageBuilder.java
@@ -314,6 +314,7 @@ private Map getSessionParameters(boolean isInDelay) {
PackageBuilder.addString(parameters, "device_manufacturer", deviceInfo.deviceManufacturer);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "display_height", deviceInfo.displayHeight);
PackageBuilder.addString(parameters, "display_width", deviceInfo.displayWidth);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
@@ -404,6 +405,7 @@ public Map getEventParameters(AdjustEvent event, boolean isInDel
PackageBuilder.addString(parameters, "device_manufacturer", deviceInfo.deviceManufacturer);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "display_height", deviceInfo.displayHeight);
PackageBuilder.addString(parameters, "display_width", deviceInfo.displayWidth);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
@@ -555,6 +557,7 @@ private Map getClickParameters(String source) {
PackageBuilder.addString(parameters, "device_manufacturer", deviceInfo.deviceManufacturer);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "display_height", deviceInfo.displayHeight);
PackageBuilder.addString(parameters, "display_width", deviceInfo.displayWidth);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
@@ -647,6 +650,7 @@ private Map getAttributionParameters(String initiatedBy) {
PackageBuilder.addBoolean(parameters, "needs_cost", adjustConfig.needsCost);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled);
PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId);
@@ -708,6 +712,7 @@ private Map getGdprParameters() {
PackageBuilder.addBoolean(parameters, "needs_cost", adjustConfig.needsCost);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled);
PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId);
@@ -768,6 +773,7 @@ private Map getDisableThirdPartySharingParameters() {
PackageBuilder.addBoolean(parameters, "needs_cost", adjustConfig.needsCost);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled);
PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId);
@@ -838,6 +844,7 @@ private Map getDisableThirdPartySharingParameters() {
PackageBuilder.addBoolean(parameters, "device_known", adjustConfig.deviceKnown);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled);
PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId);
@@ -903,6 +910,7 @@ private Map getMeasurementConsentParameters(
PackageBuilder.addBoolean(parameters, "device_known", adjustConfig.deviceKnown);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled);
PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId);
@@ -968,6 +976,7 @@ private Map getAdRevenueParameters(String source, JSONObject adR
PackageBuilder.addString(parameters, "device_manufacturer", deviceInfo.deviceManufacturer);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "display_height", deviceInfo.displayHeight);
PackageBuilder.addString(parameters, "display_width", deviceInfo.displayWidth);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
@@ -1060,6 +1069,7 @@ private Map getAdRevenueParameters(AdjustAdRevenue adjustAdReven
PackageBuilder.addString(parameters, "device_manufacturer", deviceInfo.deviceManufacturer);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "display_height", deviceInfo.displayHeight);
PackageBuilder.addString(parameters, "display_width", deviceInfo.displayWidth);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
@@ -1157,6 +1167,7 @@ private Map getSubscriptionParameters(AdjustPlayStoreSubscriptio
PackageBuilder.addString(parameters, "device_manufacturer", deviceInfo.deviceManufacturer);
PackageBuilder.addString(parameters, "device_name", deviceInfo.deviceName);
PackageBuilder.addString(parameters, "device_type", deviceInfo.deviceType);
+ PackageBuilder.addLong(parameters, "ui_mode", deviceInfo.uiMode);
PackageBuilder.addString(parameters, "display_height", deviceInfo.displayHeight);
PackageBuilder.addString(parameters, "display_width", deviceInfo.displayWidth);
PackageBuilder.addString(parameters, "environment", adjustConfig.environment);
@@ -1325,6 +1336,7 @@ private void checkDeviceIds(Map parameters) {
&& !parameters.containsKey("mac_md5")
&& !parameters.containsKey("android_id")
&& !parameters.containsKey("gps_adid")
+ && !parameters.containsKey("fire_adid")
&& !parameters.containsKey("oaid")
&& !parameters.containsKey("imei")
&& !parameters.containsKey("meid")
diff --git a/Adjust/sdk-plugin-criteo/build.gradle b/Adjust/sdk-plugin-criteo/build.gradle
index 71bf65f8c..e02472003 100644
--- a/Adjust/sdk-plugin-criteo/build.gradle
+++ b/Adjust/sdk-plugin-criteo/build.gradle
@@ -25,7 +25,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
- // implementation 'com.adjust.sdk:adjust-android:4.28.3'
+ // implementation 'com.adjust.sdk:adjust-android:4.28.4'
}
task adjustCriteoAndroidAar (type: Copy) {
diff --git a/Adjust/sdk-plugin-imei/build.gradle b/Adjust/sdk-plugin-imei/build.gradle
index f726cf460..6094e0b4d 100644
--- a/Adjust/sdk-plugin-imei/build.gradle
+++ b/Adjust/sdk-plugin-imei/build.gradle
@@ -24,7 +24,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
- // implementation 'com.adjust.sdk:adjust-android:4.28.3'
+ // implementation 'com.adjust.sdk:adjust-android:4.28.4'
}
task adjustImeiAndroidAar (type: Copy) {
diff --git a/Adjust/sdk-plugin-oaid/build.gradle b/Adjust/sdk-plugin-oaid/build.gradle
index 76a32cfa2..a9182b951 100644
--- a/Adjust/sdk-plugin-oaid/build.gradle
+++ b/Adjust/sdk-plugin-oaid/build.gradle
@@ -6,9 +6,6 @@ repositories {
maven {
url "https://oss.sonatype.org/content/repositories/staging/"
}
- flatDir {
- dirs 'libs'
- }
}
android {
@@ -23,11 +20,11 @@ android {
}
dependencies {
- compileOnly files('libs/oaid_sdk_1.0.25.aar')
+ compileOnly files('libs/oaid_sdk_1.0.26.aar')
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
- // implementation 'com.adjust.sdk:adjust-android:4.28.3'
+ // implementation 'com.adjust.sdk:adjust-android:4.28.4'
}
task adjustOaidAndroidAar (type: Copy) {
diff --git a/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.25.aar b/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.25.aar
deleted file mode 100644
index 47ca06de7..000000000
Binary files a/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.25.aar and /dev/null differ
diff --git a/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.26.aar b/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.26.aar
new file mode 100644
index 000000000..088add6b2
Binary files /dev/null and b/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.26.aar differ
diff --git a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/AdjustOaid.java b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/AdjustOaid.java
index dcd0735a1..6a375e0ab 100644
--- a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/AdjustOaid.java
+++ b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/AdjustOaid.java
@@ -1,8 +1,9 @@
package com.adjust.sdk.oaid;
import android.content.Context;
+import android.util.Log;
-import com.adjust.sdk.Reflection;
+import com.bun.miitmdid.core.MdidSdkHelper;
public class AdjustOaid {
static boolean isOaidToBeRead = false;
@@ -10,13 +11,19 @@ public class AdjustOaid {
public static void readOaid() {
isOaidToBeRead = true;
-
- isMsaSdkAvailable =
- Reflection.forName("com.bun.miitmdid.core.MdidSdkHelper") != null;
}
- public static void readOaid(Context base) {
+ public static void readOaid(Context context) {
readOaid();
+
+ try {
+ System.loadLibrary("nllvm1623827671");
+ String certificate = Util.readCertFromAssetFile(context);
+ isMsaSdkAvailable = MdidSdkHelper.InitCert(context, certificate);
+ } catch (Throwable t) {
+ isMsaSdkAvailable = false;
+ Log.d("Adjust", "Error during msa sdk initialization " + t.getMessage());
+ }
}
public static void doNotReadOaid() {
diff --git a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/MsaSdkClient.java b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/MsaSdkClient.java
index d8e1d0482..dc5b24439 100644
--- a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/MsaSdkClient.java
+++ b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/MsaSdkClient.java
@@ -3,7 +3,7 @@
import android.content.Context;
import com.adjust.sdk.ILogger;
-import com.bun.miitmdid.core.ErrorCode;
+import com.bun.miitmdid.core.InfoCode;
import com.bun.miitmdid.core.MdidSdkHelper;
import com.bun.miitmdid.interfaces.IIdentifierListener;
import com.bun.miitmdid.interfaces.IdSupplier;
@@ -20,7 +20,7 @@ public static String getOaid(Context context, final ILogger logger, long maxWait
boolean msaInternalLogging = false;
int result = MdidSdkHelper.InitSdk(context, msaInternalLogging, new IIdentifierListener() {
@Override
- public void OnSupport(boolean b, IdSupplier idSupplier) {
+ public void onSupport(IdSupplier idSupplier) {
try {
if (idSupplier == null || idSupplier.getOAID() == null) {
// so to avoid waiting for timeout
@@ -51,20 +51,20 @@ public void OnSupport(boolean b, IdSupplier idSupplier) {
private static boolean isError(int result, ILogger logger) {
switch(result) {
- case ErrorCode.INIT_ERROR_BEGIN:
- logger.error("msa sdk error - INIT_ERROR_BEGIN");
+ case InfoCode.INIT_ERROR_CERT_ERROR:
+ logger.error("msa sdk error - INIT_ERROR_CERT_ERROR");
return true;
- case ErrorCode.INIT_ERROR_DEVICE_NOSUPPORT:
+ case InfoCode.INIT_ERROR_DEVICE_NOSUPPORT:
logger.error("msa sdk error - INIT_ERROR_DEVICE_NOSUPPORT");
return true;
- case ErrorCode.INIT_ERROR_LOAD_CONFIGFILE:
+ case InfoCode.INIT_ERROR_LOAD_CONFIGFILE:
logger.error("msa sdk error - INIT_ERROR_LOAD_CONFIGFILE");
return true;
- case ErrorCode.INIT_ERROR_MANUFACTURER_NOSUPPORT:
+ case InfoCode.INIT_ERROR_MANUFACTURER_NOSUPPORT:
logger.error("msa sdk error - INIT_ERROR_MANUFACTURER_NOSUPPORT");
return true;
- case ErrorCode.INIT_HELPER_CALL_ERROR:
- logger.error("msa sdk error - INIT_HELPER_CALL_ERROR");
+ case InfoCode.INIT_ERROR_SDK_CALL_ERROR:
+ logger.error("msa sdk error - INIT_ERROR_SDK_CALL_ERROR");
return true;
default:
return false;
diff --git a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/Util.java b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/Util.java
index 46a9dbdb6..7382e3636 100644
--- a/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/Util.java
+++ b/Adjust/sdk-plugin-oaid/src/main/java/com/adjust/sdk/oaid/Util.java
@@ -1,11 +1,16 @@
package com.adjust.sdk.oaid;
import android.content.Context;
+import android.util.Log;
import com.adjust.sdk.ILogger;
import com.adjust.sdk.PackageBuilder;
import com.adjust.sdk.oaid.OpenDeviceIdentifierClient.Info;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
@@ -86,4 +91,22 @@ private static Map getOaidParametersUsingMSA(Context context, IL
logger.debug("Fail to read the OAID using MSA");
return null;
}
+
+ public static String readCertFromAssetFile(Context context) {
+ try {
+ String assetFileName = context.getPackageName() + ".cert.pem";
+ InputStream is = context.getAssets().open(assetFileName);
+ BufferedReader in = new BufferedReader(new InputStreamReader(is));
+ StringBuilder builder= new StringBuilder();
+ String line;
+ while ((line = in.readLine()) != null){
+ builder.append(line);
+ builder.append('\n');
+ }
+ return builder.toString();
+ } catch (Exception e) {
+ Log.e("Adjust", "readCertFromAssetFile failed");
+ return "";
+ }
+ }
}
diff --git a/Adjust/sdk-plugin-sociomantic/build.gradle b/Adjust/sdk-plugin-sociomantic/build.gradle
index b123a1ec0..4f9d8216d 100644
--- a/Adjust/sdk-plugin-sociomantic/build.gradle
+++ b/Adjust/sdk-plugin-sociomantic/build.gradle
@@ -24,7 +24,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
- // implementation 'com.adjust.sdk:adjust-android:4.28.3'
+ // implementation 'com.adjust.sdk:adjust-android:4.28.4'
}
task adjustSociomanticAndroidAar (type: Copy) {
diff --git a/Adjust/sdk-plugin-trademob/build.gradle b/Adjust/sdk-plugin-trademob/build.gradle
index 1832c15bb..d3dd2a2de 100644
--- a/Adjust/sdk-plugin-trademob/build.gradle
+++ b/Adjust/sdk-plugin-trademob/build.gradle
@@ -24,7 +24,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
- // implementation 'com.adjust.sdk:adjust-android:4.28.3'
+ // implementation 'com.adjust.sdk:adjust-android:4.28.4'
}
task adjustTrademobAndroidAar (type: Copy) {
diff --git a/Adjust/sdk-plugin-webbridge/build.gradle b/Adjust/sdk-plugin-webbridge/build.gradle
index 0ce0efac7..efb239547 100644
--- a/Adjust/sdk-plugin-webbridge/build.gradle
+++ b/Adjust/sdk-plugin-webbridge/build.gradle
@@ -24,7 +24,7 @@ dependencies {
// Add SDK via module.
compileOnly project(':sdk-core')
// Add SDK via Maven.
- // implementation 'com.adjust.sdk:adjust-android:4.28.3'
+ // implementation 'com.adjust.sdk:adjust-android:4.28.4'
}
task adjustWebBridgeAndroidAar (type: Copy) {
diff --git a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js
index 791d31f25..9aa4bc022 100644
--- a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js
+++ b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust.js
@@ -211,7 +211,7 @@ var Adjust = {
if (this.adjustConfig) {
return this.adjustConfig.getSdkPrefix();
} else {
- return 'web-bridge4.28.3';
+ return 'web-bridge4.28.4';
}
},
diff --git a/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java b/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java
index b39e0c7c5..b4d08340b 100644
--- a/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java
+++ b/Adjust/test-unit/src/androidTest/java/com/adjust/sdk/TestActivityPackage.java
@@ -53,7 +53,7 @@ public TestActivityPackage(ActivityPackage activityPackage) {
// default values
appToken = "123456789012";
environment = "sandbox";
- clientSdk = "android4.28.3";
+ clientSdk = "android4.28.4";
suffix = "";
attribution = new AdjustAttribution();
playServices = true;
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a96d6cd1a..393e52ea1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+### Version 4.28.4 (9th August 2021)
+#### Added
+- Added support for Android TV.
+- Added support to OAID plugin for MSA SDK v1.0.26.
+
+#### Changed
+- Improved logging.
+
+---
+
### Version 4.28.3 (21st July 2021)
#### Fixed
- Fixed missing authorization header in retry requests.
diff --git a/README.md b/README.md
index 4c863fd97..5e68912c2 100644
--- a/README.md
+++ b/README.md
@@ -113,14 +113,14 @@ These are the minimum required steps to integrate the Adjust SDK in your Android
If you are using Maven, add the following to your `build.gradle` file:
```gradle
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
implementation 'com.android.installreferrer:installreferrer:2.2'
```
If you would prefer to use the Adjust SDK inside web views in your app, please include this additional dependency as well:
```gradle
-implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.3'
+implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.4'
```
**Note**: The minimum supported Android API level for the web view extension is 17 (Jelly Bean).
diff --git a/VERSION b/VERSION
index a4930c94b..1f30b2818 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.28.3
+4.28.4
diff --git a/doc/chinese/README.md b/doc/chinese/README.md
index 8e8607d36..9e04a975b 100644
--- a/doc/chinese/README.md
+++ b/doc/chinese/README.md
@@ -1,3 +1,12 @@
+**该指南即将过期。**
+
+该自述文件即将过期。现在,您可以前往我们的帮助中心查看此 SDK 文档。
+
+* [English][en-helpcenter]
+* [中文][zh-helpcenter]
+* [日本語][ja-helpcenter]
+* [한국어][ko-helpcenter]
+
## 摘要
这是 Adjust™ 的安卓 SDK 包。您可以在 [adjust.com] 了解更多有关 Adjust™ 的信息。
@@ -103,14 +112,14 @@
如果您使用的是 Maven,请添加下行到您的 `build.gradle` 文件:
```gradle
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
implementation 'com.android.installreferrer:installreferrer:2.2'
```
如果您想在应用 web view 中使用 Adjust SDK,请也添加下列附加依赖项:
```gradle
-implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.3'
+implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.4'
```
**请注意:** web view 扩展支持的最低安卓 API 级别为 17 (Jelly Bean)。
@@ -2259,6 +2268,11 @@ public void onFireIntentClick(View v) {
[sdk2sdk-mopub]: ../../doc/chinese/sdk-to-sdk/mopub.md
[集成指南]: https://github.com/adjust/android_sdk/tree/master/doc/chinese
+[en-helpcenter]: https://help.adjust.com/en/developer/android-sdk-documentation
+[zh-helpcenter]: https://help.adjust.com/zh/developer/android-sdk-documentation
+[ja-helpcenter]: https://help.adjust.com/ja/developer/android-sdk-documentation
+[ko-helpcenter]: https://help.adjust.com/ko/developer/android-sdk-documentation
+
## 许可
Adjust SDK 拥有MIT 许可证。
diff --git a/doc/chinese/plugins/oaid.md b/doc/chinese/plugins/oaid.md
index bee187210..ec39985f5 100644
--- a/doc/chinese/plugins/oaid.md
+++ b/doc/chinese/plugins/oaid.md
@@ -13,8 +13,8 @@ OAID 是由移动安全联盟 (MSA) 推出的广告 ID。所有中国国内的
如果您使用的是 Maven,请将以下 OAID 插件依赖项添加到现有 Adjust SDK 依赖项旁的 `build.gradle` 文件:
```
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
-implementation 'com.adjust.sdk:adjust-android-oaid:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
+implementation 'com.adjust.sdk:adjust-android-oaid:4.28.4'
```
您还可以将 Adjust OAID 插件作为 JAR 文件进行添加,该文件可从我们的 [版本页面][releases] 下载。
diff --git a/doc/english/migration/migrate.md b/doc/english/migration/migrate.md
index f14ad8b0c..83bfb3bd5 100644
--- a/doc/english/migration/migrate.md
+++ b/doc/english/migration/migrate.md
@@ -1,4 +1,4 @@
-## Migrate your Adjust SDK for Android to 4.28.3 from 3.6.2
+## Migrate your Adjust SDK for Android to 4.28.4 from 3.6.2
### The Application class
diff --git a/doc/english/plugins/oaid.md b/doc/english/plugins/oaid.md
index de931e4bc..a48e06dff 100644
--- a/doc/english/plugins/oaid.md
+++ b/doc/english/plugins/oaid.md
@@ -12,8 +12,8 @@ To enable the Adjust SDK to collect and track OAID, follow these steps. To only
If you are using Maven, add the following OAID plugin dependency to your `build.gradle` file next to the existing Adjust SDK dependency:
```
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
-implementation 'com.adjust.sdk:adjust-android-oaid:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
+implementation 'com.adjust.sdk:adjust-android-oaid:4.28.4'
```
You can also add the Adjust OAID plugin as JAR file, which you can download from our [releases page][releases].
diff --git a/doc/english/sdk-to-sdk/admob.md b/doc/english/sdk-to-sdk/admob.md
index 3e55a8bd6..b42d005b6 100644
--- a/doc/english/sdk-to-sdk/admob.md
+++ b/doc/english/sdk-to-sdk/admob.md
@@ -15,8 +15,6 @@ If you want to track your ad revenue with the Admob SDK, you can use our SDK-to-
### Example
```java
-rewardedAd = new RewardedAd(this, AD_UNIT_ID);
-// set paid event listener
rewardedAd.setOnPaidEventListener(new OnPaidEventListener() {
@Override
public void onPaidEvent(AdValue adValue) {
@@ -29,4 +27,6 @@ rewardedAd.setOnPaidEventListener(new OnPaidEventListener() {
}
```
+For more information on how to properly integrate and set up AdMob SDK, please check out the [official documentation](https://developers.google.com/admob/android/early-access/paid-events).
+
[android-readme]: ../../../README.md
diff --git a/doc/japanese/README.md b/doc/japanese/README.md
index 0e4ba9b6d..96b9d043b 100644
--- a/doc/japanese/README.md
+++ b/doc/japanese/README.md
@@ -1,3 +1,12 @@
+**このガイドはまもなく廃止されます。**
+
+このREADMEファイルはまもなく廃止されます。SDKのドキュメントはAdjustヘルプセンターに掲載されています。以下のリンクよりご覧ください。
+
+* [English][en-helpcenter]
+* [中文][zh-helpcenter]
+* [日本語][ja-helpcenter]
+* [한국어][ko-helpcenter]
+
## 概要
これはネイティブAdjust™のAndroid SDKガイドです。Adjust™についての詳細はadjust.comをご覧ください。
@@ -102,14 +111,14 @@ Adjust SDKをAndroidプロジェクトに実装する手順を説明します。
Mavenを使用している場合は、以下の内容を`build.gradle`ファイルに追加します。file:
```gradle
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
implementation 'com.android.installreferrer:installreferrer:2.2'
```
アプリの WebView内でAdjust SDKを使用したい場合は、以下のdependencyを追加してください。
```gradle
-implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.3'
+implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.4'
```
**注意**:WebView拡張機能用にサポートされている最小のAndroid APIレベルは17(Jelly Bean)です。
@@ -2254,6 +2263,11 @@ Adjust SDKはこの場合の初期化についてサポートしています。
[sdk2sdk-mopub]: ../../doc/japanese/sdk-to-sdk/mopub.md
+[en-helpcenter]: https://help.adjust.com/en/developer/android-sdk-documentation
+[zh-helpcenter]: https://help.adjust.com/zh/developer/android-sdk-documentation
+[ja-helpcenter]: https://help.adjust.com/ja/developer/android-sdk-documentation
+[ko-helpcenter]: https://help.adjust.com/ko/developer/android-sdk-documentation
+
## ライセンス
Adjust SDKはMITライセンスを適用しています。
diff --git a/doc/japanese/migration/migrate.md b/doc/japanese/migration/migrate.md
index e727a24f8..9d3f9d4d6 100644
--- a/doc/japanese/migration/migrate.md
+++ b/doc/japanese/migration/migrate.md
@@ -1,4 +1,4 @@
-## Android用adjust SDKのv3.6.2からv4.28.3への移行
+## Android用adjust SDKのv3.6.2からv4.28.4への移行
### アプリケーションクラス
diff --git a/doc/japanese/plugins/oaid.md b/doc/japanese/plugins/oaid.md
index ef8d70855..ca9fa6705 100644
--- a/doc/japanese/plugins/oaid.md
+++ b/doc/japanese/plugins/oaid.md
@@ -13,8 +13,8 @@ Adjust SDKがOAID値を収集し計測するための設定手順は、以下の
Mavenを使用している場合は、以下のOAIDプラグイン dependencyを、既存のAdjust SDKのdependencyの隣にあるbuild.gradle` file に追加します:
```
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
-implementation 'com.adjust.sdk:adjust-android-oaid:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
+implementation 'com.adjust.sdk:adjust-android-oaid:4.28.4'
```
Adjust OAIDプラグインを JARファイルとして追加することもできます。JARファイルは、[releases page][releases] からダウンロードすることができます。
diff --git a/doc/korean/README.md b/doc/korean/README.md
index a7d7394f1..92989b2d3 100644
--- a/doc/korean/README.md
+++ b/doc/korean/README.md
@@ -1,3 +1,12 @@
+**본 가이드는 만료되었습니다.**
+
+본 README 파일은 얼마 후 만료될 예정입니다. 당사 헬프 센터에서 SDK 문서를 열람하실 수 있습니다.
+
+* [English][en-helpcenter]
+* [中文][zh-helpcenter]
+* [日本語][ja-helpcenter]
+* [한국어][ko-helpcenter]
+
## 요약
Adjust™의 Android SDK에 관한 문서입니다. Adjust™에 대한 자세한 정보는 [adjust.com]에서 확인하십시오.
@@ -105,14 +114,14 @@ Adjust™의 Android SDK에 관한 문서입니다. Adjust™에 대한 자세
Maven을 사용하는 경우, 다음을 `build.gradle` 파일에 추가하시기 바랍니다.
```gradle
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
implementation 'com.android.installreferrer:installreferrer:2.2'
```
앱의 웹뷰 안에서 Adjust SDK를 사용하고자 하는 경우, 다음의 추가적인 dependency를 추가하시기 바랍니다.
```gradle
-implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.3'
+implementation 'com.adjust.sdk:adjust-android-webbridge:4.28.4'
```
**참고**: 웹뷰 확장에 필요한 Android API의 최소 지원 레벨은 17(Jelley Bean)입니다.
@@ -2258,6 +2267,11 @@ Adjust SDK는 이 시점에서 초기화에 준비되어있으나 실제로 시
[dev_api]: https://docs.adjust.com/en/adjust-for-developers/
[sdk2sdk-mopub]: ../../doc/korean/sdk-to-sdk/mopub.md
+
+[en-helpcenter]: https://help.adjust.com/en/developer/android-sdk-documentation
+[zh-helpcenter]: https://help.adjust.com/zh/developer/android-sdk-documentation
+[ja-helpcenter]: https://help.adjust.com/ja/developer/android-sdk-documentation
+[ko-helpcenter]: https://help.adjust.com/ko/developer/android-sdk-documentation
## 라이선스
diff --git a/doc/korean/plugins/oaid.md b/doc/korean/plugins/oaid.md
index 7d1793f92..c0fe2382b 100644
--- a/doc/korean/plugins/oaid.md
+++ b/doc/korean/plugins/oaid.md
@@ -14,8 +14,8 @@ Adjust SDK가 OAID를 수집하고 트래킹할 수 있게 하기 위해서는
Maven을 사용하고 있는 경우, 기존 Adjust SDK dependency 옆에 있는 `build.gradle` 파일에 다음의 OAID plugin dependency을 추가하세요.
```
-implementation 'com.adjust.sdk:adjust-android:4.28.3'
-implementation 'com.adjust.sdk:adjust-android-oaid:4.28.3'
+implementation 'com.adjust.sdk:adjust-android:4.28.4'
+implementation 'com.adjust.sdk:adjust-android-oaid:4.28.4'
```
Adjust OAID 플러그인을 JAR 파일로 추가할 수도 있습니다. Adjust [릴리스 페이지][releases]에서 다운로드하세요.