diff --git a/Adjust/build.gradle b/Adjust/build.gradle index 2493cafc6..f1ea4518c 100644 --- a/Adjust/build.gradle +++ b/Adjust/build.gradle @@ -9,7 +9,7 @@ ext { coreMinSdkVersion = 9 coreCompileSdkVersion = 30 coreTargetSdkVersion = 30 - coreVersionName = '4.26.2' + coreVersionName = '4.27.0' defaultVersionCode = 1 webbridgeMinSdkVersion = 17 @@ -25,7 +25,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.1' + classpath 'com.android.tools.build:gradle:4.1.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files. diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java index 60fce6193..7ebdbe459 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/ActivityHandler.java @@ -470,6 +470,16 @@ public void run() { }); } + @Override + public void sendPreinstallReferrer() { + executor.submit(new Runnable() { + @Override + public void run() { + sendPreinstallReferrerI(); + } + }); + } + @Override public void sendInstallReferrer(final ReferrerDetails referrerDetails, final String referrerApi) { @@ -928,6 +938,10 @@ private void checkForPreinstallI() { if (activityState == null) return; if (!activityState.enabled) return; if (activityState.isGdprForgotten) return; + + // sending preinstall referrer doesn't require preinstall tracking flag to be enabled + sendPreinstallReferrerI(); + if (!adjustConfig.preinstallTrackingEnabled) return; if (internalState.hasPreinstallBeenRead()) return; @@ -1724,6 +1738,25 @@ private void sendReftagReferrerI() { sdkClickHandler.sendReftagReferrers(); } + private void sendPreinstallReferrerI() { + if (!isEnabledI()) { + return; + } + if (internalState.hasFirstSdkStartNotOcurred()) { + return; + } + + SharedPreferencesManager sharedPreferencesManager = + new SharedPreferencesManager(getContext()); + String referrerPayload = sharedPreferencesManager.getPreinstallReferrer(); + + if (referrerPayload == null || referrerPayload.isEmpty()) { + return; + } + + sdkClickHandler.sendPreinstallPayload(referrerPayload, Constants.SYSTEM_INSTALLER_REFERRER); + } + private void sendInstallReferrerI(ReferrerDetails referrerDetails, String referrerApi) { if (!isEnabledI()) { return; 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 e5d513b97..36fb2b820 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.26.2"; + String VERSION = "!SDK-VERSION-STRING!:com.adjust.sdk:adjust-android:4.27.0"; if (defaultInstance == null) { defaultInstance = new AdjustInstance(); diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java index 3008b6639..9b0c13bea 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustConfig.java @@ -46,6 +46,7 @@ public class AdjustConfig { public static final String URL_STRATEGY_INDIA = "url_strategy_india"; public static final String URL_STRATEGY_CHINA = "url_strategy_china"; + public static final String DATA_RESIDENCY_EU = "data_residency_eu"; public static final String AD_REVENUE_MOPUB = "mopub"; public static final String AD_REVENUE_ADMOB = "admob"; @@ -202,7 +203,8 @@ public void setUrlStrategy(String urlStrategy) { return; } if (!urlStrategy.equals(URL_STRATEGY_INDIA) - && !urlStrategy.equals(URL_STRATEGY_CHINA)) + && !urlStrategy.equals(URL_STRATEGY_CHINA) + && !urlStrategy.equals(DATA_RESIDENCY_EU)) { logger.warn("Unrecognised url strategy %s", urlStrategy); } 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 fb7ff35e8..dd331c23d 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 @@ -203,6 +203,26 @@ public void sendReferrer(final String rawReferrer, final Context context) { } } + /** + * Called to process preinstall payload information sent with SYSTEM_INSTALLER_REFERRER intent. + * + * @param referrer Preinstall referrer content + * @param context Application context + */ + public void sendPreinstallReferrer(final String referrer, final Context context) { + // Check for referrer validity. If invalid, return. + if (referrer == null || referrer.length() == 0) { + return; + } + + savePreinstallReferrer(referrer, context); + if (checkActivityHandler("preinstall referrer")) { + if (activityHandler.isEnabled()) { + activityHandler.sendPreinstallReferrer(); + } + } + } + /** * Called to set SDK to offline or online mode. * @@ -541,6 +561,23 @@ public void run() { Util.runInBackground(command); } + /** + * Save preinstall referrer to shared preferences. + * + * @param referrer Preinstall referrer content + * @param context Application context + */ + private void savePreinstallReferrer(final String referrer, final Context context) { + Runnable command = new Runnable() { + @Override + public void run() { + SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager(context); + sharedPreferencesManager.savePreinstallReferrer(referrer); + } + }; + Util.runInBackground(command); + } + /** * Save push token to shared preferences. * diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustPreinstallReferrerReceiver.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustPreinstallReferrerReceiver.java new file mode 100644 index 000000000..1af4a6171 --- /dev/null +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/AdjustPreinstallReferrerReceiver.java @@ -0,0 +1,24 @@ +package com.adjust.sdk; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import static com.adjust.sdk.Constants.EXTRA_SYSTEM_INSTALLER_REFERRER; + +public class AdjustPreinstallReferrerReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + if (intent == null) { + return; + } + + String referrer = intent.getStringExtra(EXTRA_SYSTEM_INSTALLER_REFERRER); + if (referrer == null) { + return; + } + + Adjust.getDefaultInstance().sendPreinstallReferrer(referrer, context); + } +} 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 e632c7699..21d30e4cf 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.26.2"; + String CLIENT_SDK = "android4.27.0"; String LOGTAG = "Adjust"; String REFTAG = "reftag"; String INSTALL_REFERRER = "install_referrer"; @@ -77,6 +77,7 @@ public interface Constants { String CONTENT_PROVIDER_INTENT_ACTION = "content_provider_intent_action"; String CONTENT_PROVIDER_NO_PERMISSION = "content_provider_no_permission"; String FILE_SYSTEM = "file_system"; + String SYSTEM_INSTALLER_REFERRER = "system_installer_referrer"; String ADJUST_PREINSTALL_SYSTEM_PROPERTY_PREFIX = "adjust.preinstall."; String ADJUST_PREINSTALL_SYSTEM_PROPERTY_PATH = "adjust.preinstall.path"; @@ -84,4 +85,5 @@ public interface Constants { String ADJUST_PREINSTALL_CONTENT_URI_PATH = "trackers"; String ADJUST_PREINSTALL_CONTENT_PROVIDER_INTENT_ACTION = "com.attribution.REFERRAL_PROVIDER"; String ADJUST_PREINSTALL_FILE_SYSTEM_PATH = "/data/local/tmp/adjust.preinstall"; + String EXTRA_SYSTEM_INSTALLER_REFERRER = "com.attribution.EXTRA_SYSTEM_INSTALLER_REFERRER"; } diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java index 1c468775a..360c74a1c 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/IActivityHandler.java @@ -37,6 +37,8 @@ public interface IActivityHandler { void sendReftagReferrer(); + void sendPreinstallReferrer(); + void sendInstallReferrer(ReferrerDetails referrerDetails, String referrerApi); void setOfflineMode(boolean enabled); 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 996533a2b..d2828b46a 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 @@ -263,17 +263,20 @@ private Map getSessionParameters(boolean isInDelay) { // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -298,8 +301,6 @@ private Map getSessionParameters(boolean isInDelay) { PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); PackageBuilder.addString(parameters, "fb_id", deviceInfo.fbAttributionId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addString(parameters, "hardware_name", deviceInfo.hardwareName); PackageBuilder.addString(parameters, "installed_at", deviceInfo.appInstallTime); PackageBuilder.addString(parameters, "language", deviceInfo.language); @@ -352,17 +353,20 @@ public Map getEventParameters(AdjustEvent event, boolean isInDel // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -390,8 +394,6 @@ public Map getEventParameters(AdjustEvent event, boolean isInDel PackageBuilder.addString(parameters, "event_token", event.eventToken); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); PackageBuilder.addString(parameters, "fb_id", deviceInfo.fbAttributionId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addString(parameters, "hardware_name", deviceInfo.hardwareName); PackageBuilder.addString(parameters, "language", deviceInfo.language); PackageBuilder.addString(parameters, "mcc", Util.getMcc(adjustConfig.context)); @@ -436,17 +438,20 @@ private Map getInfoParameters(String source) { // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -459,8 +464,6 @@ private Map getInfoParameters(String source) { PackageBuilder.addString(parameters, "environment", adjustConfig.environment); PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addBoolean(parameters, "needs_response_details", true); PackageBuilder.addString(parameters, "push_token", activityStateCopy.pushToken); PackageBuilder.addString(parameters, "secret_id", adjustConfig.secretId); @@ -489,17 +492,20 @@ private Map getClickParameters(String source) { // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Attribution parameters. @@ -536,8 +542,6 @@ private Map getClickParameters(String source) { PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); PackageBuilder.addString(parameters, "fb_id", deviceInfo.fbAttributionId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addBoolean(parameters, "google_play_instant", googlePlayInstant); PackageBuilder.addString(parameters, "hardware_name", deviceInfo.hardwareName); PackageBuilder.addDateInSeconds(parameters, "install_begin_time", installBeginTimeInSeconds); @@ -597,17 +601,20 @@ private Map getAttributionParameters(String initiatedBy) { // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -624,8 +631,6 @@ private Map getAttributionParameters(String initiatedBy) { PackageBuilder.addString(parameters, "environment", adjustConfig.environment); PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addString(parameters, "initiated_by", initiatedBy); PackageBuilder.addBoolean(parameters, "needs_response_details", true); PackageBuilder.addString(parameters, "os_name", deviceInfo.osName); @@ -657,17 +662,20 @@ private Map getGdprParameters() { // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -684,8 +692,6 @@ private Map getGdprParameters() { PackageBuilder.addString(parameters, "environment", adjustConfig.environment); PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addBoolean(parameters, "needs_response_details", true); PackageBuilder.addString(parameters, "os_name", deviceInfo.osName); PackageBuilder.addString(parameters, "os_version", deviceInfo.osVersion); @@ -716,17 +722,20 @@ private Map getDisableThirdPartySharingParameters() { // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -743,8 +752,6 @@ private Map getDisableThirdPartySharingParameters() { PackageBuilder.addString(parameters, "environment", adjustConfig.environment); PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addBoolean(parameters, "needs_response_details", true); PackageBuilder.addString(parameters, "os_name", deviceInfo.osName); PackageBuilder.addString(parameters, "os_version", deviceInfo.osVersion); @@ -786,17 +793,20 @@ private Map getDisableThirdPartySharingParameters() { // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -812,8 +822,6 @@ private Map getDisableThirdPartySharingParameters() { PackageBuilder.addString(parameters, "environment", adjustConfig.environment); PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addBoolean(parameters, "needs_response_details", true); PackageBuilder.addString(parameters, "os_name", deviceInfo.osName); PackageBuilder.addString(parameters, "os_version", deviceInfo.osVersion); @@ -844,23 +852,26 @@ private Map getMeasurementConsentParameters( } // Measurement Consent - PackageBuilder.addString(parameters, "sharing", + PackageBuilder.addString(parameters, "measurement", consentMeasurement ? "enable" : "disable"); // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -876,8 +887,6 @@ private Map getMeasurementConsentParameters( PackageBuilder.addString(parameters, "environment", adjustConfig.environment); PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addBoolean(parameters, "needs_response_details", true); PackageBuilder.addString(parameters, "os_name", deviceInfo.osName); PackageBuilder.addString(parameters, "os_version", deviceInfo.osVersion); @@ -908,17 +917,20 @@ private Map getAdRevenueParameters(String source, JSONObject adR // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Rest of the parameters. @@ -943,8 +955,6 @@ private Map getAdRevenueParameters(String source, JSONObject adR PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); PackageBuilder.addString(parameters, "fb_id", deviceInfo.fbAttributionId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addString(parameters, "hardware_name", deviceInfo.hardwareName); PackageBuilder.addString(parameters, "installed_at", deviceInfo.appInstallTime); PackageBuilder.addString(parameters, "language", deviceInfo.language); @@ -993,17 +1003,20 @@ private Map getSubscriptionParameters(AdjustPlayStoreSubscriptio // Device identifiers. deviceInfo.reloadPlayIds(adjustConfig.context); PackageBuilder.addString(parameters, "android_uuid", activityStateCopy.uuid); - PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); PackageBuilder.addString(parameters, "gps_adid", deviceInfo.playAdId); - PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); PackageBuilder.addLong(parameters, "gps_adid_attempt", deviceInfo.playAdIdAttempt); + PackageBuilder.addString(parameters, "gps_adid_src", deviceInfo.playAdIdSource); + PackageBuilder.addBoolean(parameters, "tracking_enabled", deviceInfo.isTrackingEnabled); + PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); + PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); - if (!containsPlayIds(parameters)) { - logger.warn("Google Advertising ID not detected, fallback to non Google Play identifiers will take place"); + if (!containsPlayIds(parameters) && !containsFireIds(parameters)) { + logger.warn("Google Advertising ID or Fire Advertising ID not detected, " + + "fallback to non Google Play and Fire identifiers will take place"); deviceInfo.reloadNonPlayIds(adjustConfig.context); - PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); - PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); PackageBuilder.addString(parameters, "android_id", deviceInfo.androidId); + PackageBuilder.addString(parameters, "mac_md5", deviceInfo.macShortMd5); + PackageBuilder.addString(parameters, "mac_sha1", deviceInfo.macSha1); } // Callback and partner parameters. @@ -1034,8 +1047,6 @@ private Map getSubscriptionParameters(AdjustPlayStoreSubscriptio PackageBuilder.addBoolean(parameters, "event_buffering_enabled", adjustConfig.eventBufferingEnabled); PackageBuilder.addString(parameters, "external_device_id", adjustConfig.externalDeviceId); PackageBuilder.addString(parameters, "fb_id", deviceInfo.fbAttributionId); - PackageBuilder.addString(parameters, "fire_adid", Util.getFireAdvertisingId(contentResolver)); - PackageBuilder.addBoolean(parameters, "fire_tracking_enabled", Util.getFireTrackingEnabled(contentResolver)); PackageBuilder.addString(parameters, "hardware_name", deviceInfo.hardwareName); PackageBuilder.addString(parameters, "installed_at", deviceInfo.appInstallTime); PackageBuilder.addString(parameters, "language", deviceInfo.language); @@ -1059,13 +1070,14 @@ private Map getSubscriptionParameters(AdjustPlayStoreSubscriptio PackageBuilder.addDuration(parameters, "time_spent", activityStateCopy.timeSpent); PackageBuilder.addString(parameters, "updated_at", deviceInfo.appUpdateTime); - PackageBuilder.addLong(parameters, "revenue", subscription.getPrice()); - PackageBuilder.addDateInMilliseconds(parameters, "transaction_date", subscription.getPurchaseTime()); + // subscription specific parameters + PackageBuilder.addString(parameters, "billing_store", subscription.getBillingStore()); PackageBuilder.addString(parameters, "currency", subscription.getCurrency()); PackageBuilder.addString(parameters, "product_id", subscription.getSku()); - PackageBuilder.addString(parameters, "receipt", subscription.getSignature()); PackageBuilder.addString(parameters, "purchase_token", subscription.getPurchaseToken()); - PackageBuilder.addString(parameters, "billing_store", subscription.getBillingStore()); + PackageBuilder.addString(parameters, "receipt", subscription.getSignature()); + PackageBuilder.addLong(parameters, "revenue", subscription.getPrice()); + PackageBuilder.addDateInMilliseconds(parameters, "transaction_date", subscription.getPurchaseTime()); PackageBuilder.addString(parameters, "transaction_id", subscription.getOrderId()); checkDeviceIds(parameters); @@ -1169,6 +1181,13 @@ private boolean containsPlayIds(Map parameters) { return parameters.containsKey("gps_adid"); } + private boolean containsFireIds(Map parameters) { + if (parameters == null) { + return false; + } + return parameters.containsKey("fire_adid"); + } + private void checkDeviceIds(Map parameters) { if (parameters != null && !parameters.containsKey("mac_sha1") && !parameters.containsKey("mac_md5") diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SdkClickHandler.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SdkClickHandler.java index e9fe1822c..19ec264c6 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SdkClickHandler.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SdkClickHandler.java @@ -409,9 +409,13 @@ private void sendSdkClickI(final ActivityPackage sdkClickPackage) { SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager(activityHandler.getContext()); - long currentStatus = sharedPreferencesManager.getPreinstallPayloadReadStatus(); - long updatedStatus = PreinstallUtil.markAsRead(payloadLocation, currentStatus); - sharedPreferencesManager.setPreinstallPayloadReadStatus(updatedStatus); + if (Constants.SYSTEM_INSTALLER_REFERRER.equalsIgnoreCase(payloadLocation)) { + sharedPreferencesManager.removePreinstallReferrer(); + } else { + long currentStatus = sharedPreferencesManager.getPreinstallPayloadReadStatus(); + long updatedStatus = PreinstallUtil.markAsRead(payloadLocation, currentStatus); + sharedPreferencesManager.setPreinstallPayloadReadStatus(updatedStatus); + } } } diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java index aa800e6ee..f4c64cce8 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/SharedPreferencesManager.java @@ -37,13 +37,18 @@ public class SharedPreferencesManager { private static final String PREFS_KEY_GDPR_FORGET_ME = "gdpr_forget_me"; - private static final String PREFS_KEY_DISABLE_THIRD_PARTY_SHARING = "disable_third_party_sharing"; + private static final String PREFS_KEY_DISABLE_THIRD_PARTY_SHARING + = "disable_third_party_sharing"; private static final String PREFS_KEY_DEEPLINK_URL = "deeplink_url"; private static final String PREFS_KEY_DEEPLINK_CLICK_TIME = "deeplink_click_time"; - private static final String PREFS_KEY_PREINSTALL_PAYLOAD_READ_STATUS = "preinstall_payload_read_status"; + private static final String PREFS_KEY_PREINSTALL_PAYLOAD_READ_STATUS + = "preinstall_payload_read_status"; + + private static final String PREFS_KEY_PREINSTALL_SYSTEM_INSTALLER_REFERRER + = "preinstall_system_installer_referrer"; /** * Index for raw referrer string content in saved JSONArray object. @@ -210,6 +215,33 @@ public synchronized JSONArray getRawReferrerArray() { return new JSONArray(); } + /** + * Save preinstall referrer string into shared preferences. + * + * @param referrer Preinstall referrer string + */ + public synchronized void savePreinstallReferrer(final String referrer) { + saveString(PREFS_KEY_PREINSTALL_SYSTEM_INSTALLER_REFERRER, referrer); + } + + /** + * Get saved preinstall referrer string from shared preferences. + * + * @return referrer Preinstall referrer string + */ + public synchronized String getPreinstallReferrer() { + return getString(PREFS_KEY_PREINSTALL_SYSTEM_INSTALLER_REFERRER); + } + + /** + * Remove saved preinstall referrer string from shared preferences. + * + * @return referrer Preinstall referrer string + */ + public synchronized void removePreinstallReferrer() { + remove(PREFS_KEY_PREINSTALL_SYSTEM_INSTALLER_REFERRER); + } + /** * Initially called upon ActivityHandler initialisation. * Used to check if any of the still existing referrers was unsuccessfully being sent before app got killed. diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java index 9e26bb177..240ac9355 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/ActivityPackageSender.java @@ -113,7 +113,7 @@ private boolean shouldRetryToSend(final ResponseData responseData) { return false; } - if (urlStrategy.shouldRetryAfterFailure()) { + if (urlStrategy.shouldRetryAfterFailure(responseData.activityKind)) { logger.error("Failed with current url strategy, but it will retry with new"); return true; } else { diff --git a/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/UrlStrategy.java b/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/UrlStrategy.java index 812479150..49261a246 100644 --- a/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/UrlStrategy.java +++ b/Adjust/sdk-core/src/main/java/com/adjust/sdk/network/UrlStrategy.java @@ -4,10 +4,12 @@ import com.adjust.sdk.Constants; import java.util.Arrays; +import java.util.Collections; import java.util.List; import static com.adjust.sdk.AdjustConfig.URL_STRATEGY_CHINA; import static com.adjust.sdk.AdjustConfig.URL_STRATEGY_INDIA; +import static com.adjust.sdk.AdjustConfig.DATA_RESIDENCY_EU; public class UrlStrategy { private static final String BASE_URL_INDIA = "https://app.adjust.net.in"; @@ -18,6 +20,10 @@ public class UrlStrategy { private static final String GDPR_URL_CHINA = "https://gdpr.adjust.world"; private static final String SUBSCRIPTION_URL_CHINA = "https://subscription.adjust.world"; + private static final String BASE_URL_EU = "https://app.eu.adjust.com"; + private static final String GDPR_URL_EU = "https://gdpr.eu.adjust.com"; + private static final String SUBSCRIPTION_URL_EU = "https://subscription.eu.adjust.com"; + private final String baseUrlOverwrite; private final String gdprUrlOverwrite; private final String subscriptionUrlOverwrite; @@ -55,7 +61,7 @@ public void resetAfterSuccess() { } @SuppressWarnings("UnnecessaryLocalVariable") - public boolean shouldRetryAfterFailure() { + public boolean shouldRetryAfterFailure(final ActivityKind activityKind) { wasLastAttemptSuccess = false; // does not need to "rotate" choice index @@ -66,7 +72,17 @@ public boolean shouldRetryAfterFailure() { return false; } - final int nextChoiceIndex = (choiceIndex + 1) % baseUrlChoicesList.size(); + int choiceListSize; + + if (activityKind == ActivityKind.GDPR) { + choiceListSize = gdprUrlChoicesList.size(); + } else if (activityKind == ActivityKind.SUBSCRIPTION) { + choiceListSize = subscriptionUrlChoicesList.size(); + } else { + choiceListSize = baseUrlChoicesList.size(); + } + + final int nextChoiceIndex = (choiceIndex + 1) % choiceListSize; choiceIndex = nextChoiceIndex; final boolean nextChoiceHasNotReturnedToStartingChoice = @@ -109,6 +125,8 @@ private static List baseUrlChoices(final String urlStrategy) return Arrays.asList(BASE_URL_INDIA, Constants.BASE_URL); } else if (URL_STRATEGY_CHINA.equals(urlStrategy)) { return Arrays.asList(BASE_URL_CHINA, Constants.BASE_URL); + } else if (DATA_RESIDENCY_EU.equals(urlStrategy)) { + return Collections.singletonList(BASE_URL_EU); } else { return Arrays.asList(Constants.BASE_URL, BASE_URL_INDIA, BASE_URL_CHINA); } @@ -119,6 +137,8 @@ private static List gdprUrlChoices(final String urlStrategy) return Arrays.asList(GDPR_URL_INDIA, Constants.GDPR_URL); } else if (URL_STRATEGY_CHINA.equals(urlStrategy)) { return Arrays.asList(GDPR_URL_CHINA, Constants.GDPR_URL); + } else if (DATA_RESIDENCY_EU.equals(urlStrategy)) { + return Collections.singletonList(GDPR_URL_EU); } else { return Arrays.asList(Constants.GDPR_URL, GDPR_URL_INDIA, GDPR_URL_CHINA); } @@ -129,6 +149,8 @@ private static List subscriptionUrlChoices(final String urlStrategy) return Arrays.asList(SUBSCRIPTION_URL_INDIA, Constants.SUBSCRIPTION_URL); } else if (URL_STRATEGY_CHINA.equals(urlStrategy)) { return Arrays.asList(SUBSCRIPTION_URL_CHINA, Constants.SUBSCRIPTION_URL); + } else if (DATA_RESIDENCY_EU.equals(urlStrategy)) { + return Collections.singletonList(SUBSCRIPTION_URL_EU); } else { return Arrays.asList(Constants.SUBSCRIPTION_URL, SUBSCRIPTION_URL_INDIA, diff --git a/Adjust/sdk-plugin-criteo/build.gradle b/Adjust/sdk-plugin-criteo/build.gradle index f290093e7..b791eff70 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.26.2' + // implementation 'com.adjust.sdk:adjust-android:4.27.0' } task adjustCriteoAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-imei/build.gradle b/Adjust/sdk-plugin-imei/build.gradle index 70e3a2935..455663d63 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.26.2' + // implementation 'com.adjust.sdk:adjust-android:4.27.0' } task adjustImeiAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-oaid/build.gradle b/Adjust/sdk-plugin-oaid/build.gradle index 4d3faa5f2..bb802a3a4 100644 --- a/Adjust/sdk-plugin-oaid/build.gradle +++ b/Adjust/sdk-plugin-oaid/build.gradle @@ -23,11 +23,11 @@ android { } dependencies { - compileOnly files('libs/oaid_sdk_1.0.23.aar') + compileOnly files('libs/oaid_sdk_1.0.25.aar') // Add SDK via module. compileOnly project(':sdk-core') // Add SDK via Maven. - // implementation 'com.adjust.sdk:adjust-android:4.26.2' + // implementation 'com.adjust.sdk:adjust-android:4.27.0' } task adjustOaidAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.23.aar b/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.23.aar deleted file mode 100644 index 13d45b249..000000000 Binary files a/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.23.aar and /dev/null differ 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 new file mode 100644 index 000000000..47ca06de7 Binary files /dev/null and b/Adjust/sdk-plugin-oaid/libs/oaid_sdk_1.0.25.aar differ diff --git a/Adjust/sdk-plugin-sociomantic/build.gradle b/Adjust/sdk-plugin-sociomantic/build.gradle index 87d99f99d..bdc7fe724 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.26.2' + // implementation 'com.adjust.sdk:adjust-android:4.27.0' } task adjustSociomanticAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-trademob/build.gradle b/Adjust/sdk-plugin-trademob/build.gradle index 3bbd3123a..6856e8be4 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.26.2' + // implementation 'com.adjust.sdk:adjust-android:4.27.0' } task adjustTrademobAndroidAar (type: Copy) { diff --git a/Adjust/sdk-plugin-webbridge/build.gradle b/Adjust/sdk-plugin-webbridge/build.gradle index 2dbafa1e7..a87fb1cd4 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.26.2' + // implementation 'com.adjust.sdk:adjust-android:4.27.0' } 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 13169eeae..ba7f59089 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.26.2'; + return 'web-bridge4.27.0'; } }, diff --git a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust_config.js b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust_config.js index c321d0c60..2ca46091a 100644 --- a/Adjust/sdk-plugin-webbridge/src/main/assets/adjust_config.js +++ b/Adjust/sdk-plugin-webbridge/src/main/assets/adjust_config.js @@ -59,6 +59,7 @@ AdjustConfig.EnvironmentProduction = 'production'; AdjustConfig.UrlStrategyIndia = "url_strategy_india"; AdjustConfig.UrlStrategyChina = "url_strategy_china"; +AdjustConfig.DataResidencyEU = "data_residency_eu"; AdjustConfig.LogLevelVerbose = 'VERBOSE', AdjustConfig.LogLevelDebug = 'DEBUG', 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 e501e94ff..c80e539e0 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.26.2"; + clientSdk = "android4.27.0"; suffix = ""; attribution = new AdjustAttribution(); playServices = true; diff --git a/CHANGELOG.md b/CHANGELOG.md index 0549df23c..7d2d1dfdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +### Version 4.27.0 (17th March 2021) +#### Added +- Added data residency feature. Support for EU data residency region is added. You can choose this setting by calling `setUrlStrategy` method of `AdjustConfig` instance with `AdjustConfig.DATA_RESIDENCY_EU` parameter. +- Added preinstall tracking with usage of system installer receiver. +- Added support for MSA SDK v1.0.25 to OAID plugin. + +#### Changed +- Changed the measurement consent parameter name from `sharing` to `measurement`. + +--- + ### Version 4.26.2 (1st February 2021) #### Added - Added Facebook audience network ad revenue source string. diff --git a/README.md b/README.md index e056262be..fcb30cdff 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@ Read this in other languages: [English][en-readme], [中文][zh-readme], [日本 * [Disable third-party sharing](#af-disable-third-party-sharing) * [Enable third-party sharing](#af-enable-third-party-sharing) * [Consent measurement](#af-measurement-consent) + * [Data residency](#af-data-residency) ### Testing and troubleshooting @@ -102,14 +103,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.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' 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.26.2' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.27.0' ``` **Note**: The minimum supported Android API level for the web view extension is 17 (Jelly Bean). @@ -2105,6 +2106,39 @@ Adjust.trackMeasurementConsent(true); Upon receiving this information, Adjust enables or disables consent measurement. The Adjust SDK will continue to work as expected. +### Data residency + +In order to enable data residency feature, make sure to make a call to `setUrlStrategy` method of the `AdjustConfig` instance with one of the following constants: + + + + + + + + + + + + + + +
+Native App SDK +
+ +```java +adjustConfig.setUrlStrategy(AdjustConfig.DATA_RESIDENCY_EU); // for EU data residency region +``` +
+Web View SDK +
+ +```js +adjustConfig.setUrlStrategy(AdjustConfig.DataResidencyEU); // for EU data residency region +``` +
+ ## Testing and troubleshooting ### I'm seeing the "Session failed (Ignoring too frequent session. ...)" error. diff --git a/VERSION b/VERSION index 703698645..02bb6671c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -4.26.2 +4.27.0 diff --git a/doc/chinese/README.md b/doc/chinese/README.md index 49e1344b8..38d83a9ce 100644 --- a/doc/chinese/README.md +++ b/doc/chinese/README.md @@ -1,144 +1,152 @@ ## 摘要 -这是Adjust™的安卓SDK包。您可以访问[adjust.com]了解更多有关Adjust™的信息。 +这是 Adjust™ 的安卓 SDK 包。您可以在 [adjust.com] 了解更多有关 Adjust™ 的信息。 -Read this in other languages: [English][en-readme], [中文][zh-readme], [日本語][ja-readme], [한국어][ko-readme]. +阅读本文的其他语言版本:[English][en-readme]、[中文][zh-readme]、[日本語][ja-readme]、[한국어][ko-readme]。 ## 目录 ### 快速入门 - * [应用示例](#qs-example-apps) - * [启用设置](#qs-getting-started) - * [添加SDK至您的项目](#qs-add-sdk) - * [添加Google Play服务](#qs-gps) - * [添加权限](#qs-permissions) - * [Proguard设置](#qs-proguard) - * [Install referrer](#qs-install-referrer) - * [Google Play Referrer API](#qs-gpr-api) - * [Google Play Store intent](#qs-gps-intent) - * [华为 Referrer API](#qs-huawei-referrer-api) - * [集成SDK至您的应用](#qs-integrate-sdk) - * [基本设置](#qs-basic-setup) - * [原生应用SDK](#qs-basic-setup-native) + * [应用示例](#qs-example-apps) + * [入门指南](#qs-getting-started) + * [添加 SDK 至您的项目](#qs-add-sdk) + * [添加 Google Play 服务](#qs-gps) + * [添加权限](#qs-permissions) + * [Proguard 设置](#qs-proguard) + * [Install referrer](#qs-install-referrer) + * [Google Play Referrer API](#qs-gpr-api) + * [Google Play Store intent](#qs-gps-intent) + * [华为 Referrer API](#qs-huawei-referrer-api) + * [集成 SDK 至您的应用](#qs-integrate-sdk) + * [基本设置](#qs-basic-setup) + * [原生应用 SDK](#qs-basic-setup-native) * [Web Views SDK](#qs-basic-setup-web) - * [会话跟踪](#qs-session-tracking) - * [API level 14及以上版本](#qs-session-tracking-api-14) - * [API level 9-13版本](#qs-session-tracking-api-9) - * [SDK签名](#qs-sdk-signature) - * [Adjust日志](#qs-adjust-logging) - * [构建您的应用](#qs-build-the-app) + * [会话跟踪](#qs-session-tracking) + * [API level 14 及以上版本](#qs-session-tracking-api-14) + * [API level 9 - 13 版本](#qs-session-tracking-api-9) + * [SDK 签名](#qs-sdk-signature) + * [Adjust 日志记录](#qs-adjust-logging) + * [构建您的应用](#qs-build-the-app) ### 深度链接 - * [深度链接概述](#dl) + * [深度链接概览](#dl) * [标准深度链接场景](#dl-standard) * [延迟深度链接场景](#dl-deferred) * [通过深度链接的再归因](#dl-reattribution) ### 事件跟踪 - * [事件跟踪](#et-tracking) - * [收入跟踪](#et-revenue) + * [跟踪事件](#et-tracking) + * [跟踪收入](#et-revenue) * [收入重复数据删除](#et-revenue-deduplication) * [应用收入验证](#et-purchase-verification) ### 自定义参数 - * [自定义参数概述](#cp) + * [自定义参数概览](#cp) * [事件参数](#cp-event-parameters) - * [事件回调参数](#cp-event-callback-parameters) + * [事件回传参数](#cp-event-callback-parameters) * [事件合作伙伴参数](#cp-event-partner-parameters) - * [事件回调ID](#cp-event-callback-id) + * [事件回传标识符](#cp-event-callback-id) * [会话参数](#cp-session-parameters) - * [会话回调参数](#cp-session-callback-parameters) + * [会话回传参数](#cp-session-callback-parameters) * [会话合作伙伴参数](#cp-session-partner-parameters) * [延迟启动](#cp-delay-start) - - ### 附加功能 - - * [推送标签(Push token)—— 卸载跟踪](#af-push-token) + +### 其他功能 + + * [推送标签 (卸载跟踪)](#af-push-token) * [归因回传](#af-attribution-callback) * [广告收入跟踪](#af-ad-revenue) - * [会话和事件回传](#af-session-event-callbacks) + * [订阅跟踪](#af-subscriptions) + * [会话与事件回传](#af-session-event-callbacks) * [用户归因](#af-user-attribution) - * [设备ID](#af-device-ids) - * [Google Play服务广告ID](#af-gps-adid) - * [Amazon广告ID](#af-amazon-adid) - * [Adjust设备ID](#af-adid) - * [预安装跟踪码](#af-pre-installed-trackers) + * [设备 ID](#af-device-ids) + * [Google Play 服务广告 ID](#af-gps-adid) + * [Amazon 广告 ID](#af-amazon-adid) + * [Adjust 设备 ID](#af-adid) + * [预安装应用](#af-preinstalled-apps) * [离线模式](#af-offline-mode) * [禁用跟踪](#af-disable-tracking) * [事件缓冲](#af-event-buffering) * [后台跟踪](#af-background-tracking) - * [GDPR 的被遗忘权](#af-gdpr-forget-me) + * [GDPR 被遗忘权](#af-gdpr-forget-me) + * [第三方分享](#af-third-party-sharing) + * [禁用第三方分享](#af-disable-third-party-sharing) + * [启用第三方分享](#af-enable-third-party-sharing) + * [许可监测](#af-measurement-consent) -### 测试及故障排查 +### 测试与故障排查 - * [显示 "Session failed (Ignoring too frequent session. ...)" 出错信息](#tt-session-failed) - * [我的广播接收器是否能成功获取install referrer?](#tt-broadcast-receiver) - * [我是否可以在应用激活时触发事件?](#tt-event-at-launch) + * [显示 "session failed (Ignoring too frequent session...)" 出错信息](#tt-session-failed) + * [我的广播接收器是否能成功获取 install referrer?](#tt-broadcast-receiver) + * [我能否在应用激活时触发事件?](#tt-event-at-launch) ### 许可 + ## 快速入门 ### 应用示例 -[`example-app-java`][example-java] 及 [`example-app-kotlin`][example-kotlin] 目录内有原生安卓应用示例,您可查看[`example-webbridge`目录][example-webbridge]了解使用web view的原生应用示例,以及[`example-tv` 目录][example-tv]了解安卓 TV 应用示例。您还可打开安卓项目查看如何集成Adjust SDK的示例。 +在 [`example-app-java`][example-java]、[`example-app-kotlin`][example-kotlin] 和 [`example-app-keyboard`][example-keyboard] 目录中,您可以找到安卓示例应用;在 [`example-webbridge` ][example-webbridge] 目录中,您可以找到使用 web view 的示例应用;[`example-app-tv`][example-tv] 目录中,您可以找到安卓 TV 示例应用。您可以打开安卓项目查看这些示例,了解如何集成 Adjust SDK。 -### 基本集成 +### 快速入门 -我们将向您介绍把Adjust SDK集成到安卓项目的最基本步骤。我们假定您将Android Studio用于安卓开发。集成Adjust SDK所需最低的Android API级别为**9(Gingerbread)**。 +此处为将 Adjust SDK 集成进安卓应用时需进行的最低要求步骤。我们假定您使用 Android Studio 进行安卓开发。Adjust SDK 集成支持的最低安卓 API 级别为 **9 (Gingerbread)**。 -### 添加SDK至您的项目 +### 添加 SDK 至您的项目 -如果您正在使用Maven,请添加下行至您的`build.gradle`文件: +如果您使用的是 Maven,请添加下行到您的 `build.gradle` 文件: ```gradle -implementation 'com.adjust.sdk:adjust-android:4.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' implementation 'com.android.installreferrer:installreferrer:2.2' ``` -如果您希望在应用的web view中使用Adjust SDK,请同时包含以下附加依赖项: +如果您想在应用 web view 中使用 Adjust SDK,请也添加下列附加依赖项: ```gradle -implementation 'com.adjust.sdk:adjust-android-webbridge:4.26.2' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.27.0' ``` -您还可以将Adjust SDK和web view扩展名作为JAR文件来添加,这可从我们的[发布页面][releases]中下载。 +**请注意:** web view 扩展支持的最低安卓 API 级别为 17 (Jelly Bean)。 + +您还可以将 Adjust SDK 和 web view 扩展作为 JAR 文件来添加,这可从我们的[发布页面][releases]中下载。 -### 添加Google Play服务 +### 添加 Google Play 服务 -自2014年8月1日起,在Google Play商店中的应用必须使用[Google广告ID][google_ad_id]以唯一标识每个设备。为了让Adjust SDK能够使用Google广告ID,您必须集成[Google Play服务][google_play_services]。如果您还未完成该集成,请将以下依赖项添加到应用`build.gradle`文件的`dependencies`块中,以便添加对Google Play服务库的依赖: +自 2014 年 8 月 1 日起,Google Play 商店中的应用必须使用 [Google 广告 ID] 来对设备进行唯一标识。为了让 Adjust SDK 能使用 Google 广告 ID,请务必集成 [Google Play 服务]。如果您尚未完成该集成,请将 dependency 加入 Google Play 服务库中,具体请将以下依赖项添加到应用 `build.gradle` 文件的 `dependencies` 块中: ```gradle implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' ``` -**注意**:Adjust SDK未与Google Play服务库中`play-services-analytics`的任何特定版本绑定,因此您可自由选择使用最新版本(或您需要的任何版本)。 +**请注意**:Adjust SDK 未与 Google Play 服务库中 `play-services-analytics` 的任何特定版本绑定。您可以使用最新版本的库,也可以按需要使用任意其他版本。 ### 添加权限 -如果您还未在您的`AndroidManifest.xml`文件中添加AdjustSDK所需的以下权限,请进行添加: +Adjust SDK 需要下列权限。如果尚未添加,请将权限加入您的 `AndroidManifest.xml` 文件中: ```xml ``` -如果您的**发布目标非Google Play商店**, 请同时添加以下权限: +如果您的**发布目标非 Google Play 商店**,请同时添加以下权限: ```xml ``` -### Proguard设置 +### Proguard 设置 -如果您正在使用Proguard,请添加如下代码行至您的Proguard文件: +如果您使用的是 Proguard,请将如下代码行添加至您的 Proguard 文件: ``` --keep class com.adjust.sdk.** { *; } +-keep class com.adjust.sdk.**{ *; } -keep class com.google.android.gms.common.ConnectionResult { int SUCCESS; } @@ -152,7 +160,7 @@ implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' -keep public class com.android.installreferrer.** { *; } ``` -如果您的**发布目标非Google Play商店**,请使用以下 `com.adjust.sdk` Package 规则。 +如果您的**发布目标非 Google Play 商店**,请使用下列 `com.adjust.sdk` 包规则: ``` -keep public class com.adjust.sdk.** { *; } @@ -160,29 +168,31 @@ implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' ### Install referrer -为了将应用安装正确地归因到其来源,Adjust需要关于**install referrer(安装引荐来源)** 的信息。这可以通过 **Google Play Referrer API** 或使用广播接收器(broadcast receiver)捕捉 **Google Play Store intent** 来获得。 +为了将应用的安装归因到正确的来源,Adjust 需要获取有关 **install referrer** (安装引荐来源) 的信息。这可以通过 **Google Play Referrer API** 或使用广播接收器(broadcast receiver) 捕捉 **Google Play Store intent** 来获得。 -**重要**: Google推出Google Play Referrer API旨在提供更加可靠和安全地获取install referrer信息的方法,并帮助归因提供商更有效地对抗点击劫持(click injection)。我们**强烈建议**在您的应用中支持它。相比之下,通过Google Play Store intent获取install referrer的方法则安全性较低。目前该方式与新的Google Play Referrer API并行可用,但未来将被弃用。 +**重要提示**:Google 引入 Google Play Referrer API 是为了提供一种更可靠、更安全的方法,以获取 Install Referrer 信息并帮助归因服务商对抗点击劫持。我们**强烈建议**您的应用支持 Google Play Referrer API。相比之下,通过 Google Play Store intent 获取 install referrer 的方法则安全性较低。Google Play Store intent 暂时与新的 Google Play Referrer API 并行存在,但将来会被弃用。 #### Google Play Referrer API -为了让您的应用支持Google Play Referrer API,请确保已经遵循[添加SDK至您的项目](#qs-add-sdk)章节进行了正确设置,并在`build.gradle`文件中添加了如下代码行: +要在应用中支持 Google Play Referrer API,请务必按照[添加 SDK 至您的项目](#qs-add-sdk)一节中的说明正确操作,并确保将下列代码行加入`build.gradle` 文件中: ``` implementation 'com.android.installreferrer:installreferrer:2.2' ``` -请仔细遵循[Proguard设置](#qs-proguard)说明。请确保您已经添加了说明中所提及的全部规则,尤其是本功能必需的规则: +请仔细遵循[Proguard 设置](#qs-proguard)一节中的说明操作。请确保您已经添加了说明中所提及的全部规则,尤其是本功能必需的规则: ``` -keep public class com.android.installreferrer.** { *; } ``` -**Adjust SDK 4.12.0或以上版本** 已支持该功能。 +要支持该功能,您需要采用 **Adjust SDK v4.12.0 或更新版本**。 #### Google Play Store intent -Google Play Store `INSTALL_REFERRER` intent应该由广播接收器(broadcast receiver)来接收。如果您**未使用自己的广播接收器**来接收 `INSTALL_REFERRER` intent,请在`AndroidManifest.xml`的`application`标签中添加如下`receiver`标签: +**请注意**:Google [宣布](https://android-developers.googleblog.com/2019/11/still-using-installbroadcast-switch-to.html),2020 年 3 月 1 日起弃用通过 `INSTALL_REFERRER` intent 发送 referrer 信息的做法。如果您在使用上述方法访问 referrer 信息,请迁移至 [Google Play Referrer API](#qs-gpr-api)方法。 + +您应当使用广播接收器捕捉 Google Play Store `INSTALL_REFERRER` intent。如果您**未使用自己的广播接收器**来接收 `INSTALL_REFERRER` intent ,那么请在 `AndroidManifest.xml` 的 `application` 标签中添加如下 `receiver` 标签。 ```xml ``` -我们使用这个广播接收器来检索install referrer,并将其传送给后端。 +我们使用这个广播接收器来检索 install referrer,并将其传送给后端。 -如果您已经为`INSTALL_REFERRER`intent使用了不同的广播接收器,请遵循[此说明][referrer]来添加Adjust广播接收器。 +如果您使用不同的广播接收器接收 `INSTALL_REFERRER` intent,请按照[此说明][referrer],以正确方式向 Adjust 广播接收器发送 ping 命令。 #### 华为 Referrer API -从 v4.21.1 版本开始,Adjust SDK 将可以针对华为 AppGallery 10.4 或更高版本的华为设备进行安装跟踪。无需进行额外集成步骤,即可开始使用华为 Referrer API。 +从版本 4.21.1 开始,Adjust SDK 将支持对装有华为 App Gallery 10.4 或更新版本的设备进行安装跟踪。无需其他集成步骤,就可以开始使用华为 Referrer API。 -### 集成SDK至您的应用 +### 集成 SDK 至您的应用 我们从设置基本会话跟踪开始。 ### 基本设置 -如果您希望将SDK集成到原生应用中,请遵照[原生应用SDK](#qs-basic-setup-native)的说明进行操作。如果您需要将SDK集成到使用Web view的应用中,请按照以下[Web Views SDK](#qs-basic-setup-web)说明进行操作。 - -#### 原生应用SDK +如果您要将 SDK 集成至原生应用,请按照[原生应用 SDK](#qs-basic-setup-native)一节中的说明操作。如果您要将 SDK 集成到使用 web view 的应用中,请按照下方 [Web view SDK](#qs-basic-setup-web) 中的说明操作。 -我们推荐使用全局安卓[应用程序][android_application]类来初始化SDK。如果您的应用中还没有此类,请按照以下步骤设置: +#### 原生应用 SDK -- 创建一个扩展`Application`的类。 -- 打开应用中的`AndroidManifest.xml`文件并找到 `` 元素。 -- 添加`android:name`属性,将其设置为您的新应用程序类的名称。 +我们建议您使用全局安卓[应用程序][android-application]类进行 SDK 初始化。如果应用中还没有此类,请按照下列步骤操作: - 在此应用示例中,我们将`Application`类命名为`GlobalApplication`,因此manifest文件被设置为: +- 创建一个扩展 `Application` 的类。 +- 打开应用的 `AndroidManifest.xml` 文件,找到 `` 元素。 +- 添加 `android:name` 属性,将其设置为您的新应用程序类的名称。 + 在示例应用中,我们将` Application` 类命名为 `GlobalApplication` 。因此,manifest 文件会被设置为: ```xml - - + + ``` -- 在您的`Application`类中找到或者创建`onCreate`方法,并添加如下代码来初始化Adjust SDK: +- 在 `Application` 类中,找到或创建 `onCreate` 方法。添加下列代码,初始化 Adjust SDK: ```java import com.adjust.sdk.Adjust; @@ -240,7 +248,7 @@ Google Play Store `INSTALL_REFERRER` intent应该由广播接收器(broadcast public void onCreate() { super.onCreate(); - String appToken = "{YourAppToken}"; + string appToken = "{YourAppToken}"; String environment = AdjustConfig.ENVIRONMENT_SANDBOX; AdjustConfig config = new AdjustConfig(this, appToken, environment); Adjust.onCreate(config); @@ -248,28 +256,30 @@ Google Play Store `INSTALL_REFERRER` intent应该由广播接收器(broadcast } ``` - 将`{YourAppToken}`替换为您的应用识别码(app token)。您可以在[控制面板][dashboard]中找到该应用识别码。 +用您的应用识别码 (app token) 替换 `{YourAppToken}`。您可以在[控制面板]上找到该识别码。 - 然后,您必须将`environment`(环境模式)设置为Sandbox 或者生产模式: +下一步,您必须将 `environment` (环境模式) 设为 sandbox 或生产模式: - ```java - String environment = AdjustConfig.ENVIRONMENT_SANDBOX; - String environment = AdjustConfig.ENVIRONMENT_PRODUCTION; - ``` +```java +String environment = AdjustConfig.ENVIRONMENT_SANDBOX; +String environment = AdjustConfig.ENVIRONMENT_PRODUCTION; +``` -**重要:** 仅当您或其他人测试您的应用时,该值应设为 `AdjustConfig.ENVIRONMENT_SANDBOX`。在您发布应用之前,请确保将环境改设为 `AdjustConfig.ENVIRONMENT_PRODUCTION`。再次研发和测试时,请将其设回为 `AdjustConfig.ENVIRONMENT_SANDBOX`。 +**重要提示**只有在您或其他人正在测试您的应用时,才应将该值设为 `AdjustConfig.ENVIRONMENT_SANDBOX` 。在发布应用之前,请务必将环境改设为`AdjustConfig.ENVIRONMENT_PRODUCTION`。再次研发和测试时,请将其重新设置为`AdjustConfig.ENVIRONMENT_SANDBOX`。 我们按照设置的环境来区分真实流量和来自测试设备的测试流量。非常重要的是,您必须始终根据您的目前状态更新环境! #### Web Views SDK -在您获取WebView对象的引用后: +在获得 `WebView` 对象的引用后: -- 调用`webView.getSettings().setJavaScriptEnabled(true)`, 以便在web view中启用Javascript。 -- 调用`AdjustBridge.registerAndGetInstance(getApplication(), webview)`来启用`AdjustBridgeInstance`的默认实例。 -- 这也将Adjust bridge注册为web view的Javascript接口。 +- 调用 `webView.getSettings().setJavaScriptEnabled(true)`,以便在 web view 中启用 Javascript +- 调用 `AdjustBridge.registerAndGetInstance(getApplication(), webview)`,来启动 `AdjustBridgeInstance` 默认实例。 +- 这也会将 Adjust 网桥注册为 web view 的 Javascript 接口 +- 如有必要,请调用 `AdjustBridge.setWebView()` 来设置新的`WebView`。 +- 调用 `AdjustBridge.unregister()` ,以取消注册 `AdjustBridgeInstance` 和 `WebView`. -完成以上步骤后,您的activity应该如下所示: +完成这些步骤后,您的 activity 应该以如下形式呈现: ```java public class MainActivity extends Activity { @@ -283,19 +293,26 @@ public class MainActivity extends Activity { webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient(new WebViewClient()); - AdjustBridge.registerAndGetInstance(getApplication(), webview); + AdjustBridge.registerAndGetInstance(getApplication(),webview); try { webView.loadUrl("file:///android_asset/AdjustExample-WebView.html"); } catch (Exception e) { e.printStackTrace(); } } + + @Override + protected void onDestroy() { + AdjustBridge.unregister(); + + super.onDestroy(); + } } ``` -完成以上步骤后,您已成功地将Adjust bridge添加到您的应用中。Javascript bridge现在可以在Adjust原生安卓SDK和您的页面之间进行通信,它将被加载到Web view中。 +完成以上步骤后,您就成功将 Adjust bridge 添加进自己的应用了。Javascript bridge 现已启用,可在 Adjust 原生安卓 SDK 和您的页面间进行通讯,它会被加载进 web view 中。 -在您的HTML文件中,导入位于assets文件夹根目录中的Adjust javascript文件。如果您的HTML文件也存在,请按如下方式导入: +在您的 HTML 文件中,导入位于 assets 文件夹根目录中的 Adjust Javascript 文件。如果您的 HTML 文件也存在,请按如下方式导入: ```html @@ -304,7 +321,7 @@ public class MainActivity extends Activity { ``` -一旦您添加对Javascript文件的引用后,在HTML文件中使用它们来初始化Adjust SDK: +一旦您添加对 Javascript 文件的引用后,在 HTML 文件中使用它们来初始化 Adjust SDK: ```js let yourAppToken = '{YourAppToken}'; @@ -314,28 +331,29 @@ let adjustConfig = new AdjustConfig(yourAppToken, environment); Adjust.onCreate(adjustConfig); ``` -将`{YourAppToken}`替换为您的应用识别码(app token)。您可以在[控制面板][dashboard]中找到该应用识别码。 - -然后,取决于您处于测试或是生产模式,您必须将`environment`(环境模式)设为以下对应值: +用您的应用识别码 (app token) 替换 `{YourAppToken}`。您可以在[控制面板]上找到该应用识别码。 + +然后,取决于您处于测试或是生产模式,请将 `environment` (环境模式)设为以下对应值: ```js let environment = AdjustConfig.EnvironmentSandbox; let environment = AdjustConfig.EnvironmentProduction; ``` -重要: 仅当您或其他人测试您的应用时,该值应设为`AdjustConfig.EnvironmentSandbox`。在您发布应用之前,请确保将环境改设为`AdjustConfig.EnvironmentProduction`。再次研发和测试时,请将其设回为`AdjustConfig.EnvironmentSandbox`。 +**重要提示:** 只有在您或其他人正在测试您的应用时,才应将该值设为 `AdjustConfig.EnvironmentSandbox` 。在发布应用之前,请务必将环境设置为``AdjustConfig.EnvironmentProduction` 。如果再次开始开发和测试,请将其重新设置为`AdjustConfig.EnvironmentSandbox` 。 我们按照设置的环境来区分真实流量和来自测试设备的测试流量。非常重要的是,您必须始终根据您的目前状态更新环境! ### 会话跟踪 -**注意**:此步骤**非常重要**,请**确保您在应用中正确设置它**。设置之后,Adjust SDK将对您的应用进行会话跟踪。 +**请注意**:这一步**非常重要**。请**确保您在应用中正确设置它**。正确完成本步骤,可确保 Adjust SDK 正确跟踪您应用中的会话。 -#### API level 14及以上版本 +#### API level 14 及以上版本 -- 添加一个私有类(private class)以实现`ActivityLifecycleCallbacks`接口。如果您不能访问该接口,则表示您的应用仅支持安卓API level 14以下版本。在此种情况下,请按照此[说明](#qs-session-tracking-api-9)手动更新每项Activity。如果您在之前已经对应用的每个Activity调用了`Adjust.onResume`和`Adjust.onPause`,请将其全部删除。 -- 编辑`onActivityResumed(Activity activity)`方法,添加对`Adjust.onResume()`的调用。编辑`onActivityPaused(Activity activity)`方法,添加对`Adjust.onPause()`的调用。 -- 在设置Adjust SDK的位置添加`onCreate()` 方法,并添加调用 `registerActivityLifecycleCallbacks`以及被创建的`ActivityLifecycleCallbacks`类实例。 +- 添加一个私有类 (private class) 以实现 `ActivityLifecycleCallbacks` 接口。如果您不能访问该接口,则表示您的应用仅支持安卓 API level 14 以下版本。在这种情况下,请按照此[说明](#qs-session-tracking-api-9),手动更新每项 Activity。如果您在之前已经对应用的每个Activity调用了 `Adjust.onResume` 和 `Adjust.onPause` ,请将其全部移除。 +- 编辑 `onActivityResumed(Activity activity)` 方法,并添加 `Adjust.onResume()` 调用。编辑 +`onActivityPaused(Activity activity)` 方法,并添加对 `Adjust.onPause()` 的调用。 +- 在设置 Adjust SDK 的位置添加 `onCreate()` 方法,并添加调用 `registerActivityLifecycleCallbacks` 以及被创建的 `ActivityLifecycleCallbacks` 类实例。 ```java import com.adjust.sdk.Adjust; @@ -346,14 +364,12 @@ let environment = AdjustConfig.EnvironmentProduction; public void onCreate() { super.onCreate(); - String appToken = "{YourAppToken}"; + string appToken = "{YourAppToken}"; String environment = AdjustConfig.ENVIRONMENT_SANDBOX; AdjustConfig config = new AdjustConfig(this, appToken, environment); Adjust.onCreate(config); registerActivityLifecycleCallbacks(new AdjustLifecycleCallbacks()); - - //... } private static final class AdjustLifecycleCallbacks implements ActivityLifecycleCallbacks { @@ -372,20 +388,20 @@ let environment = AdjustConfig.EnvironmentProduction; } ``` -#### API level 9-13版本 +#### API level 9 - 13 版本 -如果您的应用gradle中的`minSdkVersion`是在`9`至`13`版本之间,您应当考虑至少升级至版本14以简化集成流程。请咨询官方安卓[控制面板][android-dashboard]了解目前市场上广泛使用的主要版本。 +如果您的应用 gradle 中的 `minSdkVersion` 是在 `9` 至 `13` 版本之间,您应当考虑至少升级至版本 14 以简化集成流程。请查看官方安卓[控制面板][android-dashboard],了解目前市场上各主要版本的占比。 -为了进行准确的会话跟踪,每当任一Activity重新开始或者暂停时都需要调用某个Adjust SDK方法。否则SDK可能会错过一个会话开始或者会话结束。请遵循以下步骤对您的应用中的**每个Activity**进行正确设置: +为了进行准确的会话跟踪,每当任一 Activity 重新开始或者暂停时都需要调用某个 Adjust SDK 方法。否则 SDK 可能会错过一个会话开始或者会话结束。请遵循以下步骤对您的应用中的**每个 Activity**进行正确设置: -- 在Activity的`onResume`方法中调用 `Adjust.onResume`。必要时创建该方法。 -- 在Activity的`onPause`方法中调用`Adjust.onPause`。必要时创建该方法。 +- 在 Activity 的 `onResume` 方法中调用 `Adjust.onResume()`。必要时创建该方法。 +- 在 Activity 的 `onPause` 方法中调用 `Adjust.onPause()`。必要时创建该方法。 -完成以上步骤后,您的Activity应如下: +完成以上步骤后,您的 Activity 应如下: ```java import com.adjust.sdk.Adjust; -// ... + public class YourActivity extends Activity { protected void onResume() { super.onResume(); @@ -395,24 +411,23 @@ public class YourActivity extends Activity { super.onPause(); Adjust.onPause(); } - // ... } ``` -对您的应用中的**每个**Activity重复以上步骤。如果您在之后创建新的Activity,也请按照以上步骤设置。取决于您的编码方式,您也可通过设置所有Activitiy的通用超类来实现它。 +对您的应用中的**每个 Activity** 重复以上步骤。如果您在之后创建新的 Activity,也请按照以上步骤设置。取决于您的编码方式,您也可通过设置所有 Activitiy 的通用超类来实现它。 -### SDK签名 +### SDK 签名 -账户管理员必须启用SDK签名。如果您希望使用该功能,请联系Adjust技术支持(support@adjust.com)。 +账户管理员必须启用 SDK 签名。如果您希望使用该功能,请联系 Adjust 支持(support@adjust.com)。 -如果您已经在账户中启用了SDK签名,并可访问Adjust控制面板的应用密钥,请使用以下方法来集成SDK签名到您的应用。 +如果您已经在账户中启用了 SDK 签名,并可访问 Adjust 控制面板的应用密钥,请使用以下方法来集成 SDK 签名到您的应用。 -在您的config实例中调用`setAppSecret`来设置应用密钥: +在您的 config 实例中调用 `setAppSecret` 来设置应用密钥: @@ -442,14 +457,14 @@ Adjust.onCreate(adjustConfig);
-原生应用SDK +原生应用 SDK
-### Adjust日志 +### Adjust 日志 -您可以增加或减少在测试中看到的日志数量,方法是用以下参数之一来调用config实例上的`setLogLevel`: +您可以增加或减少在测试中看到的日志数量,方法是用以下参数之一来调用 config 实例上的 `setLogLevel`: @@ -487,12 +502,12 @@ adjustConfig.setLogLevel(AdjustConfig.LogLevelSuppress); // disable all logs
-原生应用SDK +原生应用 SDK
-如果您希望禁用所有日志输出,除了将日志级别设置为抑制以外,您还应该对配置对象使用构建函数,它将获取boolean参数来显示是否应该支持抑制日志级别: +如果您希望禁用所有日志输出,除了将日志级别设置为抑制以外,您还应该对配置对象使用构建函数,它将获取 boolean 参数来显示是否应该支持抑制日志级别: @@ -524,17 +539,17 @@ Adjust.onCreate(adjustConfig); ### 构建您的应用 -构建并运行您的安卓应用。在`LogCat`查看工具中,您可以设置筛选`tag:Adjust`来隐藏所有其他日志。应用启动后,您可看到以下Adjust日志:`Install tracked`(安装已跟踪)。 +创建并运行您的安卓应用。在 `LogCat` 查看工具中,设置筛选 `tag:Adjust` ,以隐藏所有其他日志记录。应用启动后,您应当可以看到下列 Adjust 日志:`Install tracked` (安装已跟踪)。 ## 深度链接 ### 深度链接概述 -如果您使用的是已启用深度链接的Adjust跟踪链接,则可以接收有关深度链接URL及其内容的相关信息。不论用户的设备上已经安装了应用(标准深度链接场景),或者尚未安装应用(延迟深度链接场景),用户都可与URL交互。在标准深度链接场景中,安卓平台原生支持您获取关于深度链接内容的信息。但是,安卓平台不提供对延迟深度链接场景的支持。在此情况下,Adjust SDK可以帮助您获取有关深度链接内容的信息。 +如果您使用的是已启用深度链接的 Adjust 跟踪链接,则可以接收有关深度链接 URL 及其内容的相关信息。不论用户的设备上已经安装了应用 (标准深度链接场景),或者尚未安装应用 (延迟深度链接场景),用户都可与链接交互。在标准深度链接场景中,安卓平台自身会支持您获取关于深度链接内容的信息。但是,安卓平台不提供对延迟深度链接场景的支持。在此情况下,Adjust SDK 可以帮助您获取有关深度链接内容的信息。 ### 标准深度链接场景 -如果用户已经安装了您的应用,您希望在用户点击带有`deep_link`(深度链接)参数的Adjust跟踪链接后打开应用,您必须在应用中启用深度链接。请定义**唯一方案名称(unique scheme name)**,并将其分配至您希望在用户点击链接后应用打开时启动的Activity中。这可以通过设置在深度链接被点击应用被打开后您希望启动的Activity类的某个属性来实现。您可在`AndroidManifest.xml`中设置它。请在manifest文件中添加`intent-filter`至您指定的Activity定义,并分配指定的方案名至`android:scheme`属性值: +如果用户已经安装了您的应用,您希望在用户点击带有 `deep_link` (深度链接) 参数的 Adjust 跟踪链接后打开应用,则必须在应用中启用深度链接。请选择需要的**唯一方案名称** (unique scheme name),并将其分配至您希望在用户点击链接后应用打开时启动的 Activity 中。您可以在 `AndroidManifest.xml` 文件中进行设置。请在 manifest 文件中添加 `intent-filter` 至您指定的 Activity 定义,并分配指定的方案名至 `android:scheme` 属性值: ```xml ``` -如果您希望在跟踪链接被点击后打开应用,请在Adjust跟踪链接的`deep_link`参数中使用指定的Scheme名称。未添加任何深度链接信息的跟踪链接将如下所示: +如果您希望在跟踪链接被点击后打开应用,请在 Adjust 跟踪链接的 `deep_link` 参数中使用指定的 Scheme 名称。未添加任何深度链接信息的跟踪链接将如下所示: ``` https://app.adjust.com/abc123?deep_link=adjustExample%3A%2F%2F ``` -请记住,在URL中的`deep_link`参数值**必须采用URL编码形式**。 +请记住:链接中的 `deep_link` 参数值**必须采用 URL 编码形式**。 -如上所述完成应用设置,当用户点击跟踪链接时,您的应用将连带`MainActivity intent`打开。在`MainActivity`类中,您将自动获取关于`deep_link`参数的内容信息。虽然该内容在URL中已编码,但是它在发送给您后**不会被编码**。 +如上所述完成应用设置,当用户点击跟踪链接时,您的应用将连带 `MainActivity` intent 打开。在 `MainActivity` 类中,您将自动获取关于 `deep_link` 参数的内容信息。虽然该内容在链接中已编码,但是它在发送给您后**不会**被编码。 -`AndroidManifest.xml`文件中的`android:launchMode`Activity设置将决定Activity文件中`deep_link`参数内容的传递位置。请查看[官方安卓文档][android-launch-modes]了解有关`android:launchMode`属性值的更多信息。 +`AndroidManifest.xml` 文件中的 `android:launchMode` Activity 设置决定 Activity 文件中 `deep_link` 参数内容的传递位置。请查看安卓[官方文档][android-launch-modes],了解有关 `android:launchMode` 可能属性值的更多信息。 -通过`Intent`对象发送至您指定的Activity的深度链接内容信息将可能被传递至两个位置—— Activity的`onCreate`或者`onNewIntent`方式。一旦应用被打开,方式被触发后,您将获得在点击URL中被传递至`deep_link`参数中的实际深度链接。您可以使用这些信息为应用增加一些附加逻辑。 +通过 `intent` 对象发送至您指定的 Activity 的深度链接内容信息将可能被传递至两个位置 — Activity 的 `onCreate` 或 `onNewIntent` 方法。一旦应用被打开,方法被触发后,您将获得在点击链接中被传递至 `deep_link` 参数中的实际深度链接。您可以使用这些信息为应用增加一些附加逻辑。 您可以按以下两种方式提取深度链接内容: @@ -581,7 +596,7 @@ protected void onCreate(Bundle savedInstanceState) { Intent intent = getIntent(); Uri data = intent.getData(); - // data.toString() -> This is your deep_link parameter value. + // data.toString()-> This is your deep_link parameter value. } ``` @@ -591,24 +606,24 @@ protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Uri data = intent.getData(); - // data.toString() -> This is your deep_link parameter value. + // data.toString()-> This is your deep_link parameter value. } ``` ### 延迟深度链接场景 -延迟深度链接场景发生在当用户点击了带有`deep_link`参数的Adjust跟踪链接,但用户在点击时还未在其设备中安装应用。点击链接后,用户将被重定向至Google Play商店下载和安装您的应用。用户首次打开该应用后,`deep_link`参数将被发送至应用。 +用户点击含有 `deep_link` 参数的 Adjust 跟踪链接,但在点击发生时用户设备上并未安装应用,就会发生延迟深度链接场景。用户点击链接时,会被重定向至 Play 应用商店来下载和安装应用。在首次应用打开后,`deep_link` 参数内容将被发送至您的应用。 Adjust SDK 默认自动打开延迟深度链接,无须额外设置。 #### 延迟深度链接回传 -如果您希望控制Adjust SDK是否打开延迟深度链接,您可以通过在配置对象中设置回传的方式实现。 +如果您希望控制 Adjust SDK 是否打开延迟深度链接,可以通过在配置对象中设置回传的方式实现。
-原生应用SDK +原生应用 SDK
@@ -618,7 +633,7 @@ Adjust SDK 默认自动打开延迟深度链接,无须额外设置。 AdjustConfig config = new AdjustConfig(this, appToken, environment); // Evaluate the deeplink to be launched. -config.setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() { +config.setOnDeeplinkResponseListener(newOnDeeplinkResponseListener() { @Override public boolean launchReceivedDeeplink(Uri deeplink) { // ... @@ -633,10 +648,9 @@ config.setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() { Adjust.onCreate(config); ``` -Adjust SDK从后台接收到关于深度链接内容的信息后,将在监听器内向您传递相关内容信息,并等待您的`boolean`返回值。该返回值决定是否由Adjust SDK启动您从深度链接已分配方案名称的activity(如标准深度链接场景一样)。 - -如果您的返回值为`true`,我们将启动该activity, 触发在[标准深度链接场景](#dl-standard) 章节中所描述的场景。如果您不希望SDK启动Activity,您可以从监听器返回`false`值,并根据深度链接内容自行决定下一步动作。 +Adjust SDK 从后台接收到关于深度链接内容的信息后,将在监听器内向您传递相关内容信息,并等待您的 `boolean` 返回值。该返回值决定是否由 Adjust SDK 启动您从深度链接已分配方案名称的 activity (如标准深度链接场景一样)。 +如果您的返回值为 `true`,我们将启动该 activity,触发在[标准深度链接场景](#dl-standard)一节中所描述的场景。如果您不希望 SDK 启动 Activity,您可以从监听器返回 `false` 值,并根据深度链接内容自行决定下一步应用中的动作。 @@ -649,12 +663,12 @@ Adjust SDK从后台接收到关于深度链接内容的信息后,将在监听 ```js let adjustConfig = new AdjustConfig(yourAppToken, environment); -adjustConfig.setDeferredDeeplinkCallback(function (deeplink) {}); +adjustConfig.setDeferredDeeplinkCallback(function(deeplink) {}); Adjust.onCreate(adjustConfig); ``` -在延迟深度链接场景中,您可以对配置对象作一个额外设置。一旦Adjust SDK获取延迟深度链接信息,您可以选择是否由我们的SDK打开URL。这可通过在配置对象上调用`setOpenDeferredDeeplink`方式来设置: +在延迟深度链接场景中,您可对配置对象进行一个额外设置。一旦 Adjust SDK 获得延迟深度链接信息,您便可选择我们的 SDK 是否应该打开链接。您可在配置对象上调用 `setOpenDeferredDeeplink` 方法进行设置: ```js // ... @@ -669,21 +683,20 @@ Adjust.start(adjustConfig); ``` -请记住,如果您不设置回传,**在默认情况下Adjust SDK将始终尝试启动URL**。 +请记住,如果您不设置回传,**在默认情况下 Adjust SDK 将始终尝试启动链接**。
-原生应用SDK +原生应用 SDK
- ### 通过深度链接的再归因 -Adjust支持您使用深度链接运行再参与推广活动。您可查看我们的[官方文档][reattribution-with-deeplinks],了解更多相关信息。 +Adjust 支持您使用深度链接开展再交互推广活动。请查看我们的[官方文档][reattribution-with-deeplinks],了解更多信息。 -如果您正在使用该功能,为了准确地再归因您的用户,您需要在应用中作一个额外回传至Adjust SDK。 +如果您正在使用该功能,为了准确地再归因用户,您需要在应用中设置一个额外调用至 Adjust SDK。 -一旦您已经在应用中收到深度链接内容信息,请添加回传至`Adjust.appWillOpenUrl(Uri, Context)`方式。添加该回传后,Adjust SDK将尝试查找在深度链接中是否有任何新的归因信息,一旦找到,该信息将被发送至Adjust后台。如果您的用户因为点击带有深度链接内容的Adjust跟踪链接而应该被再归因,您将会看到应用中的[归因回传](#af-attribution-callback)被该用户的新归因信息触发。 +一旦您已经在应用中收到深度链接内容信息,请添加调用至 `Adjust.appWillOpenUrl(Uri, Context)` 方法。添加该调用后,Adjust SDK 将发送信息至 Adjust 后台,查看深度链接中是否有任何新的归因信息。如果您的用户因为点击带有深度链接内容的 Adjust 跟踪链接而被再归因,您将会看到应用中的[归因回传](#af-attribution-callback)被触发并附有该用户的新归因信息。 -请如下示添加至`Adjust.appWillOpenUrl(Uri, Context)`的回传: +`Adjust.appWillOpenUrl(Uri,Context)` 调用应当以下列方式呈现: ```java @Override @@ -707,9 +720,9 @@ protected void onNewIntent(Intent intent) { } ``` -**注意:** `Adjust.appWillOpenUrl(Uri)`方法从Android SDK v4.14.0 起已被标记为 **deprecated** (弃用),请使用`Adjust.appWillOpenUrl(Uri, Context)`方法。 +**请注意**:安卓 SDK v4.14.0 发布后,`Adjust.appWillOpenUrl(Uri)` 方法已被标记为 **弃用**。请换用 `Adjust.appWillOpenUrl(Uri,Context)` 方法。 -**Web view特别提示:** 您还可如下所示在web view中使用Javascript中的`Adjust.appWillOpenUrl`函数进行调用: +**Web view 特别提示**:您还可如下所示在 web view 中使用 Javascript 中的 `Adjust.appWillOpenUrl` 函数进行调用: ```js Adjust.appWillOpenUrl(deeplinkUrl); @@ -719,12 +732,12 @@ Adjust.appWillOpenUrl(deeplinkUrl); ### 事件跟踪 -您可以使用Adjust来跟踪应用中的任何事件。假设您想要跟踪具体按钮的每次点击,您必须在[控制面板][dashboard]中创建一个新的事件识别码(Event Token)。例如事件识别码是`abc123`,在按钮的`onClick`方法中,您可以添加以下代码行来跟踪点击: +您可以使用 Adjust 来跟踪应用中的任何事件。假设您想跟踪特定按钮的所有点击。要做到这一点,您需要在[控制面板]中创建新的事件识别码。假设事件识别码为 `abc123`。在按钮的 `onClick` 方法中,添加以下行来跟踪点击: @@ -752,14 +765,14 @@ Adjust.trackEvent(adjustEvent);
-原生应用SDK +原生应用 SDK
-### 收入跟踪 +### 跟踪收入 -如果您的用户可以通过点击广告或应用内购为您带来收入,您可以按照事件来跟踪这些收入。假设一次点击值一欧分,那么您可以这样来跟踪收入事件: +如果您的用户可通过点击广告或进行应用内购买的方式为您带来收入,您也可以通过事件来跟踪此类收入。假设一次点击能带来一欧分的收入。您可以这样来跟踪收入事件: @@ -782,29 +795,29 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.setRevenue(0.01, 'EUR'); +adjustEvent.setRevenue(0.01,'EUR'); Adjust.trackEvent(adjustEvent); ```
-原生应用SDK +原生应用 SDK
-当然,这也可以和回调参数相结合。 +您可以将其与回传参数相结合。 -您设置货币类型后,Adjust将自动把收入转换为您选择的货币类型。阅读这里了解有关[货币转换][currency-conversion]的更多信息。 +设置货币识别码后,Adjust 会自动将收入转化为您所选的报告收入。[在这里][currency-conversion]了解更多货币换算信息。 -如果您希望跟踪应用内购,请确保仅在购买完成且商品被购买完后调用`trackEvent`。这一点对于避免跟踪实际上未产生的收入非常重要。 +如果您想要跟踪应用内购买,请确保仅在购买完成且商品已购买后才调用 `trackEvent`。要想避免跟踪实际未产生的收入,这点十分重要。 -您可以在[事件跟踪指南][event-tracking]中了解更多有关收入和事件跟踪的内容。 +要进一步了解 Adjust 收入和事件跟踪相关信息,请参阅[事件跟踪指南][event-tracking]。 -### 收入重复数据删除 +### 收入去重 -您也可以选择输入交易ID,以避免跟踪重复收入。输入后,最近的十个交易ID将被记录下来,重复交易ID的收入事件将被跳过。这对于应用内购跟踪尤其有用。参见以下例子。 +您也可以选择添加交易 ID,以避免跟踪重复收入。这样,最后 10 个交易 ID 将被记录下来,交易 ID 重复的收入事件则会被跳过。这对于跟踪应用内购买尤其有用。请在下方查看示例: @@ -828,7 +841,7 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.setRevenue(0.01, 'EUR'); +adjustEvent.setRevenue(0.01,'EUR'); adjustEvent.setOrderId('{OrderId}'); Adjust.trackEvent(event); ``` @@ -836,30 +849,31 @@ Adjust.trackEvent(event);
-原生应用SDK +原生应用 SDK
-### 应用收入验证 +### 应用内收入验证 -如果您想要验证应用内购,您可以使用[Adjust的收入验证产品][android-purchase-verification]——我们的服务器端收据验证工具。点击链接了解更多信息。 +如果您想要验证应用内购买,可以使用 [Adjust 收入验证][android-purchase-verification],这是一款服务器端收据验证工具。点击链接了解更多信息。 ## 自定义参数 ### 自定义参数概述 -除了Adjust SDK默认收集的数据点之外,您还可以使用Adjust SDK跟踪并根据需要添加任意数量的自定义值(用户ID、产品ID等)到事件或会话。自定义参数仅作为原始数据提供,且**不会**显示在Adjust控制面板中。 +除了 Adjust SDK 默认收集的数据点之外,您还可以使用 Adjust SDK 进行跟踪,并根据需要添加任意数量的自定义值(用户 ID、产品 ID 等)到事件或会话中。自定义参数仅作为原始数据提供,且 **不会** 出现在 Adjust 控制面板中。 + +针对内部使用而收集的值,请使用**回传参数**,并对与外部合作伙伴共享的值使用**合作伙伴参数**。如果某个值(如产品 ID)既会被用于内部,也会与外部合作伙伴分享,我们建议同时使用回传和合作伙伴参数来跟踪该值。 -您可对内部使用收集的值使用**回调参数**,与外部合作伙伴共享的值使用**合作伙伴参数**。如果值(如产品ID)被同时用于内部和外部合作伙伴,我们建议您同时使用回传和合作伙伴参数来跟踪该值。 -### 事件参数 +### 事件参数 -### 事件回调参数 +### 事件回传参数 -您可以在[控制面板][dashboard]中为您的事件登记回调URL。跟踪到事件时,我们会向该URL发送GET请求。您可以在跟踪事件之前调用事件实例的`addCallbackParameter`,向该事件添加回调参数。然后我们会将这些参数添加至您的回调URL。 +您可以在 [控制面板] 中为事件输入回传 URL。这样,只要跟踪到事件,我们都会向该 URL 发送 GET 请求。您可以在跟踪前调用事件实例的 `addCallbackParameter` ,向该事件添加回传参数。然后我们会将这些参数附加至您的回传 URL。 -假设您已经登记URL为`http://www.example.com/callback`,然后如下行跟踪事件: +例如,如果您已注册 URL `http://www.example.com/callback`,则您将这样跟踪事件: @@ -883,8 +897,8 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.addCallbackParameter('key', 'value'); -adjustEvent.addCallbackParameter('foo', 'bar'); +adjustEvent.addCallbackParameter('key','value'); +adjustEvent.addCallbackParameter('foo','bar'); Adjust.trackEvent(adjustEvent); ``` @@ -897,21 +911,20 @@ Adjust.trackEvent(adjustEvent); http://www.example.com/callback?key=value&foo=bar ``` -Adjust支持多种可以用作参数值的占位符,例如 `{gps_adid}`。在接下来的回调中,该占位符将被当前设备的Google Play服务ID所替代。同时请注意,我们不保存您的任何定制参数,而只是将它们添加到您的回调中。如果您没有为事件输入回调地址,这些参数甚至不会被读取。 - -您可以在我们的[回调指南][callbacks-guide]中了解到有关使用URL回调的更多信息,包括可用值的完整列表。 +Adjust 支持各种占位符,例如可以用作参数值的 `{gps_adid}`。我们会在产生的回传中将占位符 (在该情况下) 替换为当前设备的 Google Play 服务 ID。请注意,我们不会存储您的任何自定义参数。我们 **仅** 将这些参数附加到您的回传中。如果您尚未针对事件注册回传,这些参数甚至不会被读取。 -### 事件合作伙伴参数 +若想进一步了解 URL 回传,查看可用参数的完整列表,请参阅我们的 [回传指南][callbacks-guide]。 -您还可以针对您已在Adjust控制面板中激活的渠道合作伙伴添加被发送至合作伙伴的参数。 +### 事件合作伙伴参数 -方式和上述提及的回调参数类似,可以通过调用您的事件实例上的`addPartnerParameter`方法来添加。 +参数在控制面板中激活后,您可以将其发送至渠道合作伙伴。 +方式和上述提及的回传参数类似,可以通过调用事件实例上的 `addPartnerParameter` 方法来添加。
-原生应用SDK +原生应用 SDK
@@ -935,24 +948,24 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.addPartnerParameter('key', 'value'); -adjustEvent.addPartnerParameter('foo', 'bar'); +adjustEvent.addPartnerParameter('key','value'); +adjustEvent.addPartnerParameter('foo','bar'); Adjust.trackEvent(adjustEvent); ```
-原生应用SDK +原生应用 SDK
-您可在我们的[特殊合作伙伴指南][special-partners]中了解到有关特殊合作伙伴和集成的更多信息。 +您可以在我们的 [特殊合作伙伴指南][special-partners] 中了解更多有关特殊合作伙伴以及这些集成的信息。 -### 事件回调ID +### 事件回传 ID -您还可为想要跟踪的每个事件添加自定义字符串ID。此ID将在之后的事件成功和/或事件失败回调中被报告,以便您了解哪些事件跟踪成功或者失败。您可通过调用事件实例上的`setCallbackId`方法来设置此ID: +您可以为想要跟踪的每个事件添加自定义字符串 ID。我们会在事件成功和/或失败回传中报告该标识符,以便您了解哪些事件已被成功跟踪。通过调用事件实例上的 `setCallbackId` 方法来设置此标识符: @@ -984,20 +997,20 @@ Adjust.trackEvent(adjustEvent); ### 会话参数 -一些参数被保存发送到Adjust SDK的每一个**事件**和**会话**中。一旦您已经添加任一这些参数,您无需再每次添加它们,因为这些参数已经被保存至本地。如果您添加同样参数两次,也不会有任何影响。 +会话参数被保存在本地,并随每个 Adjust SDK **事件** 和 **会话** 一同发送。您添加这些参数找呢的任何一个后,下次就无需再度添加,因为这些参数已经被保存。添加同样的参数两次不会有任何影响。 -这些会话参数在Adjust SDK上线之前可以被调用,以确保它们即使在安装时也可被发送。如果您需要在安装同时发送参数,但只有在SDK上线后才能获取所需的值,您可以通过[延迟](#cp-delay-start) Adjust SDK第一次上线以允许该行为。 +这些会话参数在 Adjust SDK 启动之前可以被调用,以确保它们在安装时可被发送。如果您需要在安装同时发送参数,但只有在 SDK 启动后才能获取所需的值,您可以通过[延迟](#delay-start) Adjust SDK 第一次启动以允许该行为。 -### 会话回调参数 +### 会话回传参数 -注册在[事件](#cp-event-callback-parameters)中的相同回调参数也可以被保存发送至Adjust SDK的每一个事件和会话中。 +注册在[事件](#event-callback-parameters)中的相同回传参数也可以被保存发送至 Adjust SDK 的每一个事件和会话中。 -会话回调参数拥有与事件回调参数类似的接口。该参数是通过调用`Adjust.addSessionCallbackParameter(String key, String value)`被添加,而不是通过添加Key和值至事件: +会话回传参数的接口与事件回传参数的接口类似。该参数是通过调用 `Adjust.addSessionCallbackParameter(String key, String value)`: 被添加,而不是通过添加 Key 和值至事件:
-原生应用SDK +原生应用 SDK
@@ -1023,14 +1036,14 @@ Adjust.addSessionCallbackParameter('foo', 'bar');
-原生应用SDK +原生应用 SDK
-会话回调参数将与被添加至事件的回调参数合并。被添加至事件的回调参数拥有高于会话回调参数的优先级。这意味着,当被添加至事件的回调参数拥有与会话回调参数同样Key时,以被添加至事件的回调参数值为准。 +会话回传参数将与被添加至事件的回传参数合并。被添加至事件的回传参数拥有高于会话回传参数的优先级。这意味着,当被添加至事件的回传参数拥有与会话回传参数同样的 Key 时,以被添加至事件的回传参数值为准。 -您可以通过传递Key至`Adjust.removeSessionCallbackParameter(String key)`的方式来删除特定会话回调参数。 +您可以通过传递 Key 至 `Adjust.removeSessionCallbackParameter(String key)` 的方式来删除特定会话回传参数。 @@ -1056,12 +1069,12 @@ Adjust.removeSessionCallbackParameter('foo');
-原生应用SDK +原生应用 SDK
-如果您希望删除会话回调参数中所有的Key及相应值,您可以通过`Adjust.resetSessionCallbackParameters()` 方式重置: +如果您希望删除会话回调参数中所有的 Key 及相应值,可以通过 `Adjust.resetSessionCallbackParameters(`) 方式重置: @@ -1087,19 +1100,18 @@ Adjust.resetSessionCallbackParameters();
-原生应用SDK +原生应用 SDK
- ### 会话合作伙伴参数 -与[会话回调参数](#cp-session-callback-parameters)的方式一样,会话合作伙伴参数也将被发送至Adjust SDK的每一个事件和会话中。 +与 [会话回传参数](#session-callback-parameters) 的方式一样,会话合作伙伴参数也会与 SDK 的每个事件或会话一同发送。 -它们将被传送至渠道合作伙伴,以集成您在Adjust[控制面板][dashboard]上已经激活的模块。 +这些参数会传送至在 Adjust [控制面板] 中已激活相关集成的渠道合作伙伴。 -会话合作伙伴参数具有与事件合作伙伴参数类似的接口。该参数是通过调用`Adjust.addSessionPartnerParameter(String key, String value)`被添加,而不是通过添加Key和值至事件: +会话合作伙伴参数接口与事件合作伙伴参数接口类似。该参数是通过调用 `Adjust.addSessionPartnerParameter(String key, String value)` 被添加,而不是通过添加 Key 和值至事件: @@ -1125,14 +1137,14 @@ Adjust.addSessionPartnerParameter('foo', 'bar');
-原生应用SDK +原生应用 SDK
-会话合作伙伴参数将与被添加至事件的合作伙伴参数合并。被添加至事件的合作伙伴参数具有高于会话合作伙伴参数的优先级。这意味着,当被添加至事件的合作伙伴参数拥有与会话合作伙伴参数同样Key时,以被添加至事件的合作伙伴参数值为准。 +会话合作伙伴参数将与被添加至事件的合作伙伴参数合并。被添加至事件的合作伙伴参数具有高于会话合作伙伴参数的优先级。这意味着,当被添加至事件的合作伙伴参数拥有与会话合作伙伴参数同样的 Key 时,以被添加至事件的合作伙伴参数值为准。 -您可以通过传递Key至`Adjust.removeSessionPartnerParameter(String key)`方式来删除特定的会话合作伙伴参数: +您可以通过传递 Key 至 `Adjust.removeSessionPartnerParameter(String key)` 方法,删除特定的会话合作伙伴参数: @@ -1158,13 +1170,12 @@ Adjust.removeSessionPartnerParameter('foo');
-原生应用SDK +原生应用 SDK
- -如果您希望删除会话合作伙伴参数中所有的Key及其相应值,您可以通过`Adjust.resetSessionPartnerParameters()`方式重置: +如果您希望删除会话合作伙伴参数中所有的 Key 及其相应值,可以通过 `Adjust.resetSessionPartnerParameters()`. 方法重置。 @@ -1192,14 +1203,14 @@ Adjust.resetSessionPartnerParameters(); ### 延迟启动 -延迟Adjust的SDK启动可以给您的应用一些时间获取被发送至安装的会话参数,如唯一识别码(unique identifiers)等。 +延迟 Adjust SDK 的启动可以为您的应用提供更充裕的时间,来接收所有想要随安装发送的会话参数(例如:唯一标识符)。 -通过在config实例中的`setDelayStart`(设置延迟启动)方式以秒为单位设置初始延迟时间: +利用 config 实例中的 `setDelayStart` 方法,以秒为单位设置初始延迟时间:
-Native App SDK +原生应用 SDK
@@ -1225,25 +1236,25 @@ adjustConfig.setDelayStart(5.5);
-原生应用SDK +原生应用 SDK
-在此种情况下,Adjust SDK不会在5.5秒内发送初始安装会话以及创建任何事件。在该时间过期后或您同时调用`Adjust.sendFirstPackages()`,每个会话参数将被添加至延迟安装的会话和事件中,Adjust SDK将恢复正常。 +在此示例中,Adjust SDK 不会在 5.5 秒内发送初始安装会话以及创建的任何事件。5.5 秒后 (或您在其此期间调用 `Adjust.sendFirstPackages()`),每个会话参数会添加至延迟的安装会话和事件,并且 Adjust SDK 会继续照常运行。 -**Adjust SDK最长的延迟启动时间为10秒。** +**您最多可以将 Adjust SDK 的启动时间延长 10 秒**。 -## 附加功能 +## 其他功能 -一旦您已经成功将Adjust SDK集成到您的项目中,您便可以使用以下功能。 +将 Adjust SDK 集成到项目中后,您即可利用以下功能: -### 推送标签(Push token)—— 卸载跟踪 +### 推送标签 (卸载跟踪) -推送标签适用于Adjust受众分群工具(Audience Builder)和客户回传,是卸载跟踪功能的必需信息。 +推送标签用于受众分群工具和客户回传;也是跟踪卸载和重装所需的信息。 -每当您获取或更新识别码时,请添加以下调用至Adjust,以发送推送标签给我们: +要向我们发送推送通知标签,请在获得标签 (或每当标签值变更) 时向 Adjust 添加下列调用: @@ -1253,9 +1264,9 @@ adjustConfig.setDelayStart(5.5); Adjust.setPushToken(pushNotificationsToken, context); ``` -以上添加了`context`的更新后签名让SDK可以涵盖更多的场景,以确保推送标签被发送。因此,我们建议您使用以上签名方式。 +更新后的签名加入了 `context`,可允许 SDK 涵盖更多场景,确保推送标签被发送。因此,我们建议您使用以上签名方式。 -尽管如此,我们仍支持之前没有`context`的签名方式。 +尽管如此,我们仍支持之前没有 `context` 的相同方法签名。 @@ -1276,16 +1287,16 @@ Adjust.setPushToken(pushNotificationsToken); ### 归因回传 -您可以注册一个监听器(listener),以获取跟踪链接归因变化的通知。由于考虑到归因的不同来源,归因信息无法被同步提供。最简单的方式是创建一个单一的匿名监听器: +您可以注册一个监听器 (listener),以获取跟踪链接归因变化的通知。考虑到归因的不同来源,归因信息无法被同步提供。 -请您务必考虑我们的[适用归因数据政策][attribution-data]。 +请查看我们的[归因数据政策][attribution-data]了解更多信息。 -使用Config实例,在启动SDK之前添加匿名监听器: +使用 config 实例,在启动 SDK 之前添加归因回传:
-原生SDK +原生 SDK
@@ -1294,7 +1305,7 @@ Adjust.setPushToken(pushNotificationsToken); ```java AdjustConfig config = new AdjustConfig(this, appToken, environment); -config.setOnAttributionChangedListener(new OnAttributionChangedListener() { +config.setOnAttributionChangedListener(newOnAttributionChangedListener() { @Override public void onAttributionChanged(AdjustAttribution attribution) {} }); @@ -1324,16 +1335,85 @@ Adjust.onCreate(adjustConfig);
-原生应用SDK +原生应用 SDK
-监听器函数将在SDK接收到最终归因数据后被调用。在监听器函数中,您可以访问`attribution`(归因)参数。这里是其属性的快捷摘要: +SDK 收到最终归因数据后,监听器函数会被调用。在监听器函数中,您可以访问 `attribution` 参数。以下是其属性的摘要: + +- `trackerToken` 目前归因的跟踪码字符串。 +- `trackerName` 目前归因的跟踪链接名称字符串。 +- `network` 目前归因的渠道分组层字符串。 +- `campaign` 目前归因的推广分组层字符串。 +- `adgroup` 目前归因的广告组分组层字符串。 +- `creative` 目前归因的素材分组层字符串。 +- `clickLabel` 目前归因的点击标签字符串。 +- `adid` Adjust 设备标识符字符串。 +- `costType` 成本类型字符串。 +- `costAmount` 成本金额。 +- `costCurrency` 成本币种字符串。 + +**请注意**:只有在`AdjustConfig` 中通过调用 `setNeedsCost` 方法来进行配置后,`costType`、 `costAmount` 和 `costCurrency` 成本数据才可用。如果未进行配置,或已配置但这些字段不属于归因的一部分,那么字段值就会为 `null`。此功能仅适用于 SDK 4.25.0 及以上版本。 + +### 订阅跟踪 + +**请注意**:此功能仅适用于原生 SDK 4.22.0 及以上版本。 + +您可以用 Adjust SDK 跟踪 Play 应用商店的订阅,并验证这些订阅是否有效。订阅购买成功后,请向 Adjust SDK 进行如下调用: + + + + + + + + +
+原生应用 SDK +
+ +```java +AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription( + price, + currency, + sku, + orderId, + signature, + purchaseToken); +subscription.setPurchaseTime(purchaseTime); + +Adjust.trackPlayStoreSubscription(subscription); +``` +
+ +订阅跟踪参数: -- `trackerToken`目前归因的跟踪码字符串 -- `trackerName`目前归因的跟踪链接名称字符串 -- `network` 目前归因的渠道分组层字符串 -- `campaign` 目前归因的推广分组层字符串 -- `adgroup` 目前归因的广告组分组层字符串 -- `creative` 目前归因的素材分组层字符串 -- `clickLabel` 目前归因的点击标签字符串 -- `adid` Adjust设备ID字符串 +- [price](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getpriceamountmicros) +- [currency](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getpricecurrencycode) +- [sku](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getsku) +- [orderId](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getorderid) +- [signature](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getsignature) +- [purchaseToken](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasetoken) +- [purchaseTime](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasetime) + +与事件跟踪一样,您也可以向订阅对象附加回传和合作伙伴参数: + +```java +AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription( + price, + currency, + sku, + orderId, + signature, + purchaseToken); +subscription.setPurchaseTime(purchaseTime); + +// add callback parameters +subscription.addCallbackParameter("key","value"); +subscription.addCallbackParameter("foo","bar"); + +// add partner parameters +subscription.addPartnerParameter("key","value"); +subscription.addPartnerParameter("foo","bar"); + +Adjust.trackPlayStoreSubscription(subscription); +``` ### 广告收入跟踪 @@ -1341,37 +1421,39 @@ Adjust.onCreate(adjustConfig); 您可以通过调用以下方法,使用 Adjust SDK 对广告收入进行跟踪: - - - + +
+ + + - - - + + + - -
原生应用 SDK -
+
```java Adjust.trackAdRevenue(source, payload); ``` -
+
您需要传递的方法参数包括: + - `source` - 表明广告收入来源信息的` String` 对象。 - `payload` - 包含广告收入 JSON 的` JSONObject` 对象。 目前,我们支持以下 `source` 参数值: -- `AD_REVENUE_MOPUB` - 代表 MoPub 广告聚合平台(更多相关信息,请查看 [集成指南][sdk2sdk-mopub]) + +- `AD_REVENUE_MOPUB` - 代表 MoPub 广告聚合平台(更多相关信息,请查看 [集成指南][sdk2sdk-mopub]) ### 会话和事件回传 -您可以注册一个监听器(listener),以在事件或者会话被跟踪时获取通知。共有四个监听器:一个是用来跟踪成功事件,一个跟踪失败事件,一个跟踪成功会话,一个跟踪失败会话。您可以在创建配置对象后添加任意数量的监听器: +您可以注册一个监听器,以在事件或者会话被跟踪时获取通知。监听器共有 4 个:一个用来跟踪成功事件,一个跟踪失败事件,一个跟踪成功会话,一个跟踪失败会话。您可以在创建配置对象后添加任意数量的监听器: @@ -1381,7 +1463,7 @@ Adjust.trackAdRevenue(source, payload); AdjustConfig config = new AdjustConfig(this, appToken, environment); // Set event success tracking delegate. -config.setOnEventTrackingSucceededListener(new OnEventTrackingSucceededListener() { +config.setOnEventTrackingSucceededListener(newOnEventTrackingSucceededListener() { @Override public void onFinishedEventTrackingSucceeded(AdjustEventSuccess eventSuccessResponseData) { // ... @@ -1389,7 +1471,7 @@ config.setOnEventTrackingSucceededListener(new OnEventTrackingSucceededListener( }); // Set event failure tracking delegate. -config.setOnEventTrackingFailedListener(new OnEventTrackingFailedListener() { +config.setOnEventTrackingFailedListener(newOnEventTrackingFailedListener() { @Override public void onFinishedEventTrackingFailed(AdjustEventFailure eventFailureResponseData) { // ... @@ -1397,7 +1479,7 @@ config.setOnEventTrackingFailedListener(new OnEventTrackingFailedListener() { }); // Set session success tracking delegate. -config.setOnSessionTrackingSucceededListener(new OnSessionTrackingSucceededListener() { +config.setOnSessionTrackingSucceededListener(newOnSessionTrackingSucceededListener() { @Override public void onFinishedSessionTrackingSucceeded(AdjustSessionSuccess sessionSuccessResponseData) { // ... @@ -1405,7 +1487,7 @@ config.setOnSessionTrackingSucceededListener(new OnSessionTrackingSucceededListe }); // Set session failure tracking delegate. -config.setOnSessionTrackingFailedListener(new OnSessionTrackingFailedListener() { +config.setOnSessionTrackingFailedListener(newOnSessionTrackingFailedListener() { @Override public void onFinishedSessionTrackingFailed(AdjustSessionFailure sessionFailureResponseData) { // ... @@ -1443,30 +1525,30 @@ Adjust.onCreate(adjustConfig);
-原生应用SDK +原生应用 SDK
-监听器函数将于SDK发送包(package)到服务器后调用。在监听器函数中,您可以访问专为监听器所设的响应数据对象。成功会话的响应数据对象字段摘要如下: +SDK 尝试向服务器发送包 (package) 后,将会调用监听器函数。在监听器函数中,您可以访问专门用于监听器的响应数据对象。成功会话响应数据对象字段的摘要如下: -- `message` 服务器信息字符串或者SDK纪录的错误信息 -- `timestamp` 服务器的时间戳字符串 -- `adid` Adjust提供的设备唯一识别码字符串 -- `jsonResponse` JSON对象及服务器响应 +- `message` 服务器信息字符串或者 SDK 记录的错误信息。 +- `Timestamp` 服务器时间戳字符串。 +- `Adid` 由 Adjust 提供的设备唯一标识符字符串。 +- `JsonResponse` JSON 对象及服务器响应。 -两个事件响应数据对象均包含: +两个事件响应数据对象都包含: -- 如果跟踪的包是一个事件,`eventToken` 代表事件识别码。 -- `callbackId` 为事件对象设置的自定义[回调ID](#cp-event-callback-id)。 +- 如果跟踪的包是一个事件,那么 `EventToken` 代表事件识别码字符串。 +- `CallbackId` 为事件对象设置的自定义[回传 ID](#cp-event-callback-id)字符串。 -事件和会话跟踪不成功的对象也均包含: +事件和会话跟踪失败的对象也均包含: -- `willRetry` Boolean表示稍后将再尝试发送数据包。 +- `willRetry` 布尔,表示稍后是否会尝试重新发送数据包。 ### 用户归因 -正如我们在[归因回传](#af-attribution-callback)章节中所描述的,每当归因信息更改时都会触发此回调。如果您想要在任何其他时间访问用户当前归因值的信息,您可以通过对`Adjust`实例调用如下方式来实现: +如同之前在[归因回传一节](#af-attribution-callback)阐述的那样,只要归因信息发生更改,就会触发此回传,想要随时访问用户当前的归因信息,您可通过调用 `Adjust` 实例的以下方法来实现: @@ -1492,28 +1574,28 @@ let attribution = Adjust.getAttribution();
-原生应用SDK +原生应用 SDK
-**注意**:此调用只能在Adjust SDK 4.11.0和以上版本中进行。 +**请注意**:Adjust SDK 版本必须为 v4.11.0 或**更高**,才能进行该调用。 -**注意**:只有在Adjust后台跟踪到应用安装以及归因回传被触发后,您才能获取有关当前归因的信息。因此,在SDK被初始化以及归因回传被触发之前,您将**无法**访问用户归因值。 +**注意**:只有在我们的后台跟踪到应用安装并触发归因回传后,您才能获取当前的归因信息。因此,在 SDK 初始化以及归因回传触发前,您**无法**访问用户的归因值。 -### 设备ID +### 设备 ID -Adjust SDK支持您获取一些设备ID。 +Adjust SDK 支持您接收设备标识符。 -### Google Play服务广告ID +### Google Play 服务广告 ID -某些服务(如Google Analytics)要求您协调设备及客户ID以避免重复报告。 +某些服务 (如 Google Analytics) 要求您协调广告 ID 及客户 ID 以避免重复报告。
-原生应用SDK +原生应用 SDK
- -如果您需要获取Google广告ID,则存在一个限制,即仅限于在后台线程里读取。如您调用带有背景关系(context)的`getGoogleAdId`函数及`OnDeviceIdsRead`实例,则可在任何情况下都可成功获取ID: + +在获取 Google 广告 ID 时您会遇到限制:Google 广告 ID 只能在后台线程中读取。如果调用带上下文 (context) 的 `getGoogleAdId` 函数和 `OnDeviceIdsRead` 实例,那么在任何情况下都能成功: ```java Adjust.getGoogleAdId(this, new OnDeviceIdsRead() { @@ -1530,8 +1612,8 @@ Adjust.getGoogleAdId(this, new OnDeviceIdsRead() {
- -如需获取设备的Google广告设备ID,您必须传递一个回调函数到`Adjust.getGoogleAdId`,其将在参数中接收Google广告ID,如下所示: + +如需获取设备的 Google 广告设备 ID,您必须传递一个回传函数到 `Adjust.getGoogleAdId`,其将在参数中接收 Google 广告 ID,如下所示: ```js Adjust.getGoogleAdId(function(googleAdId) { @@ -1542,14 +1624,14 @@ Adjust.getGoogleAdId(function(googleAdId) {
-### Amazon广告ID +### Amazon 广告 ID -如果您需要获取Amazon广告ID,请在`Adjust`实例上调用以下方法: +如果您需要获取 Amazon 广告 ID,请调用` Adjust` 实例的下列方法: @@ -1575,14 +1657,14 @@ let amazonAdId = Adjust.getAmazonAdId();
-原生应用SDK +原生应用 SDK
-### Adjust设备ID +### Adjust 设备 ID -Adjust后台将为每一台安装了您应用的设备生成一个唯一的**Adjust设备ID** (**adid**)。您可在`Adjust`实例上调用以下方法来获取该ID: +我们的后端会为每个安装您应用的设备生成唯一的 **Adjust 设备标识符** (即 **adid**).为了获得此标识符,请调用 `Adjust` 实例的下列方法: @@ -1608,21 +1690,60 @@ let adid = Adjust.getAdid();
-原生应用SDK +原生应用 SDK
-**注意**: 此调用只能在Adjust SDK 4.11.0和以上版本中进行。 +**请注意**:Adjust SDK 版本必须为 v4.11.0 或**更高**,才能进行该调用。 + +**请注意**:只有在我们的后台跟踪到应用安装后,您才能获取有关 **adid** 的信息。因此,在 SDK 初始化以及成功跟踪到应用安装前,您**无法**访问 **adid** 值。 + +### 预安装应用 -**注意**: 只有在Adjust后台跟踪到应用安装后,您才能获取**adid**的相关信息。自此之后,Adjust SDK已经拥有关于设备**adid**的信息,您可以使用此方法来访问它。因此,在SDK被初始化以及您的应用安装被成功跟踪之前,您将**无法访问adid**。 +您可以使用 Adjust SDK,识别设备上已在生产过程中预安装您应用的用户。Adjust 可提供两个解决方案,其中一个采用系统负载,另一个采用默认跟踪链接。 -### 预安装跟踪码 +总体来说,我们推荐您使用 system payload 解决方案。但是,在有些使用情境下,可能需要用到跟踪链接。请访问我们的[帮助中心](https://help.adjust.com/zh/article/pre-install-tracking),了解 Adjust 的预装合作伙伴与合作伙伴的集成。如果您不确定该采用哪种解决方案,请联系 integration@adjust.com。 -如果您希望使用Adjust SDK来识别已在设备中预安装您的应用的用户,请执行以下步骤。 +#### 使用 system payload -- 在[控制面板][dashboard]中创建一个新的跟踪码。 -- 打开应用委托,并在`AdjustConfig`实例中添加设置默认跟踪码: +**SDK v4.23.0 及更高版本**支持该x解决方案。 + +创建设置对象后,请在参数为 true 的前提下,调用 `setPreinstallTrackingEnabled`: + + + + + + + + + + + + + + +
+原生应用 SDK +
+ +```java +adjustConfig.setPreinstallTrackingEnabled(true); +``` +
+Web View SDK +
+ +```js +adjustConfig.setPreinstallTrackingEnabled(true); +``` +
+ +#### 采用默认跟踪链接 + +- 在 [控制面板] 中创建新的跟踪链接。 +- 打开应用委托,设置配置的默认跟踪链接: @@ -1648,24 +1769,24 @@ let adid = Adjust.getAdid();
- 原生应用SDK + 原生应用 SDK
-- 用您在步骤1中创建的跟踪码替换`{TrackerToken}`(跟踪码)。请注意,控制面板中显示的是跟踪URL(包括`http://app.adjust.com/`)。在源代码中,您应该仅指定六个字符的识别码,而不是整个URL。 - -- 创建并运行您的应用。您应该可以在应用日志输出中看到如下行: +- 用您在步骤 1 中创建的跟踪码替换 `{TrackerToken}`。请注意,控制面板显示的是跟踪链接 (包括 `http://app.adjust.com/`)。而在源代码中,您应该仅输入 6 个或 7 个字符的识别码,而不是整个跟踪链接。 + +- 创建并运行应用。您应该可以在 LogCat 中看到以下行: ``` - Default tracker: 'abc123' + 默认跟踪链接:'abc123' ``` ### 离线模式 -您可以把Adjust SDK设置离线模式,以暂停发送数据到我们的服务器,但仍然继续跟踪及保存数据并在之后发送。当设为离线模式时,所有数据将存放于一个文件中,所以请注意不要于离线模式触发太多事件。 +您可以将 Adjust SDK 设为离线模式,暂停向我们的服务器传输数据 (但仍然保存跟踪数据用于之后发送)。Adjust SDK 处于离线模式时,所有信息都会保存在一个文件中。请注意不要在离线模式下触发太多事件。 -您可以调用`setOfflineMode`,启用参数为`true`,以激活离线模式。 +调用参数为 `true` 的 `setOfflineMode` 即可激活脱机模式。 @@ -1691,18 +1812,19 @@ Adjust.setOfflineMode(true);
-原生应用SDK +原生应用 SDK
-相反地,您可以调用`setOfflineMode`,启用参数为`false`,以终止离线模式。当Adjust SDK回到在线模式时,所有被保存的数据将被发送到我们的服务器,并保留正确的时间信息。 +相反地,您可以调用 `setOfflineMode`,启用参数为 `false`,以终止离线模式。当 Adjust SDK 调回在线模式后,保存的所有信息都会发送到我们的服务器,并保留正确的时间信息。 + +与禁用跟踪不同,此设置在会话之间将**不被保存**。也就是说,即使应用在处于离线模式时停用,SDK 每次启动时都必定处于在线模式。 -跟禁用跟踪设置不同的是,此设置在会话之间将**不被保存**。这意味着,即使应用在离线模式时被终止,每当SDK启动时都必定处于在线模式。 ### 禁用跟踪 -您可以通过调用`setEnabled`,启用参数为`false`,来禁用Adjust SDK的跟踪功能。**该设置在会话间保存**。 +您可以通过调用 `setEnabled`,启用参数为 `false`,来禁用 Adjust SDK 对当前设备的一切跟踪功能。**该设置在会话间保存。**。 @@ -1728,16 +1850,16 @@ Adjust.setEnabled(false);
-Native App SDK +原生应用 SDK
-您可以通过调用`isEnabled`函数来查看Adjust SDK目前是否被启用。您始终可以通过调用`setEnabled`,启用参数为`true`,来激活Adjust SDK。 +您可以调用 `isEnabled` 函数,查看 Adjust SDK 目前是否启用。您始终可以通过调用启用参数设置为 `true` 的 `setEnabled` 来激活 Adjust SDK。 ### 事件缓冲 -如果您的应用大量使用事件跟踪,您可能想要延迟部分网络请求,以便按分钟成批发送这些请求。您可以通过配置实例启用事件缓冲: +如果您的应用大量使用事件跟踪,您可能想要延迟部分网络请求,以便每分钟按批量发送。您可以利用配置实例来启用事件缓冲: @@ -1765,12 +1887,12 @@ adjustConfig.setEventBufferingEnabled(true); ### 后台跟踪 -Adjust SDK的默认行为是当应用处于后台时暂停发送网络请求。您可以通过配置实例更改该设置: +Adjust SDK 的默认行为是当应用处于后台时暂停发送网络请求。您可以在配置实例中更改此设置:
-原生应用SDK +原生应用 SDK
@@ -1796,14 +1918,14 @@ adjustConfig.setSendInBackground(true);
-原生应用SDK +原生应用 SDK
-### GDPR 的被遗忘权 +### GDPR 被遗忘权 -根据欧盟的《一般数据保护条例》(GDPR) 第17条规定,用户行使被遗忘权时,您可以通知Adjust。调用以下方法,Adjust SDK将会收到指示向Adjust后端传达用户选择被遗忘的信息: +根据欧盟的《一般数据保护条例》(GDPR) 第 17 条规定,用户行使被遗忘权时,您可以通知 Adjust。调用以下方法时,Adjust SDK 将会收到指示向 Adjust 后端传达用户选择被遗忘的信息: @@ -1829,47 +1951,197 @@ Adjust.gdprForgetMe();
-原生应用SDK +原生应用 SDK
-收到此信息后,Adjust将清除该用户数据,并且Adjust SDK将停止跟踪该用户。以后不会再向Adjust发送来自此设备的请求。 +收到此信息后,Adjust 将清除用户数据,并且 Adjust SDK 将停止跟踪该用户。以后不会再向 Adjust 发送来自此设备的请求。 + +请注意,即便在测试环境中,此决定也是永久性的,**不可逆转**。 + +## 具体用户的第三方数据分享 -请注意,即便在测试环境中,该决定也是永久且不可逆转的。 +当有用户禁用、启用或重启第三方合作伙伴数据分享时,您可以通知 Adjust。 + +### 为具体用户禁用第三方数据分享 + +请调用以下方法,指示 Adjust SDK 将用户禁用数据分享的选择传递给 Adjust 后端: + + + + + + + + + + + + + + +
+原生应用 SDK +
-## 测试及故障排查 +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(false); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
-### 显示"Session failed (Ignoring too frequent session. ...)" 出错信息 +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(false); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
-该错误信息一般于测试安装时出现的。单单卸载然后再安装应用并不足以触发新的安装。由于我们服务器已经有该设备的纪录,服务器只会判断为SDK失去了本地的会话数据而忽视该错误信息。 +收到此信息后,Adjust 会停止向合作伙伴分享该用户的数据,而 Adjust SDK 将会继续如常运行。 -虽然该行为可能在测试阶段比较麻烦,但却是必须的,目的是为了让Sandbox尽量等同于生产行为。 +### 为具体用户启用或重启第三方数据分享 -如果您拥有应用编辑级别(或更高级别)的访问权限,您可以使用我们的[测试控制台][testing_console]直接从Adjust控制面板重置任何设备的应用会话数据。 +请调用以下方法,指示 Adjust SDK 将用户启用或变更数据分享的选择传递给 Adjust 后端: -一旦设备被正确遗忘,测试控制台将返回`Forgot device`。如果设备已经被遗忘(或者值不正确),链接将返回`Advertising ID not found`。 + + + + + + + + + + + + + +
+原生应用 SDK +
-遗忘设备将不会逆转GDPR遗忘调用。 +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
-如果您当前的包允许访问,您还可以使用我们的[开发者API][dev_api]检查和忘记设备。 +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(true); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
-### 我的广播接收器是否能成功获取install referrer? +收到此信息后,Adjust 会就是否与合作伙伴分享该用户的数据做出相应变更,而 Adjust SDK 将会继续如常运行。 -如果您按照[指南](#qs-gps-intent)描述的步骤来设置, 广播接收器就应该可以将install referrer发送到SDK以及我们的服务器。 +请调用以下方法,指示 Adjust SDK 向 Adjust 后端发送精细选项: -为了测试设置是否正确,您可以手动触发一个install referrer测试。用您的应用ID替换`com.your.appid`,然后使用Android Studio包括的[adb](http://developer.android.com/tools/help/adb.html)工具,执行以下命令。 + + + + + + + + + + + + + +
+原生应用 SDK +
+ +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null); +adjustThirdPartySharing.addGranularOption("PartnerA", "foo", "bar"); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
+ +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(null); +adjustThirdPartySharing.addGranularOption("PartnerA", "foo", "bar"); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+ +### 监测具体用户的许可 + +要在 Adjust 控制面板中启用或禁用数据隐私设置,包括许可有效期和用户数据留存期,您需要安装以下方法。 + +请调用以下方法,指示 Adjust SDK 将数据隐私设置传递给 Adjust 后端: + + + + + + + + + + + + + + +
+原生应用 SDK +
+ +```java +Adjust.trackMeasurementConsent(true); +``` +
+Web View SDK +
+ +```js +Adjust.trackMeasurementConsent(true); +``` +
+ +收到此信息后,Adjust 会启用或禁用许可监测。而 Adjust SDK 将会继续如常运行。 + +## 测试与故障排查 + +### 显示 "session failed (Ignoring too frequent session...)" 出错信息。 + +该错误一般发生在安装测试时。单凭卸载和重装应用不足以触发新安装。由于我们服务器已经有该设备的纪录,服务器会认定该设备的 SDK 丢失了本地聚合的会话数据,并忽略该错误信息。 + +虽然该行为可能在测试阶段比较麻烦,但却是必须的,目的是为了让 sandbox 环境的行为尽可能地符合生产环境的行为。 + +如果您拥有应用编辑员级别 (或更高级别) 的权限,则可以使用我们的[测试控制台][testing_console]直接从 Adjust 控制面板重置任何设备的应用会话数据。 + +一旦设备被正确遗忘,测试控制台将返回 `Forgot device`。如果设备已经被遗忘 (或者值不正确),链接将返回 `Advertising ID not found`。 + +遗忘设备将不会逆转 GDPR 遗忘调用。 + +如果您当前的包允许访问,您还可以使用我们的[开发者 API][dev_api] 检查和忘记设备。 + +### 我的广播接收器是否能成功获取 Install Referrer? + +如果您按照[指南](#qs-gps-intent)描述的步骤来设置, 广播接收器就应该可以将 install referrer 发送到 SDK 以及我们的服务器。 + +您可以手动触发测试 Install Referrer,检查设置情况。将 `com.your.appid` 替换为您的应用 ID,并使用 Android Studio 自带的 [adb](http://developer.android.com/tools/help/adb.html) 工具运行下列命令: ``` adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver --es "referrer" "adjust_reftag%3Dabc1234%26tracking_id%3D123456789%26utm_source%3Dnetwork%26utm_medium%3Dbanner%26utm_campaign%3Dcampaign" ``` -如果您已经按照该[指南][referrer]设置了另一个广播接收器使用`INSTALL_REFERRER`intent,请用`com.adjust.sdk.AdjustReferrerReceiver`替换您设置的广播接收器。 +如果您已经按照该[指南][referrer]说明,设置了另一个广播接收器使用 `INSTALL_REFERRER` intent ,请用您的广播接收器替换 `com.adjust.sdk.AdjustReferrerReceiver` 。 -您也可以删除`-n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver`参数,以让设备上的所有应用接收`INSTALL_REFERRER`intent。 +您也可以删除 `-n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver` 参数,让设备上的所有应用接收 `INSTALL_REFERRER` intent。 -如果您将日志量设置为`verbose`,您应该可以通过读取referrer查看日志: +如果您将日志级别设置为 `verbose`,就应该可以通过读取 referrer 查看日志: ``` -V/Adjust: Reading query string (adjust_reftag=abc1234&tracking_id=123456789&utm_source=network&utm_medium=banner&utm_campaign=campaign) from reftag +V/Adjust: Referrer to parse (adjust_reftag=abc1234&tracking_id=123456789&utm_source=network&utm_medium=banner&utm_campaign=campaign) from reftag ``` -以及添加点击包(click package)到SDK包处理器: +以及添加点击包 (click package) 到 SDK 包处理器: ``` V/Adjust: Path: /sdk_click @@ -1887,14 +2159,13 @@ V/Adjust: Path: /sdk_click tracking_enabled 1 ``` -如果您在启动应用前执行以上测试,数据包将不会被发送。以上数据包将于应用启动后被发送。 - -**重要:** 我们建议您**不要**使用`adb`工具来测试该特定功能。为了测试完整的referrer内容(在由`&`分隔多个参数的情况下),如使用adb工具您需要对内容进行编码以便发送给广播接收器。如未编码,`adb`将在第一个`&`符号后剪切referrer,并向您的广播接收器发送错误内容。 +如果您在启动应用前执行以上测试,数据包将不会被发送。数据包将于应用启动后被发送。 -如果您希望查看应用如何接收未编码的referrer值,我们建议您使用我们的示例应用,并更改传递的内容,以便被`MainActivity.java`文件内`onFireIntentClick`方法中的意图触发: +**重要提示**:我们建议您不要使用 `adb` 工具测试该功能。为了测试完整的 referrer 内容 (在由 `&` 分隔多个参数的情况下),如果使用 `adb`,您就需要对内容进行编码以便发送给广播接收器。如未编码,`adb` 将在第一个 `&` 符号后切断 referrer,并向您的广播接收器发送错误内容。 +如果您希望查看应用如何接收未编码的 referrer 值,我们建议您使用我们的示例应用,并更改传递的内容,以便被 `MainActivity.java` 文件内的 `onFireIntentClick` 方法中的 intent 触发: - ```java +```java public void onFireIntentClick(View v) { Intent intent = new Intent("com.android.vending.INSTALL_REFERRER"); intent.setPackage("com.adjust.examples"); @@ -1903,41 +2174,44 @@ public void onFireIntentClick(View v) { } ``` -您可随意使用自选内容更改`putExtra`方法的第二个参数。 +您可随意使用自选内容更改 `putExtra` 方法的第二个参数。 -### 我是否可以在应用激活时触发事件? +### 我能否在应用激活时触发事件? 此时触发事件可能无法达到您预期的效果。原因如下: -全局`Application`类上的`onCreate`方式不仅在应用启动时调用,而且在应用记录到系统或应用事件时调用。 +全局 `Application` 类上的 `onCreate` 方法不仅在应用启动时调用,而且在应用捕捉到系统或应用事件时调用。 -此时,我们的SDK已经准备初始化了,但是还没有正式启动。只有当activity发生时,即当用户真正激活应用时,SDK才会正式启动。 +此时,我们的 SDK 已经准备初始化了,但是还没有正式启动。只有当 activity 发生时,比如当用户真正激活应用时,SDK 才会正式启动。 -即使用户没有激活应用,此时触发事件将启动Adjust SDK以及发送事件——具体时间取决于应用的外部因素。 +即使用户没有激活应用,此时触发事件将启动 Adjust SDK 并发送事件 — 具体时间取决于应用的外部因素。 -在应用激活时触发事件将会导致被跟踪的安装及会话数量报告不准确。 +在应用激活时触发事件会导致被跟踪的安装及会话数量报告不准确。 -如果您希望在安装后触发事件,请使用[归因回传](#af-attribution-callback)。 +如果您想在安装后触发事件,请使用[归因回传](#af-attribution-callback)。 -如果您希望在应用激活后触发事件,请使用被启动的Activity的`onCreate`方法。 +如果您想在应用激活时触发事件,请为指定 activity 使用 `onCreate` 方法。 -[dashboard]: http://adjust.com -[adjust.com]: http://adjust.com +[dashboard]: http://adjust.com/zh +[控制面板]: http://adjust.com/zh +[adjust.com]: http://adjust.com/zh [en-readme]: ../../README.md [zh-readme]: ../chinese/README.md [ja-readme]: ../japanese/README.md [ko-readme]: ../korean/README.md -[example-java]: ../../Adjust/example-app-java -[example-kotlin]: ../../Adjust/example-app-kotlin -[example-tv]: ../../Adjust/example-app-tv -[example-webbridge]: ../../Adjust/example-app-webbridge +[example-java]: ../../Adjust/example-app-java +[example-kotlin]: ../../Adjust/example-app-kotlin +[example-keyboard]: ../../Adjust/example-app-keyboard +[example-tv]: ../../Adjust/example-app-tv +[example-webbridge]: ../../Adjust/example-app-webbridge [maven]: http://maven.org -[referrer]: ../chinese/multiple-receivers.md -[releases]: https://github.com/adjust/adjust_android_sdk/releases -[google_ad_id]: https://support.google.com/googleplay/android-developer/answer/6048248?hl=en +[referrer]: https://github.com/adjust/android_sdk/blob/master/doc/chinese/misc/multiple-receivers.md +[releases]: https://github.com/adjust/android_sdk/releases +[google-ad-id]: https://support.google.com/googleplay/android-developer/answer/6048248?hl=en +[Google 广告 ID]: https://support.google.com/googleplay/android-developer/answer/6048248?hl=en [event-tracking]: https://docs.adjust.com/zh/event-tracking [callbacks-guide]: https://docs.adjust.com/zh/callbacks [new-referrer-api]: https://developer.android.com/google/play/installreferrer/library.html @@ -1945,22 +2219,23 @@ public void onFireIntentClick(View v) { [attribution-data]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md [android-dashboard]: http://developer.android.com/about/dashboards/index.html [currency-conversion]: https://docs.adjust.com/zh/event-tracking/#tracking-purchases-in-different-currencies -[android_application]: http://developer.android.com/reference/android/app/Application.html +[android-application]: http://developer.android.com/reference/android/app/Application.html [android-launch-modes]: https://developer.android.com/guide/topics/manifest/activity-element.html -[google_play_services]: http://developer.android.com/google/play-services/setup.html +[google-play-services]: http://developer.android.com/google/play-services/setup.html +[Google Play 服务]: http://developer.android.com/google/play-services/setup.html [reattribution-with-deeplinks]: https://docs.adjust.com/zh/deeplinking/#manually-appending-attribution-data-to-a-deep-link [android-purchase-verification]: https://github.com/adjust/android_purchase_sdk -[testing_console]: https://docs.adjust.com/zh/testing-console/#part-2 -[dev_api]: https://docs.adjust.com/zh/adjust-for-developers/ - -[sdk2sdk-mopub]: ../chinese/sdk-to-sdk/mopub.md +[testing_console]: https://docs.adjust.com/zh/testing-console/#how-to-clear-your-advertising-id-from-adjust-between-tests +[dev_api]: https://docs.adjust.com/zh/adjust-for-developers/ +[sdk2sdk-mopub]: ../../doc/chinese/sdk-to-sdk/mopub.md +[集成指南]: https://github.com/adjust/android_sdk/tree/master/doc/chinese ## 许可 Adjust SDK 拥有MIT 许可证。 -版权所有(c) 2012-2019 Adjust GmbH,http://www.adjust.com +版权所有(c) 2012-2021 Adjust GmbH,http://www.adjust.com 特此免费授予获得本软件及相关文档文件(“软件”)副本的任何人,得以无限制地处理本软件,其范围包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本;具备本软件上述权限之人员需遵守以下条件: @@ -1968,3 +2243,4 @@ Adjust SDK 拥有MIT 许可证。 本软件“按原样”提供,不提供任何形式的明示或暗示保证,包括对适销性、适用于特定用途或非侵权性的保证。任何情况下,作者或版权所有者都不应承担任何索赔、损害赔偿或其他责任,无论是因软件或使用或其他软件处理引起的或与其相关的合同行为、侵权行为或其他行为。 + diff --git a/doc/chinese/plugins/oaid.md b/doc/chinese/plugins/oaid.md index 38cea10ac..60c7681f9 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.26.2' -implementation 'com.adjust.sdk:adjust-android-oaid:4.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' +implementation 'com.adjust.sdk:adjust-android-oaid:4.27.0' ``` 您还可以将 Adjust OAID 插件作为 JAR 文件进行添加,该文件可从我们的 [版本页面][releases] 下载。 diff --git a/doc/english/migration/migrate.md b/doc/english/migration/migrate.md index 2e775fde0..e1f5f6c71 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.26.2 from 3.6.2 +## Migrate your Adjust SDK for Android to 4.27.0 from 3.6.2 ### The Application class diff --git a/doc/english/plugins/oaid.md b/doc/english/plugins/oaid.md index c021f8613..5a001d1c2 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.26.2' -implementation 'com.adjust.sdk:adjust-android-oaid:4.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' +implementation 'com.adjust.sdk:adjust-android-oaid:4.27.0' ``` You can also add the Adjust OAID plugin as JAR file, which you can download from our [releases page][releases]. diff --git a/doc/japanese/README.md b/doc/japanese/README.md index 72aaf7221..6aa39c48c 100644 --- a/doc/japanese/README.md +++ b/doc/japanese/README.md @@ -1,127 +1,134 @@ -これはネイティブadjust™のAndroid SDKガイドです。adjust™についての詳細は[adjust.com]をご覧ください。 +## 概要 + +これはネイティブAdjust™のAndroid SDKガイドです。Adjust™についての詳細はadjust.comをご覧ください。 Read this in other languages: [English][en-readme], [中文][zh-readme], [日本語][ja-readme], [한국어][ko-readme]. ## 目次 -### Quick start +## クイックスタート + * [サンプルアプリ](#qs-example-apps) * [基本的な導入方法](#qs-getting-started) - * [SDK をプロジェクトに追加する](#qs-add-sdk) - * [Google Play サービスの追加](#qs-gps) + * [プロジェクトにSDKを追加](#sdk-add) + * [Google Play Servicesの追加](#qs-gps) * [パーミッションの追加](#qs-permissions) * [Proguard の設定](#qs-proguard) - * [インストールリファラ](#qs-install-referrer) + * [インストールリファラー](#qs-install-referrer) * [Google Play Referrer API](#qs-gpr-api) * [Google Play Store のインテント](#qs-gps-intent) - * [Huawei リファラAPI](#qs-huawei-referrer-api) - * [SDK をアプリに実装する](#qs-integrate-sdk) + * [HuaweiリファラーAPI](#qs-huawei-referrer-api) + * [アプリにSDKを実装](#qs-integrate-sdk) * [基本設定](#qs-basic-setup) * [Native App SDK](#qs-basic-setup-native) * [WebView SDK](#qs-basic-setup-web) * [セッショントラッキング](#qs-session-tracking) * [APIレベルが14以降](#qs-session-tracking-api-14) - * [レベル9から13のAPI](#qs-session-tracking-api-9) - * [SDK シグネチャー](#qs-sdk-signature) - * [Adjust ログの取得](#qs-adjust-logging) + * [APIレベルが9〜13](#qs-session-tracking-api-9) + * [SDKシグネチャー](#qs-sdk-signature) + * [Adjustログ](#qs-adjust-logging) * [アプリのビルド](#qs-build-the-app) -### ディープリンキング +### ディープリンク - * [ディープリンク](#dl) - * [スタンダード・ディープリンキング](#dl-standard) - * [ディファード・ディープリンキング](#dl-deferred) + * [スタンダードディープリンク](#dl-standard) + * [ディファードディープリンク](#dl-deferred) * [ディープリンクを介したリアトリビューション](#dl-reattribution) - + ### イベントトラッキング * [イベントトラッキング](#et-tracking) * [収益のトラッキング](#et-revenue) * [収益の重複排除 (deduplication)](#et-revenue-deduplication) - * [アプリ内課金の保証](#et-purchase-verification) - -### カスタムパラメータ - - * [カスタムパラメータ](#cp) - * [イベントパラメータ](#cp-event-parameters) - * [イベントコールバックパラメータ](#cp-event-callback-parameters) - * [パートナーパラメータ](#cp-event-partner-parameters) + * [アプリ内購入認証](#et-purchase-verification) + +### カスタムパラメーター + + * [カスタムパラメーターの概要](#cp) + * [イベントパラメーター](#cp-event-parameters) + * [イベントコールバックパラメーター](#cp-event-callback-parameters) + * [イベントパートナーパラメーター](#cp-event-partner-parameters) * [イベントコールバックID](#cp-event-callback-id) - * [セッションパラメータ](#cp-session-parameters) - * [セッションコールバックパラメータ](#cp-session-callback-parameters) - * [セッションパートナーパラメータ](#cp-session-partner-parameters) + * [セッションパラメーター](#cp-session-parameters) + * [セッションコールバックパラメーター](#cp-session-callback-parameters) + * [セッションパートナーパラメーター](#cp-session-partner-parameters) * [ディレイスタート](#cp-delay-start) ### 追加機能 - * [Push トークン (uninstall tracking)](#af-push-token) + * [Pushトークン (uninstall tracking)](#af-push-token) * [アトリビューションコールバック](#af-attribution-callback) - * [広告収益の計測](#af-ad-revenue) + * [広告収益のトラッキング](#af-ad-revenue) + * [サブスクリプション計測](#af-subscriptions) * [イベントとセッションのコールバック](#af-session-event-callbacks) * [ユーザーアトリビューション](#af-user-attribution) * [デバイス ID](#af-device-ids) - * [Google 広告 ID](#af-gps-adid) - * [Amazon 広告 ID](#af-amazon-adid) - * [Adjust デバイスID](#af-adid) - * [プレインストールのトラッカー](#af-pre-installed-trackers) + * [Google Play 開発者サービスの広告ID](#af-gps-adid) + * [Amazonの広告ID (fire_adid)](#af-amazon-adid) + * [Adjust のデバイスID](#af-adid) + * [プリインストールトラッカー](#af-preinstalled-apps) * [オフラインモード](#af-offline-mode) * [トラッキングの無効化](#af-disable-tracking) * [イベントバッファリング](#af-event-buffering) * [バックグラウンドでのトラッキング](#af-background-tracking) * [GDPR消去する権利(忘れられる権利)](#af-gdpr-forget-me) + * [サードパーティーとの共有](#af-third-party-sharing) + * [サードパーティーとの共有を無効にする](#af-disable-third-party-sharing) + * [サードパーティーとの共有を有効にする](#af-disable-third-party-sharing) + * [ユーザー同意による計測](#af-measurement-consent) -### トラブルシューティング - * ["Session failed (Ignoring too frequent session. ...)"というエラーが出る](#tt-session-failed) - * [ブロードキャストレシーバーがインストールリファラを受信していない](#tt-broadcast-receiver) +### テストとトラブルシューティング + + * ["Session failed (Ignoring too frequent session...)"というエラーが出る](#tt-session-failed) + * [ブロードキャストレシーバーがインストールリファラーを受信していない](#tt-broadcast-receiver) * [アプリ起動時にイベントを始動したい](#tt-event-at-launch) ### ライセンス - -## Quick start +## クイックスタート ### サンプルアプリ -Android サンプルアプリがexample ディレクトリ ([example-app-java][example-java]) および ([example-app-kotlin directories][example-kotlin])にあります。Webviewに使用するサンプルアプリは([example-webbridge][example-webbridge]) 、Android TVのサンプルは ([example-app-tv][example-tv])をご覧ください。をご覧ください。SDK実装の際は、Androidプロジェクトを開き、このサンプルをご参照ください。 +Android サンプルアプリがexample ディレクトリ [`example-app-java`][example-java] および [`example-app-kotlin`][example-kotlin] directories)にあります。Webviewに使用するサンプルアプリは[`example-webbridge` directory][example-webbridge] 、Android TVのサンプルは [`example-app-tv`][example-tv]をご覧ください。をご覧ください。SDK実装の際は、Androidプロジェクトを開き、このサンプルをご参照ください。Androidプロジェクトを開くと、Adjust SDKの導入方法の実例を確認できます。 ### 基本的な導入方法 -Adjust SDKをAndroidプロジェクトに実装する手順を説明します。ここでは、Androidアプリケーションの開発にAndroid Studioが使用されていること、対象はAndroid APIレベル **9(Gingerbread)** 以降であることを条件に説明します。 - -### SDKをプロジェクトに追加する +Adjust SDKをAndroidプロジェクトに実装する手順を説明します。ここでは、Androidアプリケーションの開発にAndroid Studioが使用されていること、また、対象はAndroid APIレベル**9(Gingerbread)** 以降であることを条件に説明します。 + +### SDKをプロジェクトに追加する Mavenを使用している場合は、以下の内容を`build.gradle`ファイルに追加します。file: - + ```gradle -implementation 'com.adjust.sdk:adjust-android:4.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' implementation 'com.android.installreferrer:installreferrer:2.2' ``` -アプリの WebView内で Adjust SDK を使用したい場合は、以下のdependencyを追加してください。 +アプリの WebView内でAdjust SDKを使用したい場合は、以下のdependencyを追加してください。 ```gradle -implementation 'com.adjust.sdk:adjust-android-webbridge:4.26.2' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.27.0' ``` -Adjust SDK およびWebView拡張機能をJAR ファイルとして追加し、Adjust [リリースページ][releases]からダウンロードすることもできます。 - -### Google Playサービスの追加 +**注意**:WebView拡張機能用にサポートされている最小のAndroid APIレベルは17(Jelly Bean)です。 + +Adjust SDK およびWebView拡張機能をJAR ファイルとして追加し、Adjust[リリースページ][releases]からダウンロードすることもできます。 -2014年8月1日より、Google Playストアのアプリには、端末をユニーク判別するために[Google Advertising ID][google_ad_id]の使用が義務付けられました。Adjust SDKでGoogle広告ID(gps_adid / Google Play Services Advertising ID)を使用するには、[Google Playサービス][google_play_services]を導入する必要があります。導入済みではい場合は、以下の手順に沿って設定してください。 +### Google Playサービスの追加 -- アプリの`build.gradle`ファイルを開き、`dependencies`ブロックに次の行を追加してください。 +2014年8月1日より、Google Playストアのアプリには、端末をユニーク判別するために[Google Advertising ID(Google広告ID)][google-ad-id]の使用が義務付けられました。Adjust SDKでGoogle Advertising IDを使用するには、[Google Play Service][google-play-services]を導入する必要があります。導入済みでない場合は、以下の手順に沿って設定してください。アプリの`build.gradle`ファイルを開き、`dependencies`ブロックに次の行を追加してください。file: ```gradle implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' ``` -**注意:** Adjust SDKは、Google Playサービスの一つである`play-services-analytics`ライブラリの特定のバージョンとは紐付いていませんので、必要に応じて最新バージョンをご使用ください。 +**注意**:Adjust SDKは、Google Playサービスの一つである`play-services-analytics`ライブラリの特定のバージョンとは紐付いていませんので、必要に応じて最新バージョンをご使用ください。 ### パーミッションの追加 - + `AndroidManifest.xml`ファイルにAdjust SDKに必要なパーミッションが存在しない場合は、以下を追加してください。 - + ```xml @@ -132,13 +139,13 @@ implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' ```xml ``` - + ### Proguardの設定 Proguardをお使いの場合は、以下をProguardファイルに追加してください。 ``` --keep class com.adjust.sdk.** { *; } +-keep class com.adjust.sdk.**{ *; } -keep class com.google.android.gms.common.ConnectionResult { int SUCCESS; } @@ -149,24 +156,24 @@ Proguardをお使いの場合は、以下をProguardファイルに追加して java.lang.String getId(); boolean isLimitAdTrackingEnabled(); } --keep public class com.android.installreferrer.** { *; } +-keep public class com.android.installreferrer.**{ *; } ``` -**Google Playストア以外の第三者ストアからアプリをリリースする**場合は、`com.adjust.sdk`のパッケージ規定にしたがってください。 +**Google Playストア以外の第三者ストアからアプリをリリースする**場合は、`com.adjust.sdk`のパッケージ規定に従ってください。 ``` -keep public class com.adjust.sdk.** { *; } ``` -### インストールリファラ +### インストールリファラー -アプリのインストールをアトリビューションソースに正確にアトリビュートするため、Adjustは**インストールリファラ**の情報を必要とします。そのために**Google Play リファラ API**かブロードキャストレシーバーを使用して、**Google Playストアのインテント**を取得します。 +アプリのインストールをアトリビューションソースに正確にアトリビュートするため、Adjustは**インストールリファラー**の情報を必要とします。そのために**Google Play Referrer API**かブロードキャストレシーバーを使用して、**Google Playストアのインテント**を取得します。 -**重要**:Google Play リファラ APIは、Androidのインストールリファラをより安全に提供し、またクリックインジェクションの不正に対抗する目的でGoogleが新たに導入したものです。アプリケーションでこれをサポートすることを**強く推奨**します。Google Playストアのインテントは、インストールのリファラ情報を取得する上で安全性が低い方法です。当面、新しいGoogle Play Referrer APIと並行して引き続き存在しますが、将来廃止される予定となっています。 +**重要**:Google Play Referrer APIは、Androidのインストールリファラーをより安全に提供し、またクリックインジェクションの不正に対抗する目的でGoogleが新たに導入したものです。アプリケーションでこれをサポートすることを**強く推奨します**。Google Playストアのインテントは、インストールのリファラー情報を取得する上で安全性が低い方法です。当面、新しいGoogle Play Referrer APIと並行して引き続き存在しますが、将来廃止される予定です。 -#### Google Play リファラAPI +#### Google Play Referrer API -アプリでこのAPIをサポートするには、[SDKをプロジェクトに追加する](#qs-add-sdk) の章の手順に適切に従って、以下の行を`build.gradle`ファイルに追加していることを確認してください。 +アプリでこのAPIをサポートするには、[SDKをプロジェクトに追加する](#qs-add-sdk)の章の手順に適切に従って、以下の行を`build.gradle`ファイルに追加していることを確認してください。file: ``` implementation 'com.android.installreferrer:installreferrer:2.2' @@ -175,14 +182,16 @@ implementation 'com.android.installreferrer:installreferrer:2.2' また、[Proguardの設定](#qs-proguard)の章をよく読んで、記載されているすべてのルール、特に、この機能に必要なルールが追加されていることを確認してください。 ``` --keep public class com.android.installreferrer.** { *; } +-keep public class com.android.installreferrer.**{ *; } ``` この機能は、**Adjust SDK v4.12.0以降**を使用している場合にサポートされます。 #### Google Playストアのインテント -Google Play ストアの`INSTALL_REFERRER`インテントは、ブロードキャストレシーバーを使用して受信することをおすすめします。ブロードキャストレシーバーを使用せずに`INSTALL_REFERRER`インテントを取得したい場合、以下の`receiver`タグを`AndroidManifest.xml`の`application`タグ内に追加してください。 +**注意**:Googleは、リファラー情報を提供するための`INSTALL_REFERRER`インテントの使用を2020年3月1日付で廃止することを[発表しました](https://android-developers.googleblog.com/2019/11/still-using-installbroadcast-switch-to.html) 。この方法でリファラー情報にアクセスしている場合は、[Google Play リファラーAPI](#qs-gpr-api)の方法に移行してください。 + +Google Play ストアの`INSTALL_REFERRER`インテントは、ブロードキャストレシーバーを使用して受信することをおすすめします。**ブロードキャストレシーバーを使用せずに`INSTALL_REFERRER`インテントを取得したい**場合、以下の`receiver`タグを`AndroidManifest.xml`の`application`タグ内に追加してください。 ```xml ``` -Adjustはこのブロードキャストレシーバーを使用して、インストールのリファラ情報を取得し、バックエンドに転送します。 +Adjustはこのブロードキャストレシーバーを使用して、インストールのリファラー情報を取得し、バックエンドに転送します。 `INSTALL_REFERRER`インテントに対して既に他のブロードキャストレシーバーを使用している場合、[こちらの説明][referrer]に従って、Adjust ブロードキャストレシーバーを追加してください。 -#### Huawei リファラAPI +#### Huawei Referrer API -Adjust SDKv4.21.1以降、Huawei端末におけるインストール計測のサポートは、バージョン10.4かそれ以降のAppGalleryがインストールされたHuawei端末のみに可能です。アプリでHuawei リファラAPIをサポートするのに必要な追加作業はありません。 +v4.21.1以降より、Adjust SDKはHuawei App Galleryバージョン10.4以降のHuawei端末へのインストール計測をサポートしています。HuaweiリファラAPIの使用を開始するために連携手順を追加で設定する必要はありません。 ### SDKをアプリに実装する - + まず最初に、基本的なセッショントラッキングを設定します。 ### 基本設定 -ネイティブアプリにSDK を実装する場合は、以下の [ネイティブアプリSDK](#qs-basic-setup-native) に示す手順に従ってください。SDK を アプリ内のWebViewで使用する場合は、以下の [WebView SDK](#qs-basic-setup-web) に示す手順に従ってください。 +ネイティブアプリにSDKを実装する場合は、以下の[ネイティブアプリSDK](#qs-basic-setup-native)に示す手順に従ってください。SDKをアプリ内のWebViewで使用する場合は、以下の[WebView SDK](#qs-basic-setup-web)に示す手順に従ってください。 #### ネイティブアプリSDK -SDKの初期化には、Android [アプリケーション][android-application] のグローバルクラスを使用することを推奨します。アプリ内に存在しない場合、以下の手順に従ってください。 +SDKの初期化には、Android[アプリケーション][android-application]のグローバルクラスを使用することを推奨します。アプリ内に存在しない場合、以下の手順に従ってください。 - `Application`を継承したクラスを作成します。 -- アプリの`AndroidManifest.xml`ファイルを開き、``エレメントを確認します。 +- アプリの`AndroidManifest.xml`ファイルを開き、`application`エレメントを確認します。 - `android:name`属性を追加し、先頭にドット(.)を付けて新規アプリケーションのクラス名をセットします。 - サンプルアプリの場合、`GlobalApplication`という名前の`Application`クラスを使用しているため、マニフェストファイルの設定は以下の通りになります。 - + サンプルアプリの場合、`GlobalApplication`という名前の`Application`クラスを使用しているため、マニフェストファイルの設定は以下の通りになります。 ```xml - + + ``` - -- `Application`クラスの`onCreate`メソッドをご確認いただき、無い場合は作成してください。また、以下のコードを追加してAdjust SDKを初期化してください。 - + +- `Application`クラスの`onCreate`メソッドをご確認いただき、無い場合は作成してください。また、以下のコードを追加してAdjust SDKを初期化してください。 + ```java import com.adjust.sdk.Adjust; import com.adjust.sdk.AdjustConfig; @@ -247,7 +255,7 @@ SDKの初期化には、Android [アプリケーション][android-application] } ``` -`{YourAppToken}`にアプリトークンを代入してください。アプリトークンは[管理画面][dashboard]で確認することができます。 +`{YourAppToken}`をアプリトークンに差し替えてください。トークンは [dashboard] で確認できます。 アプリのビルドをテスト用(Sandbox)か本番用(Production)に分けるためには、SDK内の環境`environment`をいずれかにセットする必要があります。 @@ -256,19 +264,21 @@ String environment = AdjustConfig.ENVIRONMENT_SANDBOX; String environment = AdjustConfig.ENVIRONMENT_PRODUCTION; ``` -**重要:** リリース前のテスト段階では、`AdjustConfig.ENVIRONMENT_SANDBOX`に設定してください。アプリをストアに申請する前に、SDKの環境を`AdjustConfig.ENVIRONMENT_PRODUCTION`にご変更ください。再度開発やテストを行う場合は、設定を`AdjustConfig.ENVIRONMENT_SANDBOX`に戻してください。 +**重要:** リリース前のテスト段階では、`AdjustConfig.ENVIRONMENT_SANDBOX`に設定してください。アプリをストアに申請する前に、SDKの環境を`AdjustConfig.ENVIRONMENT_PRODUCTION`に変更してください。再度開発やテストを行う場合は、設定を`AdjustConfig.ENVIRONMENT_SANDBOX`に戻してください。 -Adjustはこの環境設定を使用して、本番用の計測数値とテスト端末からのテスト計測を区別してレポート画面に表示します。この値の設定には常に注意が必要ですが、課金イベントを計測する場合は特に気をつけてください。 +Adjustはこの環境設定を使用して、本番用の計測数値とテスト端末からのテスト計測を区別してレポート画面に表示します。この値の設定には常に注意が必要ですが、購入イベントを計測する場合は特に気をつけてください。 #### Web Views SDK -`WebView` オブジェクトのリファレンスを取得後: +`WebView`オブジェクトのリファレンスを取得後: -- `webView.getSettings().setJavaScriptEnabled(true)` を呼び出して、JavaScriptをWebViewで有効化します -- `AdjustBridge.registerAndGetInstance(getApplication(), webview)` をコールして `AdjustBridgeInstance` のデフォルトインスタンスを起動します -- これにより、Adjust ブリッジがWebViewの JavaScript Interface として登録されます +- `webView.getSettings().setJavaScriptEnabled(true)`を呼び出して、JavaScriptをWebViewで有効化します +- `AdjustBridge.registerAndGetInstance(getApplication(), webview)`をコールして`AdjustBridgeInstance`のデフォルトインスタンスを起動します起動します +- これにより、AdjustブリッジがWebViewのJavaScript Interfaceとして登録されます +- 必要に応じて、`AdjustBridge.setWebView()`を呼び出して新たな`WebView`を設定します +- `AdjustBridgeInstance` と `WebView`の登録を取り消す場合は`AdjustBridge.unregister()`を呼び出します -以上の手順を完了すると、アクティビティは次のようになります: +これらの手順を行うと、アクティビティは以下のように記述されます。 ```java public class MainActivity extends Activity { @@ -282,13 +292,20 @@ public class MainActivity extends Activity { webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient(new WebViewClient()); - AdjustBridge.registerAndGetInstance(getApplication(), webview); + AdjustBridge.registerAndGetInstance(getApplication(),webview); try { webView.loadUrl("file:///android_asset/AdjustExample-WebView.html"); } catch (Exception e) { e.printStackTrace(); } } + + @Override + protected void onDestroy() { + AdjustBridge.unregister(); + + super.onDestroy(); + } } ``` @@ -303,7 +320,7 @@ HTMLファイルに、アセットのルートフォルダにある Adjust JavaS ``` -JavaScript ファイルにリファレンスを追加したら、 HTML ファイル内でそれを使って Adjust SDK を初期化します。 +JavaScript ファイルにリファレンスを追加したら、 HTML ファイル内でそれを使って Adjust SDK を初期化します: ```js let yourAppToken = '{YourAppToken}'; @@ -313,30 +330,30 @@ let adjustConfig = new AdjustConfig(yourAppToken, environment); Adjust.onCreate(adjustConfig); ``` -`{YourAppToken} `をアプリトークンに置き換えます。これは[管理画面][dashboard]から確認できます。 -次に、テスト中か本番用かに応じて`environment` の値を設定します。 +`{YourAppToken}`をアプリトークンに差し替えてください。トークンは[管理画面]で確認できます。 + +次に、まだテスト(Sandbox)を行っているか本番用モード(Production)にしているかに応じて、`environment`を対応する値に設定します: ```js let environment = AdjustConfig.EnvironmentSandbox; let environment = AdjustConfig.EnvironmentProduction; ``` -**重要:** アプリのテスト中は(その場合に限り)、値を `AdjustConfig.EnvironmentSandbox` に設定してください。アプリをストアに申請する前に、対象環境が `AdjustConfig.EnvironmentProduction` と設定されていることを確認してください。開発やテストを再開する場合は、値を `AdjustConfig.EnvironmentSandbox` に戻してください。 +**重要:** アプリのテスト中は(その場合に限り)、値を`AdjustConfig.EnvironmentSandbox`に設定してください。アプリをストアに申請する前に、対象環境が`AdjustConfig.EnvironmentProduction`と設定されていることを確認してください。開発やテストを再開する場合は、値を`AdjustConfig.EnvironmentSandbox`に戻してください。 -Adjustはこの環境設定を使用して、本番用の計測数値とテスト端末からのテスト計測を区別してレポート画面に表示します。 +Adjustはこの環境設定を使用して、本番用の計測数値とテスト端末からのテスト計測を区別してレポート画面に表示します。この値の設定は常にご注意ください。 ### セッショントラッキング -**注意**:この手順は**非常に重要です**。**必ずアプリに正しく実装されていることを確認**してください。この実装を行うことにより、アプリ内のAdjust SDKで適切なセッション計測が可能になります。 - +**注意**:この手順は**非常に重要**です。**必ずアプリに正しく実装されていることを確認**してください。この実装を行うことにより、アプリ内のAdjust SDKで適切なセッション計測が可能になります。 + #### APIレベルが14以降 - `ActivityLifecycleCallbacks`インターフェースを実装したプライベートクラスを追加します。このインターフェースを利用できなければ、そのアプリのAndroid APIレベルは14未満を対象としています。アクティビティをそれぞれ手動でアップデートする必要がありますので、こちらの[ガイド](#qs-session-tracking-api-9)を参照してください。以前に`Adjust.onResume`および`Adjust.onPause`のコールを使っていた場合、これらを削除する必要があります。 - -- `onActivityResumed(Activity activity)`メソッドを編集して、`Adjust.onResume()`のコールを追加します。`onActivityPaused(Activity activity)`メソッドを編集して、`Adjust.onPause()`のコールを追加します。 - +- `onActivityResumed(Activity activity)`メソッドを編集して、`Adjust.onResume()`のコールを追加します。 +onActivityPaused(Activity activity)`メソッドを編集して、`Adjust.onPause()`のコールを追加します。 - Adjust SDKの設定で、`onCreate()`メソッドを追加します。作成した`ActivityLifecycleCallbacks`のコールと、作成した`registerActivityLifecycleCallbacks`クラスのインスタンスを追加してください。 - + ```java import com.adjust.sdk.Adjust; import com.adjust.sdk.AdjustConfig; @@ -352,8 +369,6 @@ Adjustはこの環境設定を使用して、本番用の計測数値とテス Adjust.onCreate(config); registerActivityLifecycleCallbacks(new AdjustLifecycleCallbacks()); - - //... } private static final class AdjustLifecycleCallbacks implements ActivityLifecycleCallbacks { @@ -371,21 +386,21 @@ Adjustはこの環境設定を使用して、本番用の計測数値とテス } } ``` - + #### レベル9から13のAPI -Gradleの`minSdkVersion`が`9`から`13`の場合、`14`以上にアップデートすると、今後の連携の手順が容易になります。Android公式[管理画面][dashboard]にて、最新バージョン関する情報をご確認ください。 +Gradleの`minSdkVersion`が`9`から`13`の場合、`14`以降にアップデートすると、今後の連携の手順が容易になります。Android公式[管理画面][android-dashboard]にて、最新バージョン関する情報をご確認ください。 -セッショントラッキングを正しく行うためには、Acticityの開始または停止ごとにAdjust SDKの該当メソッドをコールする必要があります。この設定を行わないと、SDKはセッション開始やセッション終了を見落とす可能性があります。適切にセッションをトラッキングするには、**全てのActivityに対して以下の作業を行なってください。** +セッショントラッキングを正しく行うためには、Acticityの開始または停止ごとにAdjust SDKの該当メソッドをコールする必要があります。この設定を行わないと、SDKはセッション開始やセッション終了を見落とす可能性があります。適切にセッションをトラッキングするには、**すべてのアクティビティに対して**以下の作業を行なってください。 -- Activityの`onResume`メソッド中に`Adjust.onResume()`へのコールを追加してください。必要に応じてメソッドを作成してください。 -- Activityの`onPause`メソッド中に`Adjust.onPause()`へのコールを追加してください。必要に応じてメソッドを作成してください。 +- アクティビティの`onResume`中に`Adjust.onResume()`をコールしてください。必要に応じてメソッドを作成してください。 +- アクティビティの`onPause`中に`Adjust.onPause()`をコールしてください。必要に応じてメソッドを作成してください。 -これらの手順を行うと、Activityは以下のように記述されます。 +これらの手順を行うと、アクティビティは以下のように記述されます。 ```java import com.adjust.sdk.Adjust; -// ... + public class YourActivity extends Activity { protected void onResume() { super.onResume(); @@ -395,20 +410,18 @@ public class YourActivity extends Activity { super.onPause(); Adjust.onPause(); } - // ... } ``` -これと同じ手順をアプリの**すべて**のActivityに行なってください。将来新しいActivityを作成する場合、この手順を忘れないでください。コーディングスタイルの違いによって、すべてのActivityに対する共通のスーパークラスにこれを実装するという方法もあります。 - +これと同じ手順をアプリの**すべてのアクティビティ**に行なってください。後ほど新しいアクティビティを作成する場合、この手順を忘れないでください。コーディングスタイルの違いによって、すべてのアクティビティに対する共通のスーパークラスにこれを実装するという方法もあります。 ### SDKシグネチャー -Adjust SDK シグネチャーの有効化は、Adjustのアカウントマネージャーが行います。ご利用をご希望のクライアント様は、Adjust サポート (support@adjust.com) までご連絡ください。 +アカウントマネージャーがAdjust SDKシグネチャーを有効化する必要があります。この機能を使用する場合は、Adjustのサポート(support@adjust.com)までお問い合わせください。 -アカウントで SDK シグネチャーが既に有効化され、Adjust 管理画面にあるアプリシークレット にアクセスする必要がある場合は、以下の方法でアプリに SDK シグネチャーを実装してください。 +すでにアカウントでSDKシグネチャーが有効になっており、Adjust管理画面のアプリシークレット(App Secret)にアクセスできる場合は、以下の方法を使用してアプリにSDKシグネチャーを実装してください。 -アプリシークレットは、設定するインスタンスで `setAppSecret` を呼び出して登録されます。 +アプリシークレットは、設定するインスタンスで`setAppSecret`を呼び出して登録されます。 @@ -436,18 +449,17 @@ Adjust.onCreate(config); ```js let adjustConfig = new AdjustConfig(yourAppToken, environment); -adjustConfig.setAppSecret(secretId, info1, info2, info3, info4); +adjustConfig.setAppSecret(secretId,info1, info2, info3, info4); Adjust.onCreate(adjustConfig); ```
- ### Adjustログの取得 -Configインスタンスの`setLogLevel`に設定するパラメータを変更することによって、記録するログのレベルを調節できます。 - +Configインスタンスの`setLogLevel`に設定するパラメーターを変更することによって、記録するログのレベルを調節できます。 +
@@ -501,7 +513,7 @@ adjustConfig.setLogLevel(AdjustConfig.LogLevelSuppress); // disable all logs ```java -AdjustConfig config = new AdjustConfig(this, appToken, environment, true); +AdjustConfig config = new AdjustConfig(this, appToken, environment); config.setLogLevel(LogLevel.SUPRESS); Adjust.onCreate(config); ``` @@ -523,21 +535,20 @@ Adjust.onCreate(adjustConfig);
- + ### アプリのビルド - -Androidアプリをビルドして実行します。`LogCat`ビューアにて`tag:Adjust`フィルタを設定し、他のすべてのログを非表示にすることができます。アプリが起動された後、`Install tracked`のログが出力されるはずです。 -## ディープリンキング +Androidアプリをビルドして実行します。`LogCat`viewerにて`tag:Adjust`フィルターを設定し、他のすべてのログを非表示にすることができます。アプリが起動された後、`Install tracked`のログが出力されるはずです。 -### ディープリンク +## ディープリンク -URLからアプリへのディープリンクを使ったAdjustトラッカーURLをご利用の場合、ディープリンクURLとその内容の情報を得られる可能性があります。 ユーザーがすでにアプリをインストールしている状態でそのURLに訪れた場合(スタンダード・ディープリンキング)と、 アプリをインストールしていないユーザーがURLを開いた場合(ディファード・ディープリンキング)が有り得ます。 スタンダード・ディープリンキングの場合、Androidのプラットフォームにはディープリンクの内容を取得できる仕組みがあります。 ディファード・ディープリンキングに対してはAndroidプラットフォームはサポートしていませんので、 Adjust SDKがディープリンクの内容を取得するメカニズムを提供します。 +### ディープリンク +URLからアプリへのディープリンクを使ったAdjustトラッカーURLをご利用の場合、ディープリンクURLとその内容の情報を得ることが可能です。すでにアプリをインストールしている状態でそのURLを訪れる(スタンダードディープリンク)ユーザーもいれば、まだインストールしていないユーザーが開く(ディファードディープリンク)場合もあります。スタンダードディープリンクの場合、Androidのプラットフォームにはディープリンクの内容を取得できる仕組みがあります。ディファードディープリンクに対してはAndroidプラットフォームはサポートしていませんので、Adjust SDKがディープリンクの内容を取得するメカニズムを提供します。 -### スタンダード・ディープリンキング +### スタンダードディープリンク -アプリをすでにインストールしているユーザーが`deep_link`パラメータのついたAdjustのトラッカーURLを叩いた後でアプリを立ち上げたい場合、 アプリのディープリンキングを有効化する必要があります。**ユニークスキーム名**を選択し、リンクがクリックされてアプリが開いた時に起動したいアクティビティを 指定することで有効化できます。これは`AndroidManifest.xml`内で設定できます。マニフェストファルの該当のアクティビティ定義に `intent-filter`セクションを追加し、該当のスキーム名に`android:scheme`プロパティを指定してください。 +アプリをインストール済みのユーザーが`deep_link`パラメーターのついたAdjustのトラッカーURLをクリックした後にそのアプリを起動させたい場合は、アプリのディープリンクを有効化してください。**ユニークスキーム名**を選択し、トラッカーがクリックされてアプリが開いた時に起動させたいactivityを指定することで有効化できます。これは`AndroidManifest.xml`内で設定できます。マニフェストファルの該当のactivity定義に`intent-filter`セクションを追加し、該当のスキーム名に`android:scheme`プロパティを指定してください。 ```xml ``` -この設定をすると、トラッカーURLがクリックされた時にアプリを開くには、AdjustトラッカーURLの`deep_link`パラメータにあるスキーム名を指定する必要があります。 ディープリンクに情報を追加していないトラッカーURLは次のようになります。 +トラッカーURLのクリック後にアプリを起動させるには、AdjustトラッカーURLの`deep_link`パラメーターにあるスキーム名を指定する必要があります。ディープリンクに情報を追加していないトラッカーURLは次のようになります。 ``` https://app.adjust.com/abc123?deep_link=adjustExample%3A%2F%2F ``` -`deep_link`パラメータの値は**URLエンコード**される必要があります。 +`deep_link`パラメーターの値は**URLエンコードされる必要があります**。 -トラッカーURLをクリック後、アプリが上記の設定をされていれば、アプリは`MainActivity`インテントの通りに起動します。 `MainActivity`クラス内で`deep_link`パラメータの内容が自動的に提供されます。 届けられたこの情報は**エンコードされていません**が、URL内ではエンコードされています。 +トラッカーURLをクリック後、アプリが上記の設定をされていれば、アプリは`MainActivity`インテントの通りに起動します。`MainActivity`クラス内で`deep_link`パラメーターの内容が自動的に提供されます。届けられたこの情報はエンコード**されていません**が、URL内ではエンコードされています。 -`AndroidManifest.xml`ファイルのアクティビティの`android:launchMode`設定によっては、`deep_link`パラメータの内容情報は アクティビティファイルの適切な箇所に届けられます。`android:launchMode`のとり得る値について詳しくは[Android公式資料][android-launch-modes]をご確認ください。 +`AndroidManifest.xml`ファイルのactivityの`android:launchMode`設定によっては、`deep_link`パラメーターの内容情報はアクティビティファイルの適切な箇所に届けられます。`android:launchMode`のとり得る値について詳しくはAndroid[公式資料][android-launch-modes]をご確認ください。 -指定のアクティビティに`Intent`オブジェクトを介してディープリンクの内容情報を送ることができる場所は2か所あります。 アクティビティの`onCreate`メソッドか`onNewIntent`メソッドのいずれかです。アプリが起動してこれらのどちらかのメソッドが呼ばれると、 クリックURL中の`deep_link`パラメータ内の実際に渡されたディープリンクを取得することができます。 この情報はロジックを追加する際に使うことができます。 +指定のアクティビティに`Intent`オブジェクトを介してディープリンクの内容情報を送ることができる場所は2か所あります。activityの`onCreate`メソッドか`onNewIntent`メソッドのいずれかです。アプリが起動してこれらのどちらかのメソッドが呼ばれると、クリックURL中の`deep_link`パラメーター内の実際に渡されたディープリンクを取得することができます。この情報はロジックを追加する際に使うことができます。 これらのメソッドからディープリンク情報を抽出する方法は以下の通りです。 @@ -584,7 +595,7 @@ protected void onCreate(Bundle savedInstanceState) { Intent intent = getIntent(); Uri data = intent.getData(); - // data.toString() -> This is your deep_link parameter value. + // data.toString()-> This is your deep_link parameter value. } ``` @@ -594,17 +605,17 @@ protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Uri data = intent.getData(); - // data.toString() -> This is your deep_link parameter value. + // data.toString()-> This is your deep_link parameter value. } ``` -### ディファード・ディープリンキング +### ディファードディープリンク -ユーザーが`deep_link`パラメータのついたトラッカーURLをクリックし、アプリ未インストールの場合はディファード・ディープリンキングが作動します。クリックしたユーザーはアプリストアにリダイレクトされます。アプリをダウンロードし初回起動したタイミングで、`deep_link`パラメータの内容がアプリに送信されます。 +ユーザーが`deep_link`パラメーターのついたトラッカーURLをクリックし、アプリ未インストールの場合はディファードディープリンクが作動します。クリックしたユーザーはアプリストアにリダイレクトされます。アプリをダウンロードし初回起動したタイミングで、`deep_link`パラメーターの内容がアプリに送信されます。 -Adjust SDKはデフォルトでディファード・ディープリンクを開きます。追加設定の必要はありません。 +Adjust SDKはデフォルトでディファードディープリンクを開きます。追加設定の必要はありません。 -#### ディファード・ディープリンク のコールバック +#### ディファードディープリンクのコールバック コールバック関数を用いて、SDKがディファードディープリンクを開くかどうかを決めることができます。 @@ -621,7 +632,7 @@ Adjust SDKはデフォルトでディファード・ディープリンクを開 AdjustConfig config = new AdjustConfig(this, appToken, environment); // Evaluate the deeplink to be launched. -config.setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() { +config.setOnDeeplinkResponseListener(newOnDeeplinkResponseListener() { @Override public boolean launchReceivedDeeplink(Uri deeplink) { // ... @@ -636,9 +647,9 @@ config.setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() { Adjust.onCreate(config); ``` -Adjust SDKがサーバーからディープリンク情報を受信すると、リスナ内のディープリンク内容の情報を送信しますので、`boolean`値を返してください。 この値はAdjust SDKがディープリンクから指定したスキーム名へアクティビティを起動させたいかどうかで決定してください。 スキーム名の指定はスタンダード・ディープリンキングと同様です。 +Adjust SDKがサーバーからディープリンク情報を受信すると、リスナ内のディープリンク内容の情報を送信しますので、`boolean`値を返してください。この値はAdjust SDKがディープリンクから指定したスキーム名へアクティビティを起動させたいかどうかで決定してください。スキーム名の指定はスタンダードディープリンクと同様です。 -`true`を返すと、[スタンダード・ディープリンキング](#dl-standard) の章で説明したものと同様に起動します。 SDKにアクティビティをスタートさせたくない場合、リスナから`false`を返してください。 ディープリンクの内容に基づいてアプリの次の挙動を決定してください。 +`true`を返すと、[スタンダードディープリンク](#dl-standard)の章で説明したものと同様に起動します。SDKにアクティビティをスタートさせたくない場合、リスナから`false`を返してください。ディープリンクの内容に基づいてアプリの次の挙動を決定してください。 @@ -651,12 +662,12 @@ Adjust SDKがサーバーからディープリンク情報を受信すると、 ```js let adjustConfig = new AdjustConfig(yourAppToken, environment); -adjustConfig.setDeferredDeeplinkCallback(function (deeplink) {}); +adjustConfig.setDeferredDeeplinkCallback(function(deeplink) {}); Adjust.onCreate(adjustConfig); ``` -このディファード・ディープリンクのシナリオでは、Configオブジェクトにもう1つの設定を追加できます。Adjust SDK がディファード・ディープリンクに関する情報を入手すると、SDK で URL を開くかどうかを選択できます。このオプションについては、Configオブジェクトで `setOpenDeferredDeeplink` メソッドをコールして設定します: +このディファードディープリンクのシナリオでは、Configオブジェクトにもう1つの設定を追加できます。Adjust SDK がディファードディープリンクに関する情報を入手すると、SDK で URL を開くかどうかを選択できます。このオプションについては、Configオブジェクトで`setOpenDeferredDeeplink`メソッドをコールして設定します: ```js // ... @@ -671,18 +682,18 @@ Adjust.start(adjustConfig); ``` -コールバックを設定しない場合、**Adjust SDK はデフォルトで常に URL を立ち上げようとすることにご注意ください。** +コールバックを設定しない場合、**Adjust SDK はデフォルトで常にURLを立ち上げようとする**ことにご注意ください。 ### ディープリンクを介したリアトリビューション -Adjustはディープリンクを使ったリエンゲージメントキャンペーンをサポートしています。 詳しくは[公式資料][reattribution-with-deeplinks]をご覧ください。 +Adjustはディープリンクを使ったリエンゲージメントキャンペーンをサポートしています。詳しくは[公式資料][reattribution-with-deeplinks]をご覧ください。 -ディープリンクご利用の場合、ユーザーが正しくリアトリビューションされるために、Adjust SDKへのコールを追加してください。 +この機能をご利用の場合は、ユーザーが正しくリアトリビューションされるために、Adjust SDKへのコールを追加してください。 -アプリでディープリンクの内容データを受信したら、`Adjust.appWillOpenUrl(Uri, Context)`メソッドへのコールを追加してください。 このコールによって、Adjust SDKはディープリンクの中に新たなアトリビューションが存在するかを調べ、あった場合はAdjustサーバーにこれを送信します。 ディープリンクのついたAdjustトラッカーURLのクリックによってユーザーがリアトリビュートされる場合、 [アトリビューションコールバック](#af-attribution-callback) がこのユーザーの新しいアトリビューションデータで呼ばれます。 +アプリでディープリンクの内容データを受信したら、`Adjust.appWillOpenUrl(Uri, Context)`メソッドへのコールを追加してください。このコールによって、Adjust SDKはディープリンクの中に新たなアトリビューションが存在するかを調べ、あった場合はAdjustサーバーにこれを送信します。ディープリンクのついたAdjustトラッカーURLのクリックによってユーザーがリアトリビュートされる場合、[アトリビューションコールバック](#af-attribution-callback)がこのユーザーの新しいアトリビューションデータで呼ばれます。 `Adjust.appWillOpenUrl(Uri, Context)`のコールは下記のようになります。 @@ -708,19 +719,19 @@ protected void onNewIntent(Intent intent) { } ``` -**注**: Android SDK v4.14.0より`Adjust.appWillOpenUrl(Uri)` メソッドは**deprecated**(推奨されていません) と表示されます。代わりに`Adjust.appWillOpenUrl(Uri, Context)`メソッドを使用してください。 +**注**: Android SDK v4.14.0より、`Adjust.appWillOpenUrl(Uri)`メソッドは**deprecated(推奨されていません)** と表示されます。代わりに`Adjust.appWillOpenUrl(Uri,Context)`メソッドを使用してください。 -**Web viewに関する注意**:このコールは、webviewから関数`Adjust.appWillOpenUrl`をJavascript でこのように作成することもできます: +**Web viewに関する注意**:このコールは、web viewから関数`Adjust.appWillOpenUrl`をJavascript でこのように作成することもできます: ```js Adjust.appWillOpenUrl(deeplinkUrl); ``` -## イベントトラッキング +### イベントトラッキング ### イベントトラッキング -Adjustを使ってアプリ内のイベントをトラッキングすることができます。ここではあるボタンのタップを毎回トラックするケースを想定して説明します。 [管理画面][dashboard]にてイベントトークンを作成します。そのイベントトークンは仮に`abc123`とします。 タップをトラックするため、ボタンの`onClick`メソッドに以下のような記述を追加します。 +Adjustを使ってアプリ内のイベントをトラッキングすることができます。ここではあるボタンのタップを毎回トラックするケースを想定して説明します。[管理画面][dashboard]にてイベントトークンを作成します。そのイベントトークンは仮に`abc123`とします。タップをトラックするため、ボタンの`onClick`メソッドに以下のような記述を追加します。 @@ -752,10 +763,10 @@ Adjust.trackEvent(adjustEvent);
- + ### 収益のトラッキング -広告をタップはもちろん、アプリ内課金の発生時もトラッキングできます。 1回のタップで1ユーロセントの報酬と仮定すると、報酬イベントは以下のようになります。 +広告へのタップはもちろん、アプリ内購入の発生時もトラッキングが可能です。例えば、1回のタップで1ユーロセントの報酬と仮定すると、報酬イベントを以下のようにトラッキングできます。 @@ -768,7 +779,7 @@ Adjust.trackEvent(adjustEvent); ```java AdjustEvent adjustEvent = new AdjustEvent("abc123"); -adjustEvent.setRevenue(0.01, "EUR"); +adjustEvent.setRevenue(0.01,"EUR"); Adjust.trackEvent(adjustEvent); ``` @@ -783,24 +794,24 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.setRevenue(0.01, 'EUR'); +adjustEvent.setRevenue(0.01,'EUR'); Adjust.trackEvent(adjustEvent); ```
-もちろんこれはコールバックパラメータと紐付けることができます。 +これはコールバックパラメーターと紐付けることができます。 -通貨トークンを設定する場合、Adjustは自動的に収益を任意の報酬に変換します。 詳しくは[通貨の変換][currency-conversion]をご覧ください。 +通貨トークンを設定する場合、Adjustは自動的に収益を任意の報酬に変換します。詳しくは[通貨の変換][currency-conversion]をご覧ください。 -アプリ内課金のトラッキングをする際は、課金が完了し、アイテムが購入された後に`trackEvent`をコールするようにしてください。実際に発生しなかった収益イベントをトラッキングしてしまうのを防ぐためです。 +アプリ内購入をトラッキングする際は、支払いが終了し、アイテムが購入された後に`trackEvent`をコールするようにしてください。実際に発生しなかった収益イベントをトラッキングしてしまうのを防ぐためです。 収益とイベントトラッキングについては[イベントトラッキングガイド][event-tracking]もご参照ください。 ### 収益の重複排除 -オプションとしてオーダーIDを追加することにより、収益イベントが重複してトラッキングされるのを防ぐことができます。これを実行すると、10個前までのオーダーIDが記憶され、収益イベントに紐づけられたオーダーIDが重複している場合、そのイベントを排除します。以下の例をご参照ください。 +オプションとしてオーダーIDを追加することにより、収益イベントが重複してトラッキングされるのを防ぐことができます。これを実行すると、10個前までのオーダーIDが記憶され、収益イベントに紐づけられたオーダーIDが重複している場合、そのイベントを排除します。これは、アプリ内購入の計測に特に有効です。以下の例をご参照ください。 @@ -813,7 +824,7 @@ Adjust.trackEvent(adjustEvent); ```java AdjustEvent adjustEvent = new AdjustEvent("abc123"); -adjustEvent.setRevenue(0.01, "EUR"); +adjustEvent.setRevenue(0.01,"EUR"); adjustEvent.setOrderId("{OrderId}"); Adjust.trackEvent(adjustEvent); ``` @@ -829,7 +840,7 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.setRevenue(0.01, 'EUR'); +adjustEvent.setRevenue(0.01,'EUR'); adjustEvent.setOrderId('{OrderId}'); Adjust.trackEvent(event); ``` @@ -837,25 +848,26 @@ Adjust.trackEvent(event);
-### アプリ内課金の検証 +### アプリ内購入認証 + +Adjustのサーバーサイドのレシート認証ツール、[購入認証(Purchase Verification)][android-purchase-verification]を使ってアプリ内で行われたアプリ内収益の妥当性を調べる際は、 Android purchase SDKをご利用ください。詳しくはこちらをご覧ください。 -Adjustのサーバーサイドのレシート検証ツール、課金検証(Purchase Verification)を使ってアプリ内で行われたアプリ内課金の妥当性を調べる際は、 Android purchase SDKをご利用ください。詳しくは[こちら][android-purchase-verification]をご覧ください。 +## カスタムパラメーター -## カスタムパラメータ +### カスタムパラメーター -### カスタムパラメータ +Adjust SDKがデフォルトで収集するローデータに加えて、Adjust SDKを使用してカスタム値(ユーザーID、製品IDなど)を必要な数だけトラッキングし、イベントまたはセッションに追加できます。カスタムパラメーターはローデータとして転送されます。Adjust管理画面には**表示されません**。 -Adjust SDK が標準仕様で取得するパラメータ(IDFAなど)に加え、Adjust SDK を使ってカスタム値(クライアント様が保有するユーザー ID、商品 ID など)をイベントまたはセッションに追加することができます。カスタムパラメータは、コールバック経由でのみ送信が可能で、Adjust 管理画面のレポートに表示されることはありません。 +Adjust SDK が標準仕様で取得するパラメーター(IDFAなど)に加え、Adjust SDK を使ってカスタム値(クライアント様が保有するユーザー ID、商品 ID など)をイベントまたはセッションに追加することができます。カスタムパラメーターは、コールバック経由でのみ送信が可能で、Adjust管理画面のレポートには表示されません。社内と外部パートナー双方の利用目的で値をトラッキングする場合は(例えば商品 ID など)、リアルタイムコールバックとパートナーパラメーターの両方にてトラッキングすることを推奨します。 -コールバックパラメータはクライアント様だけがご利用可能です。外部パートナーにデータが送信されるパートナーパラメータに関しては、情報を共有するパートナーとの間で利用されなければなりません。内部と外部のパートナー双方の利用目的で値をトラッキングする場合は(例えば商品 ID など)、リアルタイムコールバックとパートナーパラメータの両方にてトラッキングすることを推奨します。 -### イベントパラメータ +### イベントパラメーター -### イベントコールバックパラメータ +### イベントコールバックパラメーター -[管理画面][dashboard]でイベントにコールバックURLを登録することができます。イベントがトラッキングされるたびに そのURLにGETリクエストが送信されます。トラッキングする前にイベントで`addCallbackParameter`をコールすることによって、 イベントにコールバックパラメータを追加できます。そうして追加されたパラメータはコールバックURLに送られます。 +[管理画面]でイベントにコールバックURLを登録することができます。イベントがトラッキングされるたびにそのURLにGETリクエストが送信されます。トラッキングする前にイベントで`addCallbackParameter`をコールすることによって、イベントにコールバックパラメーターを追加できます。AdjustはそれらのパラメーターをコールバックURLに追加します。 -例えば、コールバックURLに`http://www.example.com/callback`を登録した場合、イベントトラッキングは以下のようになります。 +例えば、コールバックURLに `http://www.example.com/callback`と登録した場合、次のようにイベントをトラッキングします。 @@ -868,8 +880,8 @@ Adjust SDK が標準仕様で取得するパラメータ(IDFAなど)に加 ```java AdjustEvent adjustEvent = new AdjustEvent("abc123"); -adjustEvent.addCallbackParameter("key", "value"); -adjustEvent.addCallbackParameter("foo", "bar"); +adjustEvent.addCallbackParameter("key","value"); +adjustEvent.addCallbackParameter("foo","bar"); Adjust.trackEvent(adjustEvent); ``` @@ -884,29 +896,29 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.addCallbackParameter('key', 'value'); -adjustEvent.addCallbackParameter('foo', 'bar'); +adjustEvent.addCallbackParameter('key','value'); +adjustEvent.addCallbackParameter('foo','bar'); Adjust.trackEvent(adjustEvent); ```
-この場合、Adjustはこのイベントをトラッキングし、以下にリクエストが送られます。 +この場合、Adjustは以下のGETリクエストを送信します。 ``` http://www.example.com/callback?key=value&foo=bar ``` -パラメータの値として使われることのできるプレースホルダは、`{gps_adid}`のような様々な形に対応しています。 得られるコールバック内で、このプレースホルダは該当デバイスのGoogle PlayサービスIDに置き換えられます。 独自に設定されたパラメータには何も格納しませんが、コールバックに追加されます。 イベントにコールバックを登録していない場合は、これらのパラメータは使われません。 +Adjustはさまざまなパラメーターをサポートしています。例えば`{gps_adid}`はパラメーター値として利用できます。コールバック内で、このプレースホルダーは該当デバイスのGoogle Play Service IDに置き換えられます。独自に設定されたパラメーターには何も格納されませんが、コールバックに追加されます。イベントにコールバックを登録していない場合、Adjustがこれらのパラメーターを読むことはありません。 + +URLコールバックについて詳しくは[コールバックガイド][callbacks-guide]をご覧ください。利用可能な値のリストもこちらで参照してください。 -URLコールバックについて詳しくは[コールバックガイド][callbacks-guide]をご覧ください。 利用可能な値のリストもこちらで参照してください。 - -### パートナーパラメータ +### イベントパートナーパラメーター -Adjustの管理画面上で連携が有効化されているネットワークパートナーに送信するパラメータを設定することができます。 +Adjustの管理画面上で連携が有効化されているネットワークパートナーに送信するパラメーターを設定することができます。 -これは上記のコールバックパラメータと同様に機能しますが、 eventインスタンスの`addPartnerParameter`メソッドをコールすることにより追加されます。 +これは上記のコールバックパラメーターと同様に機能しますが、イベントインスタンスの`addPartnerParameter`メソッドをコールすることにより追加されます。 @@ -919,8 +931,8 @@ Adjustの管理画面上で連携が有効化されているネットワーク ```java AdjustEvent adjustEvent = new AdjustEvent("abc123"); -adjustEvent.addPartnerParameter("key", "value"); -adjustEvent.addPartnerParameter("foo", "bar"); +adjustEvent.addPartnerParameter("key","value"); +adjustEvent.addPartnerParameter("foo","bar"); Adjust.trackEvent(adjustEvent); ``` @@ -935,15 +947,15 @@ Adjust.trackEvent(adjustEvent); ```js let adjustEvent = new AdjustEvent('abc123'); -adjustEvent.addPartnerParameter('key', 'value'); -adjustEvent.addPartnerParameter('foo', 'bar'); +adjustEvent.addPartnerParameter('key','value'); +adjustEvent.addPartnerParameter('foo','bar'); Adjust.trackEvent(adjustEvent); ```
-スペシャルパートナーとその統合について詳しくは[連携パートナーガイド][special-partners]をご覧ください。 +スペシャルパートナーとの連携方法の詳細については、[スペシャルパートナーガイド スペシャルパートナー][integrated-partners]をご覧ください。 ### イベントコールバックID @@ -982,18 +994,18 @@ Adjust.trackEvent(adjustEvent); -### セッションパラメータ +### セッションパラメーター -いくつかのパラメータは、Adjust SDKのイベントごと、セッションごとに送信するために保存されます。 このいずれかのパラメータを追加すると、これらはローカル保存されるため、毎回追加する必要はありません。 同じパラメータを再度追加しても何も起こりません。 +いくつかのパラメーターは、Adjust SDKの**イベント**ごと、**セッション**ごとに送信するために保存されます。このいずれかのパラメーターを追加すると、これらはローカルに保存されるため、毎回追加する必要はありません。同じパラメーターを再度追加しても何も起こりません。 -これらのセッションパラメータはAdjust SDKが起動する前にコールすることができます。インストール時にパラメータを送信したい場合は、Adjust SDKの初回起動を[遅らせる](#cp-delay-start)ことができます。 ただし、必要なパラメータの値を得られるのは起動後となります。 +これらのセッションパラメーターはAdjust SDKが起動する前にコールすることができます。インストール時にパラメーターを送信したい場合は、Adjust SDKの初回起動を[遅らせる](#delay-start)ことができます。ただし、必要なパラメーターの値を得られるのは起動後となります。 -### セッションコールバックパラメータ +### セッションコールバックパラメーター -[イベント](#cp-event-callback-parameters)で設定された同じコールバックパラメータを、 Adjust SDKのイベントごとまたはセッションごとに送信するために保存することもできます。 +[イベント](#event-callback-parameters)で設定された同じコールバックパラメーターを、 Adjust SDKのイベントごとまたはセッションごとに送信するために保存することもできます。 + +セッションコールバックパラメーターのインターフェイスとイベントコールバックパラメーターは似ています。イベントにキーと値を追加する代わりに、Adjustの`Adjust.addSessionCallbackParameter(String key, String value)`へのコールで追加されます。 -セッションコールバックパラメータのインターフェイスとイベントコールバックパラメータは似ています。 イベントにキーと値を追加する代わりに、Adjustの`Adjust.addSessionCallbackParameter(String key, String value)`へのコールで追加されます。 - @@ -1023,10 +1035,10 @@ Adjust.addSessionCallbackParameter('foo', 'bar');
@@ -1004,7 +1016,7 @@ Adjust.trackEvent(adjustEvent); ```java -Adjust.addSessionCallbackParameter("foo", "bar"); +adjustEvent.addCallbackParameter("foo", "bar"); ```
-セッションコールバックパラメータは、イベントに追加されたコールバックパラメータとマージされます。 イベントに追加されたコールバックパラメータは、セッションコールバックパラメータより優先されます。 イベントに追加されたコールバックパラメータがセッションから追加されたパラメータと同じキーを持っている場合、 イベントに追加されたコールバックパラメータの値が優先されます。 +セッションコールバックパラメーターは、イベントに追加されたコールバックパラメーターとマージされます。イベントに追加されたコールバックパラメーターは、セッションコールバックパラメーターより優先されます。イベントに追加されたコールバックパラメーターがセッションから追加されたパラメーターと同じキーを持っている場合、イベントに追加されたコールバックパラメーターの値が優先されます。 + +`Adjust.removeSessionCallbackParameter(String key)`メソッドに指定のキーを渡すことで、特定のセッションパートナーパラメーターを削除することができます。 -`Adjust.removeSessionCallbackParameter(String key)`メソッドに指定のキーを渡すことで、 特定のセッションコールバックパラメータを削除することができます。 - @@ -1056,7 +1068,7 @@ Adjust.removeSessionCallbackParameter('foo');
@@ -1037,7 +1049,7 @@ Adjust.addSessionCallbackParameter('foo', 'bar'); ```java -Adjust.removeSessionCallbackParameter("foo"); +AdjustEvent.addCallbackParameter("foo", "bar"); ```
-セッションコールバックパラメータからすべてのキーと値を削除したい場合は、`Adjust.resetSessionCallbackParameters()`メソッドを使ってリセットすることができます。 +セッションコールバックパラメーターからすべてのキーと値を削除したい場合は、`Adjust.resetSessionCallbackParameters()`メソッドを使ってリセットすることができます。 @@ -1087,13 +1099,13 @@ Adjust.resetSessionCallbackParameters();
-### セッションパートナーパラメータ +### セッションパートナーパラメーター -Adjust SDKのイベントごとやセッションごとに送信される[セッションコールバックパラメータ](#cp-session-callback-parameters)があるように、 セッションパートナーパラメータも用意されています。 +Adjust SDKのイベントごとやセッションごとに送信される[セッションコールバックパラメーター](#session-callback-parameters)があるように、セッションパートナーパラメーターも用意されています。 -これらはAdjustのネットワークパートナーに送信されます。Adjust[管理画面][dashboard]のパートナー設定で有効化された連携に利用されます。 +これらはAdjustのネットワークパートナーに送信されます。Adjust[管理画面]のパートナー設定で有効化された連携に利用されます。 -セッションパートナーパラメータのインターフェイスとイベントパートナーパラメータは似ています。 イベントにキーと値を追加する代わりに、`Adjust.addSessionPartnerParameter(String key, String value)`へのコールで追加されます。 +セッションパートナーパラメーターのインターフェイスとイベントパートナーパラメーターは似ています。イベントにキーと値を追加する代わりに、`Adjust.addSessionPartnerParameter(String key, String value)`へのコールで追加されます。 @@ -1105,7 +1117,7 @@ Adjust SDKのイベントごとやセッションごとに送信される[セッ @@ -1124,9 +1136,9 @@ Adjust.addSessionPartnerParameter('foo', 'bar');
```java -Adjust.addSessionPartnerParameter("foo", "bar"); +adjustEvent.addCallbackParameter("foo", "bar"); ```
-セッションパートナーパラメータはイベントに追加されたパートナーパラメータとマージされます。イベントに追加されたパートナーパラメータは、 セッションパートナーパラメータより優先されます。イベントに追加されたパートナーパラメータが セッションから追加されたパラメータと同じキーを持っている場合、イベントに追加されたパートナーパラメータの値が優先されます。 +セッションパートナーパラメーターはイベントに追加されたパートナーパラメーターとマージされます。イベントに追加されたパートナーパラメーターは、セッションパートナーパラメーターより優先されます。イベントに追加されたパートナーパラメーターがセッションから追加されたパラメーターと同じキーを持っている場合、イベントに追加されたパートナーパラメーターの値が優先されます。 -`Adjust.removeSessionPartnerParameter(String key)`メソッドに指定のキーを渡すことで、 特定のセッションパートナーパラメータを削除することができます。 +`Adjust.removeSessionPartnerParameter(String key)`メソッドに指定のキーを渡すことで、特定のセッションパートナーパラメーターを削除することができます。 @@ -1157,9 +1169,8 @@ Adjust.removeSessionPartnerParameter('foo');
-セッションパートナーパラメータからすべてのキーと値を削除したい場合は、`Adjust.resetSessionPartnerParameters()`メソッドを使ってリセットすることができます。 +セッションパートナーパラメーターからすべてのキーと値を削除したい場合は、`Adjust.resetSessionPartnerParameters()`メソッドを使ってリセットすることができます。 -
@@ -1191,7 +1202,7 @@ Adjust.resetSessionPartnerParameters(); ### ディレイスタート -Adjust SDKの初回起動を遅らせると、クライアント様のユニークID(会員ID)などのセッションパラメータを取得しインストール時に送信できるようにすることができます。 +Adjust SDKの初回起動を遅らせると、ユニークID(会員ID)などのセッションパラメーターを取得してインストール時に送信できるようになります。 Configインスタンスの`setDelayStart`メソッドで、ディレイタイムを秒単位で設定できます。 @@ -1224,20 +1235,20 @@ adjustConfig.setDelayStart(5.5);
-この場合、Adjust SDKは最初のインストールセッションと生成されるイベントを初めの5.5秒間は送信しません。 設定された時間が過ぎるまで、もしくは`Adjust.sendFirstPackages()`がコールされるまで、 セッションパラメータはすべてディレイインストールセッションとイベントに追加され、Adjust SDKは通常通り再開します。 +この場合、Adjust SDKは最初のインストールセッションと生成されるイベントを5.5秒間は送信しません。設定された時間が過ぎるまで、もしくは`Adjust.sendFirstPackages()`がコールされるまで、セッションパラメーターはすべてディレイインストールセッションとイベントに追加され、Adjust SDKは通常通り再開します。 +**Adjust SDKのディレイスタートは最大で10秒です**。 -**Adjust SDKのディレイスタートは最大で10秒です。** ## 追加機能 - + プロジェクトにAdjust SDKを連携させると、以下の機能をご利用できるようになります。 ### Pushトークン (uninstall tracking) -プッシュトークンは、オーディエンスビルダーとコールバック送信に使用されます。また、アンインストールと再インストールのトラッキングにも必要です。 +Pushトークンは、オーディエンスビルダーやコールバックに使用されます。また、アンインストールや再インストールのトラッキングにも必要です。 -Adjust にプッシュ通知トークンを送信する際には、トークンを入手(または値に変更が発生)した後、以下のコールをAdjust に追加してください。 +Push通知のトークンを送信する場合は、トークンを取得したら(あるいはその値が変更される度に)、Adjustに以下のコールを追加してください: @@ -1252,7 +1263,7 @@ Adjust にプッシュ通知トークンを送信する際には、トークン Adjust.setPushToken(pushNotificationsToken, context); ``` -シグネチャーに`context`を追加しアップデートすると、SDKはより多くのシナリオに沿ってプッシュトークンを送信することができます。上記のメソッドを使用することを推奨します。 +シグネチャーに`context`を追加しアップデートすると、SDKはより多くのシナリオに沿ってPushトークンを送信することができます。上記のメソッドを使用することを推奨します。 しかし、`context`が追加されない場合でも、Adjustは引き続き、同じメソッドを使用する過去のシグネチャーをサポートします。 @@ -1275,11 +1286,11 @@ Adjust.setPushToken(pushNotificationsToken); ### アトリビューションコールバック -トラッカーのアトリビューション変化の通知を受けるために、リスナを登録することができます。 アトリビューションには複数の流入元が紐づく可能性があるため、この情報は同時に送ることができません。 +トラッカーのアトリビューション変化の通知を受けるために、リスナーを登録することができます。アトリビューションには複数の流入元が紐づく可能性があるため、この情報は同時に送ることができません。 [アトリビューションデータに関するポリシー][attribution-data]を必ずご確認ください。 -`Config`インスタンスで、SDKをスタートする前に以下のアトリビューションコールバックを追加してください。 +Configインスタンスで、SDKをスタートする前に以下のアトリビューションコールバックを追加してください。
@@ -1293,7 +1304,7 @@ Adjust.setPushToken(pushNotificationsToken); ```java AdjustConfig config = new AdjustConfig(this, appToken, environment); -config.setOnAttributionChangedListener(new OnAttributionChangedListener() { +config.setOnAttributionChangedListener(newOnAttributionChangedListener() { @Override public void onAttributionChanged(AdjustAttribution attribution) {} }); @@ -1323,50 +1334,120 @@ Adjust.onCreate(adjustConfig);
-リスナはSDKが最後のアトリビューションデータを取得した時に呼ばれます。 リスナの機能で`attribution`パラメータを確認することができます。このパラメータのプロパティの概要は以下の通りです。 +リスナーはSDKが最後のアトリビューションデータを取得した時に呼ばれます。リスナーの機能で`attribution`パラメーターを確認することができます。このパラメーターのプロパティの概要は以下のとおりです。 + +- `trackerToken`最新アトリビューションのトラッカートークン +- `trackerName`最新アトリビューションのトラッカー名 +- `network`最新アトリビューションの流入元名 +- `campaign`最新アトリビューションのキャンペーン名 +- `adgroup`最新アトリビューションのアドグループ名 +- `creative`最新アトリビューションのクリエイティブ名 +- `clickLabel`最新アトリビューションのクリックラベル +- `adid`AdjustユニークID(Adjust Device ID) +- `costType`コストタイプの文字列 +- `costAmount`コストの金額 +- `costCurrency` コスト通貨の文字列 +**注**:コストデータ - `costType`、`costAmount`および`costCurrency`は、`setNeedsCost`メソッドを呼び出して`AdjustConfig`で設定された場合にのみ利用可能です。設定されていない場合、あるいは設定されていてもアトリビューションの一部でない場合は、これらのフィールドは`null`の値を持ちます。この機能はSDK v4.25.0以降のみ利用可能です。 -- `trackerToken` 最新アトリビューションのトラッカートークン -- `trackerName` 最新アトリビューションのトラッカー名 -- `network` 最新アトリビューションの流入元名 -- `campaign` 最新アトリビューションのキャンペーン名 -- `adgroup` 最新アトリビューションのアドグループ名 -- `creative` 最新アトリビューションのクリエイティブ名 -- `clickLabel` 最新アトリビューションのクリックラベル -- `adid` AdjustユニークID(Adjust Device ID) +### サブスクリプション計測 + +**注**:この機能はネイティブのSDK v4.22.0以降のみ利用可能です。 + +Play Storeのサブスクリプションをトラッキングし、それぞれの有効性をAdjust SDKで確認できます。サブスクリプションの購入が完了したら、次のようにAdjust SDKを呼び出します。 + + + + + + + + +
+Native App SDK +
-### 広告収益の計測 +```java +AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription( + price, + currency, + sku, + orderId, + signature, + purchaseToken); +subscription.setPurchaseTime(purchaseTime); + +Adjust.trackPlayStoreSubscription(subscription); +``` +
+ +Subscription tracking parameters: + +- [price](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getpriceamountmicros) +- [currency](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getpricecurrencycode) +- [sku](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getsku) +- [orderId](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getorderid) +- [signature](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getsignature) +- [purchaseToken](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasetoken) +- [purchaseTime](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasetime) + +イベント計測と同様に、コールバックやパートナーのパラメーターをサブスクリプションオブジェクトに付与できます。 + +```java +AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription( + price, + currency, + sku, + orderId, + signature, + purchaseToken); +subscription.setPurchaseTime(purchaseTime); + +// コールバックパラメーターの追加 +subscription.addCallbackParameter("key","value"); +subscription.addCallbackParameter("foo","bar"); + +// パートナーパラメーターの追加 +subscription.addPartnerParameter("key","value"); +subscription.addPartnerParameter("foo","bar"); + +Adjust.trackPlayStoreSubscription(subscription); +``` + +### 広告収益のトラッキング **注**:この機能はネイティブのSDK v4.18.0以降のみ利用可能です。 Adjust SDKを利用して、以下のメソッドを呼び出し広告収益情報を計測することができます。 - - - - - - + +
-ネイティブアプリSDK -
+ + + + + + - -
+Native App SDK +
```java Adjust.trackAdRevenue(source, payload); ``` -
+
Adjust SDKにパスするメソッドの引数は以下の通りです。 + - `source` - 広告収益情報のソースを指定する`String`オブジェクト - `payload` - `広告収益のJSONを格納する`JSONObject`オブジェクト 現在、弊社は以下の`source`パラメータの値のみ対応しています。 + - `AD_REVENUE_MOPUB` - メディエーションプラットフォームのMoPubを示します。(詳細は、[統合ガイド][sdk2sdk-mopub]を参照ください) ### イベントとセッションのコールバック -イベントとセッションの双方もしくはどちらかをトラッキングし、成功か失敗かの通知を受け取れるようリスナを登録することができます。リスナには4種類あります。それらは、トラッキングに成功したイベント、トラッキングに失敗したイベント、トラッキングに成功したセッション、トラッキングに失敗したイベントです。 Configオブジェクトを生成すると、リスナをいくつでも追加することができます。 +イベントとセッションの双方もしくはどちらかをトラッキングし、成功か失敗かの通知を受け取れるようリスナーを登録することができます。リスナーには4種類あります。それらは、トラッキングに成功したイベント、トラッキングに失敗したイベント、トラッキングに成功したセッション、トラッキングに失敗したイベントです。Configオブジェクトを生成すると、リスナーをいくつでも追加することができます。 @@ -1381,7 +1462,7 @@ Adjust SDKにパスするメソッドの引数は以下の通りです。 AdjustConfig config = new AdjustConfig(this, appToken, environment); // Set event success tracking delegate. -config.setOnEventTrackingSucceededListener(new OnEventTrackingSucceededListener() { +config.setOnEventTrackingSucceededListener(newOnEventTrackingSucceededListener() { @Override public void onFinishedEventTrackingSucceeded(AdjustEventSuccess eventSuccessResponseData) { // ... @@ -1389,7 +1470,7 @@ config.setOnEventTrackingSucceededListener(new OnEventTrackingSucceededListener( }); // Set event failure tracking delegate. -config.setOnEventTrackingFailedListener(new OnEventTrackingFailedListener() { +config.setOnEventTrackingFailedListener(newOnEventTrackingFailedListener() { @Override public void onFinishedEventTrackingFailed(AdjustEventFailure eventFailureResponseData) { // ... @@ -1397,7 +1478,7 @@ config.setOnEventTrackingFailedListener(new OnEventTrackingFailedListener() { }); // Set session success tracking delegate. -config.setOnSessionTrackingSucceededListener(new OnSessionTrackingSucceededListener() { +config.setOnSessionTrackingSucceededListener(newOnSessionTrackingSucceededListener() { @Override public void onFinishedSessionTrackingSucceeded(AdjustSessionSuccess sessionSuccessResponseData) { // ... @@ -1405,7 +1486,7 @@ config.setOnSessionTrackingSucceededListener(new OnSessionTrackingSucceededListe }); // Set session failure tracking delegate. -config.setOnSessionTrackingFailedListener(new OnSessionTrackingFailedListener() { +config.setOnSessionTrackingFailedListener(newOnSessionTrackingFailedListener() { @Override public void onFinishedSessionTrackingFailed(AdjustSessionFailure sessionFailureResponseData) { // ... @@ -1443,26 +1524,25 @@ Adjust.onCreate(adjustConfig);
-リスナ関数はSDKがサーバーにパッケージ送信を試みた後で呼ばれます。 リスナ関数内でリスナ用のレスポンスデータオブジェクトを確認することができます。 レスポンスデータのプロパティの概要は以下の通りです。 - +リスナー関数はSDKがサーバーにパッケージ送信を試みた後で呼ばれます。リスナー関数内でリスナー用のレスポンスデータオブジェクトを確認することができます。レスポンスデータのプロパティの概要は以下の通りです。 + - `message` サーバーからのメッセージまたはSDKのエラーログ -- `timestamp` サーバーからのタイムスタンプ -- `adid` Adjustから提供されるユニークデバイスID -- `jsonResponse` サーバーからのレスポンスのJSONオブジェクト +- `timestamp`サーバーからのタイムスタンプ +- `adid`Adjustから提供されるユニークデバイスID +- `jsonResponse`サーバーからのレスポンスのJSONオブジェクト -イベントのレスポンスデータは以下を含みます。 +どちらのイベントレスポンスデータオブジェクトも以下を含みます。 -- `eventToken` トラッキングされたパッケージがイベントだった場合、そのイベントトークン -- `callbackId` イベントオブジェクトにカスタム設定された[コールバックID](#cp-event-callback-id) +- `eventToken`トラッキングされたパッケージがイベントだった場合、そのイベントトークン +- `callbackId`イベントオブジェクトにカスタム設定されたコールバックID 失敗したイベントとセッションは以下を含みます。 -- boolean `willRetry` しばらく後に再送を試みる予定であるかどうかを示します。 - +- `willRetry`後にパッケージ再送を試みる予定であるかどうかを示すboolean ### ユーザーアトリビューション -[アトリビューションコールバック](#af-attribution-callback) で説明したとおり、アトリビューション情報に変更がある度に、このコールバックが起動されます。Adjust インスタンスの以下のメソッドをコールすることで、必要な時にいつでもユーザーの最新のアトリビューション情報にアクセスすることができます: +[アトリビューションコールバック](#af-attribution-callback)で説明したとおり、アトリビューション情報に変更がある度に、このコールバックが起動されます。`Adjust` インスタンスの以下のメソッドをコールすることで、必要な時にいつでもユーザーの最新のアトリビューション情報にアクセスすることができます: @@ -1493,15 +1573,15 @@ let attribution = Adjust.getAttribution();
-**注意**: このコールは、**Adjust SDK v4.11.0** 以上で使用が可能です。 +**注意**: このコールは、Adjust SDK v4.11.0**以上**で使用が可能です。 -**注意**: 最新のアトリビューション情報は、Adjust がバックエンドで行うアプリインストールのトラッキングが完了し、アトリビューションコールバックがトリガーされた後にのみ利用が可能となります。SDK が初期化され、アトリビューションコールバックがトリガーされる前には、ユーザーのアトリビューション値にアクセスすることができません。 +**注意**: 最新のアトリビューション情報は、Adjustがバックエンドで行うアプリインストールのトラッキングが完了し、アトリビューションコールバックがトリガーされた後にのみ利用が可能となります。SDKが初期化され、アトリビューションコールバックがトリガーされる前には、ユーザーのアトリビューション値にアクセスすることが**できません**。 ### デバイスID Adjust SDK を使って、デバイス ID を取得することもできます。 -### Google広告ID / Google Play Services advertising identifier(gps_adid) +### Google Play 開発者サービスの広告ID(gps_adid) Google Analyticsなどの一部のサービスでは、レポートの重複を防ぐためにデバイスIDとクライアントIDを連携させることが求められます。 @@ -1514,7 +1594,7 @@ Google Analyticsなどの一部のサービスでは、レポートの重複を -Google 広告 ID は、バックグラウンドスレッドでのみ読み取りが可能という制限付で、取得することができます。ファンクション`getGoogleAdId` をコンテクストとインスタンスの`OnDeviceIdsRead` を呼び出すと、どんな状況でも機能させることができます: +Google 広告IDは、バックグラウンドでのスレッドでしか読み込みできないという制約があります。コンテキストのある`getGoogleAdId`関数と`OnDeviceIdsRead`インスタンスをコールすると、あらゆる条件で取得できるようになります。 ```java Adjust.getGoogleAdId(this, new OnDeviceIdsRead() { @@ -1532,7 +1612,7 @@ Adjust.getGoogleAdId(this, new OnDeviceIdsRead() { -デバイスの Google 広告デバイス ID を取得する際には、Google 広告 ID を引数として受け取る `Adjust.getGoogleAdId` に対して、以下のようなコールバック機能を渡す必要があります。: +デバイスの Google 広告デバイス ID を取得する際には、Google 広告 ID を引数として受け取る`Adjust.getGoogleAdId`に対して、以下のようなコールバック機能を渡す必要があります。 ```js Adjust.getGoogleAdId(function(googleAdId) { @@ -1543,9 +1623,9 @@ Adjust.getGoogleAdId(function(googleAdId) { -### Amazon広告ID / Amazon advertising identifier(fire_adid) +### Amazonの広告ID (fire_adid) -Amazon 広告 ID を取得する必要がある場合は、`Adjust` インスタンスで、以下のメソッドを呼び出します: +Amazonの広告 ID を取得する必要がある場合は、`Adjust`インスタンスで、以下のメソッドを呼び出します: @@ -1576,9 +1656,9 @@ let amazonAdId = Adjust.getAmazonAdId();
-### Adjust デバイスID (adid) +### AdjustのデバイスID (adid) -アプリがインストールされている各デバイスに対して、Adjust は、バックエンドでユニークな **Adujust デバイス ID (adid)** を生成します。この ID を取得するためには、`Adjust` インスタンスで、以下のメソッドを呼び出してください: +アプリがインストールされている各デバイスに対して、Adjust は、バックエンドでユニークな **Adjust デバイス ID (adid)** を生成します。この ID を取得するためには、`Adjust`インスタンスで、以下のメソッドを呼び出してください: @@ -1609,15 +1689,54 @@ let adid = Adjust.getAdid();
-**注意**: このコールは、**Adjust SDK v4.11.0** 以上で使用が可能です。 +**注意**: このコールは、Adjust SDK v4.11.0**以降**で使用が可能です。 + +**注意**:**adid**に関する情報は、Adjustがバックエンドで行うアプリインストールのトラッキングが完了後のみ利用可能となります。SDKが初期化されてアプリインストールのトラッキングが完了しないと、**adid**値にアクセスすることは**できません**。 + +### プリインストールのトラッカー -**注意**:adid に関する情報は、Adjust がバックエンドで行うアプリインストールのトラッキングが完了後のみ利用可能となります。SDK が初期化されてアプリインストールのトラッキングが完了しないと、adid 値にアクセスすることはできません。 +Adjust SDKは、出荷直後のスマートフォンにプリインストールされたアプリの初回起動を計測することが可能です。Adjustでは、システムペイロードを使用するソリューションと、デフォルトトラッカーを使用するソリューションの2つを提供しています。 -### プレインストールのトラッカー +通常は、システムペイロードのソリューションを推奨します。ただし、特定の状況ではトラッカーの利用が必要な場合があります。Adjustのプリインストールパートナーとパートナーとの統合については[ヘルプセンター](https://help.adjust.com/ja/article/pre-install-tracking)をご覧ください。どちらのソリューションを実装すればよいか不明な場合は、integration@adjust.comまでお問い合わせください。 -すでにアプリをインストールしたことのあるユーザーをAdjust SDKを使って識別したい場合は、次の手順で設定を行ってください。 +#### システムペイロードを使用 -- [管理画面][dashboard]上で新しいトラッカーを作成してください。 +このソリューションは**SDK v4.23.0以上**でサポートされています。 + +configオブジェクトを作成した後、パラメーターtrueを指定して`setPreinstallTrackingEnabled`を呼び出すことによって、プリインストールアプリを認識するためのAdjust SDKを有効にします。 + + + + + + + + + + + + + + +
+Native App SDK +
+ +```java +adjustConfig.setPreinstallTrackingEnabled(true); +``` +
+Web View SDK +
+ +```js +adjustConfig.setPreinstallTrackingEnabled(true); +``` +
+ +#### デフォルトトラッカーを使用 + +- [管理画面]上で新しいトラッカーを作成してください。 - App Delegateを開き、Configのデフォルトトラッカーを設定してください。 @@ -1630,7 +1749,7 @@ let adid = Adjust.getAdid(); @@ -1649,18 +1768,19 @@ let adid = Adjust.getAdid();
```java - adjustConfig.setDefaultTracker("{TrackerToken}"); + AdjustConfig adjustConfig = new AdjustConfig(appToken, environment); ```
-- `{TrackerToken}`にステップ2で作成したトラッカートークンを入れてください。 管理画面には`http://app.adjust.com/`を含むトラッカーURLが表示されます。 ソースコード内にはこのURLすべてではなく、6文字のトークンを抜き出して指定してください。 +- `{TrackerToken}`をステップ2で作成したトラッカートークンに差し替えてください。管理画面には`http://app.adjust.com/を`含むトラッカーURLが表示されます。ソースコード内にはこのURLすべてではなく、6文字のトークンを抜き出して指定してください。 - アプリをビルドしてください。LogCatで下記のような行が表示されるはずです。 - ``` - Default tracker: 'abc123' - ``` + + ``` + Default tracker: 'abc123' + ``` ### オフラインモード -Adjustのサーバーへの送信を一時停止し、保持されているトラッキングデータを後から送信するために Adjust SDKをオフラインモードにすることができます。 オフラインモード中はすべての情報がファイルに保存されるので、イベントをたくさん発生させすぎないようにご注意ください。 +Adjustのサーバーへの送信を一時停止し、保持されているトラッキングデータを後から送信するためにAdjust SDKをオフラインモードにすることができます。オフラインモード中はすべての情報がファイルに保存されるため、イベントを多く発生させすぎないようにご注意ください。 -`true`パラメータで`setOfflineMode`を呼び出すとオフラインモードを有効にできます。 +`true`パラメーターで`setOfflineMode` を呼び出すと、オフラインモードを有効にできます。 @@ -1691,14 +1811,15 @@ Adjust.setOfflineMode(true);
-反対に、`false`パラメータで`setOfflineMode`を呼び出せばオフラインモードを解除できます。 Adjust SDKがオンラインモードに戻った時、保存されていた情報は正しいタイムスタンプでAdjustのサーバーに送られます。 +反対に、`false`パラメーターで`setOfflineMode`を呼び出すと、オフラインモードを解除できます。Adjust SDKがオンラインモードに戻った時、保存されていた情報は正しいタイムスタンプでAdjustのサーバーに送られます。 + +トラッキングの無効化とは異なり、この設定はセッション間で**記憶されません**。オフラインモード時にアプリを終了しても、次に起動した時にはオンラインモードとしてアプリが起動します。 -トラッキングの無効化とは異なり、この設定はセッション間で**記憶されません**。 オフラインモード時にアプリを終了しても、次に起動した時にはオンラインモードとしてアプリが起動します。 ### トラッキングの無効化 -`setEnabled`にパラメータ`false`を渡すことで、AdjustSDKが行うデバイスのアクティビティのトラッキングをすべて無効にすることができます。**この設定はセッション間で記憶されます** - +`setEnabled`にパラメーター`false`を渡すことで、AdjustSDKが行うデバイスのアクティビティのトラッキングをすべて無効にすることができます。**この設定はセッション間で記憶されます**。 +
@@ -1728,11 +1849,11 @@ Adjust.setEnabled(false);
-Adjust SDKが現在有効かどうか、`isEnabled`関数を呼び出せば確認できます。 また、`setEnabled`関数に`true`を渡せば、Adjust SDKを有効にすることができます。 - +Adjust SDKが現在有効化されているかどうかは、`isEnabled`関数を呼び出すことで確認できます。また、`setEnabled`関数に`true`を渡せば、Adjust SDKを有効化することができます。 + ### イベントバッファリング -イベントトラッキングを酷使している場合、HTTPリクエストを遅らせて1分毎にまとめて送信したほうがいい場合があります。 その場合は、Configインスタンスでイベントバッファリングを有効にしてください。 +イベントトラッキングを大量に行っている場合は、ネットワークリクエストを遅らせて1分毎にまとめて送信したほうがいい場合があります。その場合は、Configインスタンスでイベントバッファリングを有効にしてください。 @@ -1765,7 +1886,7 @@ adjustConfig.setEventBufferingEnabled(true); ### バックグラウンドでのトラッキング -デフォルトでは、アプリがバックグラウンドにある間、Adjust SDKはHTTPリクエストの送信を停止します。 この設定はConfigインスタンスで変更できます。 +デフォルトでは、アプリがバックグラウンドにある間、Adjust SDKはネットワークリクエストの送信を停止します。この設定はConfigインスタンスで変更できます。
@@ -1798,7 +1919,7 @@ adjustConfig.setSendInBackground(true); ### GDPR消去する権利(忘れられる権利) -次のメソッドを呼び出すと、EUの一般データ保護規制(GDPR)第17条に従い、ユーザーが消去する権利(忘れられる権利)を行使した際にAdjust SDKがAdjustバックエンドに情報を通知します。 +EUの一般データ保護規制(GDPR)第17条に基づいて、ユーザーが「忘れられる権利(right to be forgotten)」を行使した場合は、Adjustに通知することができます。次のメソッドを呼び出して、ユーザーの申請をAdjustバックエンドに伝えるようAdjust SDKに指示してください。
@@ -1823,49 +1944,200 @@ Adjust.gdprForgetMe(context); + +
```js -Adjust.gdprForgetMe(); +```Adjust.gdprForgetMe(); +``` +
+ +この情報を受け取ると、Adjustは該当ユーザーのデータを消去し、Adjust SDKはユーザーのトラッキングを停止します。以降、そのデバイスからのリクエストはAdjustに送信されません。 + +この変更はテストを行なっている場合でも恒久的で、元の設定に戻すことは**できない**ことをご留意ください。 + +## サードパーティーとの共有 + +ユーザーがサードパーティーとのデータ共有を無効化、有効化、あるいは再有効化する情報をAdjustに送信することができます。 + +### サードパーティーとの共有を無効にする + +次のメソッドを呼び出して、ユーザーの選択(データ共有を無効にする)をAdjustバックエンドに伝えるようAdjust SDKに指示してください。 + + + + + + + + + + + + + + +
+Native App SDK +
+ +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(false); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
+ +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(false); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+ +この情報を受け取ると、Adjustは特定のユーザーに関してパートナーとのデータ共有をブロックし、Adjust SDKは通常通り機能します。 + +## サードパーティーとの共有を無効にする + +次のメソッドを呼び出して、データ共有あるいはデータ共有の変更に関するユーザーの選択をAdjustバックエンドに伝えるようAdjust SDKに指示してください。 + + + + + + + + + + + + + + +
+Native App SDK +
+ +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
+ +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(true); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+ +この情報を受け取ると、Adjustは特定のユーザーに関してパートナーとのデータ共有設定を変更し、Adjust SDKは通常通り機能します。 + +次のメソッドを呼び出して、詳細なオプションをAdjustバックエンドに送信するようAdjust SDKに指示してください。 + + + + + + + + + + + + +
+Native App SDK +
+ +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null); +adjustThirdPartySharing.addGranularOption("PartnerA", "foo", "bar"); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
+ +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(null); +adjustThirdPartySharing.addGranularOption("PartnerA", "foo", "bar"); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); ```
-この情報を受け取ると、Adjustはユーザーのデータを消去し、Adjust SDKはユーザーの追跡を停止します。この削除された端末からのリクエストは今後、Adjustに送信されません。 +### ユーザー同意の計測 + +Adjust管理画面で同意有効期間とユーザーデータ保持期間を含むデータプライバシー設定を有効化あるいは無効化するには、以下のメソッドを実装してください。 + +次のメソッドを呼び出して、データプライバシー設定をAdjustバックエンドに伝えるようAdjust SDKに指示してください。 + + + + + + + + + + + + + + +
+Native App SDK +
+ +```java +Adjust.trackMeasurementConsent(true); +``` +
+Web View SDK +
-この変更はテストを行なっている場合でも恒久的で、元の設定に戻すことは*できない*ことをご留意ください。 +```js +Adjust.trackMeasurementConsent(true); +``` +
+この情報を受け取ると、Adjustは同意による計測を有効化、あるいは無効化します。Adjust SDKは通常通り機能します。 -## トラブルシューティング +## テストとトラブルシューティング ### "Session failed (Ignoring too frequent session. ...)"というエラーが出る -このエラーはインストールのテストの際に起こりえます。アンインストール後に再度インストールするだけでは新規インストールとして動作しません。 SDKがローカルで統計したセッションデータを失ったとサーバーは判断してエラーメッセージを無視し、 その端末に関する有効なデータのみが与えられます。 +このエラーはインストールのテストの際に起こりえます。アンインストール後に再インストールするだけでは新規インストールとして動作しません。SDKがローカルで統計したセッションデータを失ったとサーバーは判断してエラーメッセージを無視し、その端末に関する有効なデータのみが与えられます。 この仕様はテスト中には厄介かもしれませんが、サンドボックスと本番用の挙動をできる限り近づけるために必要です。 -アプリに対して、編集者レベル(または管理人権限)のアクセス権を持っている場合には、どんなデバイスに対するアプリのセッションデータについても、[テストコンソー][testing_console]ルを使って Adjust 管理画面から直接リセットすることができます。 +アプリに対して、編集者レベル(または管理人権限)のアクセス権を持っている場合には、どんなデバイスに対するアプリのセッションデータについても、[テストコンソール][testing-console]を使ってAdjust管理画面から直接リセットすることができます。 -端末に関する記録が消去されると、テスティングコンソールは`Forgot device`と返します。 もしその端末の記録がすでに消去されていたり、値が不正だった場合は、そのリンクは`Advertising ID not found`と返します。 +端末に関する記録が消去されると、テスティングコンソールは`Forgot device`と返します。もしその端末の記録がすでに消去されていたり、値が不正だった場合は、そのリンクは`Advertising ID not found`と返します。 -現在ご契約のパッケージでアクセスが可能の場合は、[開発者用API][dev_api]で設定確認と端末記録の消去を行うことができます。 +端末に関する記録を消去しても、GDPR 忘れられる権利のコールを元に戻すことはできません。 -### ブロードキャストレシーバーがインストールリファラを受信していない +現在ご契約のパッケージでアクセスが可能の場合は、[開発者用API][dev-api]で設定確認と端末記録の消去を行うことができます。 -[ガイド](#qs-gps-intent)に従って設定を済ませていれば、 ブロードキャストレシーバーはAdjustのSDKとサーバーにインストールを送信するよう設定されているはずです。 +### ブロードキャストレシーバーがインストールリファラーを受信していない -手動でテスト用インストールリファラを作動させることで確認できます。`com.your.appid`にアプリIDを入力し、Android Studioの [adb](http://developer.android.com/tools/help/adb.html)ツールで以下のコマンドを実行してください。 +[ガイド](#qs-gps-intent)に従って設定を済ませていれば、ブロードキャストレシーバーはAdjustのSDKとサーバーにインストールを送信するよう設定されているはずです。 + +手動でテスト用インストールリファラーを作動させることで確認できます。`com.your.appid`にアプリIDを入力し、Android Studioの[adb](http://developer.android.com/tools/help/adb.html)ツールで以下のコマンドを実行してください。 ``` adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver --es "referrer" "adjust_reftag%3Dabc1234%26tracking_id%3D123456789%26utm_source%3Dnetwork%26utm_medium%3Dbanner%26utm_campaign%3Dcampaign" ``` -INSTALL_REFERRERインテントに対してすでに別のブロードキャストリファラを使っている状態でこの[ガイド][referrer]の設定をした場合、`com.adjust.sdk.AdjustReferrerReceiver`にブロードキャストレシーバーを入力してください。 +`INSTALL_REFERRER`インテントに対してすでに別のブロードキャストリファラーを使っている状態でこの[ガイド][referrer]の設定をした場合、`com.adjust.sdk.AdjustReferrerReceiver`にブロードキャストレシーバーを入力してください。 --`n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver`パラメータを削除することもできます。 削除すると、デバイスに入っているすべてのアプリが`INSTALL_REFERRER`インテントを受信します。 +`-n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver`パラメーターを削除することもできます。削除すると、デバイスに入っているすべてのアプリが`INSTALL_REFERRER`インテントを受信します。 ログレベルを`verbose`に設定していれば、リファラが読み込まれると以下のログが表示されるはずです。 ``` -V/Adjust: Reading query string (adjust_reftag=abc1234&tracking_id=123456789&utm_source=network&utm_medium=banner&utm_campaign=campaign) from reftag +V/Adjust: Referrer to parse (adjust_reftag=abc1234&tracking_id=123456789&utm_source=network&utm_medium=banner&utm_campaign=campaign) from reftag ``` SDKのパッケージハンドラーに追加されるクリックパッケージは以下のような形です。 @@ -1888,8 +2160,9 @@ V/Adjust: Path: /sdk_click アプリの起動前にこのテストを行う場合、パッケージの送信は表示されません。パッケージはアプリの起動後に送信されます。 -**重要:** この機能をテストをするために`adb`ツールを利用することは推奨しておりません。全てのリファラコンテンツを`adb`でテストするためには(`&`で分けられた複数のパラメータがある場合)、ブロードキャストリシーバーで受信するためにコンテンツをエンコードすることが必要です。もしエンコードをしないと、`adb`はレファラを最初の&サインで切り、誤ったコンテンツをブロードキャストレシーバーに伝えます。アプリがどのようにエンコードされていないリファラを受信しているかを確認したい場合は、Adjustのサンプルアプリを利用して、`MainActivity.java`ファイルの`onFireIntentClick`メソッドのインテント内に送信されたコンテンツを変更してください: +**重要:** この機能をテストをするために`adb`ツールを利用することは推奨**していません**。すべてのリファラーコンテンツを`adb`でテストするためには(`&`で分けられた複数のパラメータがある場合)、ブロードキャストレシーバーで受信するためにコンテンツをエンコードすることが必要です。もしエンコードをしないと、`adb`はリファラーを最初の`&`サインで切り、誤ったコンテンツをブロードキャストレシーバーに伝えます。 +アプリがどのようにエンコードされていないリファラーを受信しているかを確認したい場合は、Adjustのサンプルアプリを利用して、`MainActivity.java`ファイルの`onFireIntentClick`メソッドのインテント内に送信されたコンテンツを変更してください:file: ```java public void onFireIntentClick(View v) { @@ -1900,61 +2173,64 @@ public void onFireIntentClick(View v) { } ``` -自分の選んだコンテントで`putExtra`2番目のパラメーターを自由に変更してください。 +自分の選んだコンテンツで`putExtra`2番目のパラメーターを自由に変更してください。 ### アプリ起動時にイベントを始動したい -直感的には分かりにくいですが、グローバル`Application`クラスの`onCreate`メソッドはアプリ起動時だけでなく、 アプリによってシステムやイベントが作動する時にも呼ばれます。 +このタイミングでイベントを始動しても、期待どおりの動作をしない可能生があります。理由はこちらです。 + +直感的には分かりにくいですが、グローバル`Application`クラスの`onCreate`メソッドはアプリ起動時だけでなく、アプリによってシステムやイベントが作動する時にも呼ばれます。 -Adjust SDKはこの場合の初期化についてサポートしています。この機能はアプリが実際に起動した時でなく、 アクティビティがスタートした時、たとえばユーザーがアプリを起動させた時に起こります。 +Adjust SDKはこの場合の初期化についてサポートしています。この機能はアプリが実際に起動した時でなく、アクティビティがスタートした時、たとえばユーザーがアプリを起動させた時に起こります。 -これらのコールはアプリがユーザーの操作以外の要因で起動した場合にも、Adjust SDKを起動しイベントを送信しします。これはアプリの外部要因にもよります。 +これらのコールはアプリがユーザーの操作以外の要因で起動した場合にも、Adjust SDKを起動しイベントを送信します。これはアプリの外部要因にもよります。 このように、アプリ起動時のイベントの作動はインストールとセッションの数を正確にトラッキングできません。 -インストール後にイベントを作動させたい場合は、[アトリビューション変更時用のリスナ](#attribution_changed_listener)をご利用ください。 +インストール後にイベントを作動させたい場合は、[アトリビューション変更時用のリスナー](#attribution_changed_listener)をご利用ください。 アプリ起動時にイベントを作動させたい場合は、スタートするアクティビティの`onCreate`メソッドをご使用ください。 -[dashboard]: http://adjust.com -[adjust.com]: http://adjust.com +[dashboard]: http://adjust.com/ja +[adjust.com]: http://adjust.com/ja [en-readme]: ../../README.md [zh-readme]: ../chinese/README.md [ja-readme]: ../japanese/README.md [ko-readme]: ../korean/README.md -[example-java]: ../../Adjust/example-app-java -[example-kotlin]: ../../Adjust/example-app-kotlin -[example-tv]: ../../Adjust/example-app-tv -[example-webbridge]: ../../Adjust/example-app-webbridge +[example-java]: ../../Adjust/example-app-java +[example-kotlin]: ../../Adjust/example-app-kotlin +[example-keyboard]: ../../Adjust/example-app-keyboard +[example-tv]: ../../Adjust/example-app-tv +[example-webbridge]: ../../Adjust/example-app-webbridge [maven]: http://maven.org -[referrer]: ../japanese/multiple-receivers.md -[releases]: https://github.com/adjust/adjust_android_sdk/releases -[google_ad_id]: https://support.google.com/googleplay/android-developer/answer/6048248?hl=en +[referrer]: ../../doc/japanese/misc/multiple-receivers.md +[releases]: https://github.com/adjust/android_sdk/releases +[google-ad-id]: https://support.google.com/googleplay/android-developer/answer/6048248?hl=en [event-tracking]: https://docs.adjust.com/ja/event-tracking [callbacks-guide]: https://docs.adjust.com/ja/callbacks [new-referrer-api]: https://developer.android.com/google/play/installreferrer/library.html -[special-partners]: https://docs.adjust.com/ja/special-partners +[integrated-partners]: https://help.adjust.com/ja/integrated-partners [attribution-data]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md [android-dashboard]: http://developer.android.com/about/dashboards/index.html -[currency-conversion]: https://docs.adjust.com/ja/event-tracking/#part-8 +[currency-conversion]: https://docs.adjust.com/ja/event-tracking/#tracking-purchases-in-different-currencies [android-application]: http://developer.android.com/reference/android/app/Application.html [android-launch-modes]: https://developer.android.com/guide/topics/manifest/activity-element.html -[google_play_services]: http://developer.android.com/google/play-services/setup.html -[reattribution-with-deeplinks]: https://docs.adjust.com/en/deeplinking/#manually-appending-attribution-data-to-a-deep-link +[google-play-services]: http://developer.android.com/google/play-services/setup.html +[reattribution-with-deeplinks]: https://docs.adjust.com/ja/deeplinking/#manually-appending-attribution-data-to-a-deep-link [android-purchase-verification]: https://github.com/adjust/android_purchase_sdk -[testing_console]: https://docs.adjust.com/ja/testing-console/#part-2 -[dev_api]: https://docs.adjust.com/ja/adjust-for-developers/ +[testing-console]: https://docs.adjust.com/ja/testing-console/#how-to-clear-your-advertising-id-from-adjust-between-tests +[dev-api]: https://docs.adjust.com/en/adjust-for-developers/ -[sdk2sdk-mopub]: ../japanese/sdk-to-sdk/mopub.md +[sdk2sdk-mopub]: ../../doc/japanese/sdk-to-sdk/mopub.md ## ライセンス Adjust SDKはMITライセンスを適用しています。 -Copyright (c) 2012-2019 Adjust GmbH, http://www.adjust.com +Copyright (c) 2012-2021 Adjust GmbH, http://www.adjust.com 以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、 ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、 および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。 diff --git a/doc/japanese/migration/migrate.md b/doc/japanese/migration/migrate.md index 2ad29dfe9..b14b58a1a 100644 --- a/doc/japanese/migration/migrate.md +++ b/doc/japanese/migration/migrate.md @@ -1,4 +1,4 @@ -## Android用adjust SDKのv3.6.2からv4.26.2への移行 +## Android用adjust SDKのv3.6.2からv4.27.0への移行 ### アプリケーションクラス diff --git a/doc/japanese/plugins/oaid.md b/doc/japanese/plugins/oaid.md index f7247056c..fbe12df45 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.26.2' -implementation 'com.adjust.sdk:adjust-android-oaid:4.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' +implementation 'com.adjust.sdk:adjust-android-oaid:4.27.0' ``` Adjust OAIDプラグインを JARファイルとして追加することもできます。JARファイルは、[releases page][releases] からダウンロードすることができます。 diff --git a/doc/korean/README.md b/doc/korean/README.md index 4ee5225cf..11d35fab2 100644 --- a/doc/korean/README.md +++ b/doc/korean/README.md @@ -1,39 +1,41 @@ ## 요약 -이 항목에서는 Adjust의 Android SDK에 대해 설명합니다. Adjust에 대한 자세한 내용은 [adjust.com]을 참조하십시오. +Adjust™의 Android SDK에 관한 문서입니다. Adjust™에 대한 자세한 정보는 [adjust.com]에서 확인하십시오. + 제공되는 언어: [English][en-readme], [中文][zh-readme], [日本語][ja-readme], [한국어][ko-readme]. ## 목차 + ### 빠른 시작 - * [앱 예제](#qs-example-apps) - * [기본 연동](#qs-getting-started) + * [앱 예시](#qs-example-apps) + * [시작하기](#qs-getting-started) * [프로젝트에 SDK 추가](#qs-add-sdk) * [Google Play 서비스 추가](#qs-gps) * [권한 추가](#qs-permissions) * [Proguard 설정](#qs-proguard) - * [설치 referrer](#qs-install-referrer) - * [Google Play referrer API](#qs-gpr-api) - * [Google Play Store 인텐트](#qs-gps-intent) - * [Huawei Referrer API](#qs-huawei-referrer-api) + * [설치 리퍼러](#qs-install-referrer) + * [Google Play 리퍼러 API](#qs-gpr-api) + * [Google Play Store intent](#qs-gps-intent) + * [Huawei 리퍼러 API](#qs-huawei-referrer-api) * [앱에 SDK 연동](#qs-integrate-sdk) * [기본 설정](#qs-basic-setup) * [네이티브 앱 SDK](#qs-basic-setup-native) * [웹뷰 SDK](#qs-basic-setup-web) - * [세션 추적](#qs-session-tracking) - * [API 레벨 14 이상](#qs-session-tracking-api-14) - * [API 레벨 9-13](#qs-session-tracking-api-9) + * [세션 트래킹](#qs-session-tracking) + * [API 레벨 14 및 이상](#qs-session-tracking-api-14) + * [API 레벨 9~13](#qs-session-tracking-api-9) * [SDK 서명](#qs-sdk-signature) - * [Adjust 로그 기록(logging)](#qs-adjust-logging) - * [앱 빌드](#qs-build-the-app) + * [Adjust 로깅(logging)](#qs-adjust-logging) + * [앱 빌드하기](#qs-build-the-app) -### 딥링크 (Deeplinking) +## 딥링크 * [딥링크 개요](#dl) - * [기본 딥링크 시나리오](#dl-standard) - * [지연된 딥링크 시나리오](#dl-deferred) + * [표준 딥링크 시나리오](#dl-standard) + * [디퍼드 딥링크 시나리오](#dl-deferred) * [딥링크를 통한 리어트리뷰션](#dl-reattribution) ### 이벤트 추적 @@ -43,100 +45,107 @@ * [매출 중복 제거](#et-revenue-deduplication) * [인앱 구매 검증](#et-purchase-verification) -### 사용자 지정 파라미터 +### 커스텀 파라미터 - * [사용자 지정 파라미터 개요](#cp) - * [이벤트 파라미터](#cp-event-parameters) + * [커스텀 파라미터 개요](#cp) + * [이벤트 파트너 파라미터](#cp-event-partner-parameters) * [이벤트 콜백 파라미터](#cp-event-callback-parameters) * [이벤트 파트너 파라미터](#cp-event-partner-parameters) * [이벤트 콜백 식별자](#cp-event-callback-id) * [세션 파라미터](#cp-session-parameters) * [세션 콜백 파라미터](#cp-session-callback-parameters) * [세션 파트너 파라미터](#cp-session-partner-parameters) - * [예약 시작(delay start)](#cp-delay-start) + * [지연 시작](#cp-delay-start) ### 부가 기능 - * [푸시 토큰(push token) - uninstall tracking](#af-push-token) + * [푸시 토큰(삭제 트래킹)](#af-push-token) * [어트리뷰션 콜백](#af-attribution-callback) * [광고 매출 트래킹](#af-ad-revenue) + * [구독 트래킹](#af-subscriptions) * [세션 및 이벤트 콜백](#af-session-event-callbacks) - * [사용자 어트리뷰션](#af-user-attribution) + * [유저 어트리뷰션](#af-user-attribution) * [기기 ID](#af-device-ids) * [Google Play 서비스 광고 식별자](#af-gps-adid) * [Amazon 광고 식별자](#af-amazon-adid) * [Adjust 기기 식별자](#af-adid) - * [사전 설치된 앱(preinstalled apps)](#af-preinstalled-apps) + * [사전 설치 앱](#af-preinstalled-apps) * [오프라인 모드](#af-offline-mode) - * [추적 사용 중지](#af-disable-tracking) - * [이벤트 버퍼링(buffering)](#af-event-buffering) - * [백그라운드 추적](#af-background-tracking) - * [GDPR(일반 개인정보 보호법) 상의 잊힐 권리](#af-gdpr-forget-me) + * [트래킹 비활성화](#af-disable-tracking) + * [이벤트 버퍼링](#af-event-buffering) + * [백그라운드 트래킹](#af-background-tracking) + * [GDPR 잊혀질 권리(Right to be Forgotten)](#af-gdpr-forget-me) + * [서드파티 공유](#af-third-party-sharing) + * [서드파티 공유 비활성화](#af-disable-third-party-sharing) + * [Enable third-party sharing](#af-enable-third-party-sharing) + * [Consent measurement](#af-measurement-consent) ### 테스트 및 문제 해결 - * [“session failed (Ignoring too frequent session...)” 오류가 표시됩니다.](#tt-session-failed) - * [브로드캐스트 리시버가 설치 참조 페이지를 제대로 캡처하고 있나요?](#tt-broadcast-receiver) - * [응용 프로그램 런칭 시 이벤트를 촉발할 수 있나요?](#tt-event-at-launch) + * ["세션 실패(너무 빈번한 세션 거부 )" 오류가 발생한 경우](#tt-session-failed) + * [브로드캐스트 리시버가 설치 리퍼러를 포착하는지 확인하고 싶은 경우](#tt-broadcast-receiver) + * [앱 실행 시 이벤트 트리거 가능 여부](#tt-event-at-launch) + +### 라이센스 -### 라이선스 ## 빠른 시작 -### 앱 예제 +### 예시 앱 -[`example-app-java`][example-java] 와 [`example-app-kotlin` directories][example-kotlin] 안에 안드로이드 예제앱이 있습니다. 웹뷰를 사용하는 네이티브 앱의 경우 [`example-webbridge`][example-webbridge] 디렉터리 안에 웹뷰를, Android TV 앱은[`example-app-tv`][example-tv] 안에 예제앱을 확인하시기 바랍니다. Android 프로젝트를 열어 Adjust SDK 연동 방법의 예를 확인할 수 있습니다. +[`example-app-java`][example-java], [`example-app-kotlin`][example-kotlin],[`example-app-keyboard`][example-keyboard] 디렉터리에는 Android 예시 앱이 있으며, [`example-webbridge` directory][example-webbridge] 안에는 웹뷰를 사용하는 예시 앱, [`example-app-tv`][example-tv] 디렉터리 안에는 Android TV 예시 앱이 있습니다. Android 프로젝트를 열어 Adjust SDK가 어떻게 연동될 수 있는지 예시를 확인할 수 있습니다. -### 기본 연동 +### 시작하기 -다음은 Adjust SDK를 안드로이드 프로젝트와 연동하기 위해 최소한으로 수행해야 하는 절차입니다. 여기서는 Android Studio를 안드로이드 개발에 사용하고 API 레벨 **9(Gingerbread)** 이상을 대상으로 한다고 가정합니다. +다음은 Android 앱에 Adjust SDK를 연동하는 데 필요한 최소한의 단계입니다. 본 설명에서는 Android 앱 개발에 Android 스튜디오를 사용하고 있다고 가정하겠습니다. Adjust SDK 연동에 필요한 Android API의 최소 지원 레벨은 **9 (Gingerbread)** 입니다. -### 프로젝트에 SDK 추가 +### 프로젝트에 SDK 추가하기 -Maven을 사용하는 경우 `build.gradle` 파일에 다음 라인을 추가합니다. +Maven을 사용하는 경우, 다음을 `build.gradle` 파일에 추가하시기 바랍니다. ```gradle -implementation 'com.adjust.sdk:adjust-android:4.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' implementation 'com.android.installreferrer:installreferrer:2.2' ``` -앱의 웹뷰 내에 있는 Adjust SDK를 사용하려면 다음과 같은 추가 종속성도 포함시키십시오. +앱의 웹뷰 안에서 Adjust SDK를 사용하고자 하는 경우, 다음의 추가적인 dependency를 추가하시기 바랍니다. ```gradle -implementation 'com.adjust.sdk:adjust-android-webbridge:4.26.2' +implementation 'com.adjust.sdk:adjust-android-webbridge:4.27.0' ``` -또한 Adjust SDK 및 웹뷰 확장자를 JAR 파일로 추가할 수 있으며, 이 파일은 [릴리스 페이지][releases]에서 다운로드할 수 있습니다. +**참고**: 웹뷰 확장에 필요한 Android API의 최소 지원 레벨은 17(Jelley Bean)입니다. + +Adjust SDK와 웹뷰 확장을 JAR 파일로 추가할 수도 있습니다. 이는 Adjust의 [releases page][releases]에서 다운로드하실 수 있습니다. -### Google Play 서비스 추가 +### Google Play Services 추가하기 -2014년 8월 1일 자로 Google Play Store의 앱은 [Google 광고 ID][google-ad-id]를 사용하여 장치를 고유하게 식별해야 합니다. Adjust SDK에서 Google 광고 ID를 사용할 수 있게 하려면 [Google Play 서비스][google-play-services]를 연동해야 합니다. 이를 아직 수행하지 않은 경우, 앱의 `build.gradle` 파일의 종속성 블록에 다음 종속성을 추가하여 Google Play 서비스 라이브러리에 종속성을 추가하십시오. +2014년 8월 1일 이후부터 Google Play Store의 모든 앱은 고유 기기 식별을 위해 반드시 [Google Advertising ID][google-ad-id]를 사용해야 합니다. Adjust SDK에서 Google 광고 ID를 활성화하려면, [Google Play Services][google-play-services]를 반드시 연동해야 합니다. 이 과정을 아직 완료하지 않았다면, Google Play Services 라이브러리에 dependency를 추가하시기 바랍니다. 이는 앱의 `build.gradle` 파일의 `dependencies` 블록에 다음의 dependency를 추가하면 됩니다. ```gradle implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0' ``` -**참고:** Adjust SDK는 Google Play 서비스 라이브러리 내 `play-services-analytics` 부분의 어떤 특정 버전에도 연결되어 있지 않습니다. 가장 최신 또는 필요한 버전을 사용하면 됩니다. +**참고**: Adjust SDK는 Google Play Services 라이브러리의 `play-services-analytics`의 그 어떤 버전과도 연결되어있지 않습니다. 라이브러리에서 최신 버전을 사용하거나 필요한 버전을 사용하시기 바랍니다. +### 권한 추가하기 -### 권한 추가 - -Adjust SDK에는 다음 권한이 필요합니다. Adjust SDK에 필요한 다음 권한이 `AndroidManifest.xml`에 없다면 추가하세요. +Adjust SDK는 다음의 권한을 필요로합니다. 아직 다음의 권한이 보이지 않는다면 이를 `AndroidManifest.xml` 파일에 추가하시기 바랍니다. ```xml - - + + ``` -Google Play Store가 대상이 **아닌** 경우 다음 권한을 추가합니다. +**Google Play Store를 타게팅하지 않는 경우**, 다음의 권한을 반드시 추가해야 합니다. ```xml - + ``` ### Proguard 설정 -Proguard를 사용 중인 경우 다음 행을 Proguard 파일에 추가합니다. +Proguard를 사용하는 경우, Proguard 파일에 다음 줄을 추가하세요. ``` -keep class com.adjust.sdk.** { *; } @@ -153,37 +162,39 @@ Proguard를 사용 중인 경우 다음 행을 Proguard 파일에 추가합니 -keep public class com.android.installreferrer.** { *; } ``` -**앱을 Google Play Store에 게시하지 않은 경우**, 다음 `com.adjust.sdk` 패키지 규칙을 사용합니다. +**Google Play Store**에 앱을 게시하지 않는 경우, 다음의 `com.adjust.sdk` 패키지 규칙을 사용하시기 바랍니다. ``` -keep public class com.adjust.sdk.** { *; } ``` -### 설치 referrer +### 설치 리퍼러 -Adjust는 앱 설치를 소스에 제대로 어트리뷰트하기 위해 **설치 referrer** 관련 정보를 필요로 합니다. 이 정보는 **Google Play Referrer API**를 사용하거나 브로드캐스트 리시버로 **Google Play Store 인텐트**를 잡아 얻을 수 있습니다. +앱 설치를 소스에 올바르게 어트리뷰션하기 위해 Adjust는 **설치 리퍼러**에 관한 정보가 필요합니다. 이는 2가지 방식으로 가능합니다: **Google Play 리퍼러 API***를 사용하거나 **Google Play Store 인텐트**를 브로드캐스트 리시버로 수집. -**중요**: Google Play Referrer API는 보다 안전하고 믿을만한 설치 referrer 정보 획득 방식을 제공하는 동시에 클릭 인젝션으로부터 어트리뷰션 제공자를 보호할 목적으로 Google이 새롭게 도입한 방식입니다. 따라서 앱에서 지원할 것을 **강력히 권장합니다**. Google Play Store 인텐트는 이보다 좀 덜 안전한 설치 referrer 정보 획득 방식입니다. 당분간은 새로운 Google Play referrer API와 공존하지만 향후에는 더 이상 사용하지 않을 예정입니다.. +**중요**: Google은 보다 안전하고 신뢰할 수 있는 방식으로 설치 리퍼러를 획득할 수 있도록 지원하고, 클릭 주입에 대응할 수 있도록 하기 위해 Google Play 리퍼러 API를 도입했습니다. Adjust는 앱에서 이를 반드시 지원하기를 **강력히 권고드립니다**. Google Play 스토어 인텐트는 상대적으로 덜 안전한 설치 리퍼러 획득 방식입니다. 당분간은 새로운 Google Play 리퍼러 API와 함께 사용 가능하지만, 향후 지원이 중단될 예정입니다. -#### Google Play Referrer API +#### Google Play 리퍼러 API -앱에서 Google Play Referrer API를 지원하려면, [프로젝트에 SDK 추가](#qs-add-sdk)에 설명한 대로 확실하게 실행한 다음 `build.gradle` 파일에 다음 라인을 추가했는지 확인합니다. +앱에서 Google Play 리퍼러 API를 지원하려면 [프로젝트에 SDK 추가하기](#qs-add-sdk) 부분을 참조하여 올바르게 수행하고, 다음의 줄을 `build.gradle` 파일에 추가하시기 바랍니다. ``` implementation 'com.android.installreferrer:installreferrer:2.2' ``` -그리고 [Proguard 설정](#qs-proguard)에서 언급한 내용을 살펴보세요. 특히 이 기능에 필요한 부분이 확실히 추가되었는지도 살펴보세요. +[Proguard 설정](#qs-proguard)의 설명을 올바르게 수행하시기 바랍니다. 언급된 모든 규칙을 비롯하여 특히 본 기능을 위해 필요한 규칙을 추가했는지 확인하시기 바랍니다. ``` -keep public class com.android.installreferrer.** { *; } ``` -이 기능은 **Adjust SDK v4.12.0 버전 이상** 사용 시 지원됩니다. +**Adjust SDK v4.12.0 이상 버전**을 사용 중인 경우 이 기능이 지원됩니다. #### Google Play Store 인텐트 -브로드캐스트 리시버로 Google Play Store `INSTALL_REFERRER` 인텐트를 캡쳐해야 합니다. `INSTALL_REFERRER` 수신을 위해 **고유 브로드캐스트 리시버를 사용하고 있지 않다면**, `AndroidManifest.xml` 내 `application` 태그에 다음과 같이 `receiver` 태그를 추가하세요. +**참고**: Google은 [발표](https://android-developers.googleblog.com/2019/11/still-using-installbroadcast-switch-to.html)를 통해 2021년 3월 1일자로 리퍼러 정보 전달에 사용되는 `INSTALL_REFERRER` 인텐트 사용에 대한 지원을 중단한다고 발표했습니다. 만약 리퍼러 정보를 얻기 위해 해당 방식을 사용하고 있다면, [Google Play 리퍼러 API](#qs-gpr-api) 방식으로 전환하시기 바랍니다. + +브로드캐스트 리시버를 통해 Google Play Store `INSTALL_REFERRER` 인텐트를 캡쳐할 수 있습니다. `INSTALL_REFERRER` 인텐트를 수신하기 위한 목적으로 **자체 브로드캐스트 리시버를 사용하고 있지 않은 경우**, `AndroidManifest.xml` 내 `application` 태그에 다음의 `receiver` 태그를 추가하시기 바랍니다. ```xml ``` -Adjust는 이 브로드캐스트 리시버를 사용하여 설치 referrer를 검색 후 백엔드에 전달합니다. +Adjust는 본 브로드캐스트 리시버를 사용하여 설치 리퍼러를 조회하고 백엔드로 전송합니다. -`INSTALL_REFERRER` 인텐트 수신을 위해 다른 브로드캐스트 리시버를 사용 중이라면 [이 지침][referrer]에 따라 브로드캐스트 리시버를 추가하세요. +`INSTALL_REFERRER` 인텐트에 다른 브로드캐스트 리시버를 사용하고 있다면, Adjust 브로드캐스트 리시버에 메시지를 적절하게 보낼 수 있도록 본 [리퍼러 가이드]를 참조하시기 바랍니다. -#### Huawei Referrer API +#### Huawei 리퍼러 API -v4.21.1부터 Adjust SDK는 Huawei App Gallery 버전 10.4 이상이 설치된 화웨이 기기에 설치 트래킹을 지원합니다. Huawei Referrer API 사용을 시작하기 위해 추가적인 연동 단계가 필요하지 않습니다. +Adjust SDK 4.21.1 버전부터는 Huawei 앱 갤러리 버전이 10.4 이상인 Huawei 기기에 설치 추적을 지원합니다. Huawei 리퍼러 API를 사용하기 위해 추가적인 연동 단계를 수행하지 않아도 됩니다. -### 앱에 SDK 연동 +### 앱에 SDK 연동하기 -먼저 기본 세션 트래킹을 설정합니다. +우선 기본 세션 트래킹 설정에 관해 다루도록 하겠습니다. ### 기본 설정 -SDK를 네이티브 앱에 통합하는 경우 [네이티브 앱 SDK](#qs-basic-setup-native) 관련 지침을 따르십시오. 웹뷰 내에서 사용하기 위해 SDK를 통합하는 경우, 아래 [웹뷰 SDK](#qs-basic-setup-web) 관련 지침을 따르십시오. +네이티브 앱에 SDK를 연동하는 경우 [네티이브 앱 SDK](#qs-basic-setup-native)를 참조하시기 바랍니다. 웹뷰 내 사용을 위해 SDK를 연동하는 경우 아래의 [웹뷰 SDK](#qs-basic-setup-web)를 참조하시기 바랍니다. #### 네이티브 앱 SDK -전역 android [응용 프로그램][android-application] 클래스를 사용하여 SDK를 초기화하는 것이 좋습니다. 앱에 이 클래스가 아직 없는 경우 다음 단계를 수행하십시오. +Adjust는 SDK 초기화를 위해 글로벌 Android [어플리케이션][android-application] 클래스를 사용하는 것을 추천합니다. 앱에 아직 없다면 다음의 단계를 수행하시기 바랍니다: -- `Application`을 확장하는 클래스를 만듭니다. -- 앱의 `AndroidManifest.xml` 파일을 열고 `` 요소를 찾습니다. -- `android:name` 특성을 추가하고 새 응용 프로그램 클래스 이름으로 설정합니다. - - 앱 예제에서는 이름이 `GlobalApplication`인 `Application` 클래스를 사용합니다. 따라서 매니페스트 파일은 다음과 같이 구성됩니다. +- `Application`을 확장하는 클래스를 생성합니다. +- `AndroidManifest.xml` 파일을 열고, `` 요소를 찾습니다. +- `android:name` 어트리뷰션을 추가하고, 신규 어플리케이션 클래스의 이름으로 설정합니다. + Adjust의 예시 앱에서는 `GlobalApplication`라고 명명된 `Application` 클래스를 사용합니다. 이에 따라 매니페스트 파일을 다음과 같이 구성합니다. ```xml - + + ``` -- `Application` 클래스에서 `onCreate` 메서드를 추가하거나 만듭니다. 그리고 다음 코드를 추가하여 Adjust SDK를 초기화합니다. +- `Application` 클래스에서, `onCreate` 메서드를 찾거나 생성합니다. 다음의 코드를 추가하여 Adjust SDK를 초기화합니다. ```java import com.adjust.sdk.Adjust; @@ -240,7 +250,7 @@ SDK를 네이티브 앱에 통합하는 경우 [네이티브 앱 SDK](#qs-basic- public void onCreate() { super.onCreate(); - String appToken = "{YourAppToken}"; + string appToken = "{YourAppToken}"; String environment = AdjustConfig.ENVIRONMENT_SANDBOX; AdjustConfig config = new AdjustConfig(this, appToken, environment); Adjust.onCreate(config); @@ -248,32 +258,35 @@ SDK를 네이티브 앱에 통합하는 경우 [네이티브 앱 SDK](#qs-basic- } ``` - `{YourAppToken}`을 앱 토큰으로 대체합니다. 앱 토큰은 [대시보드][adjust.com]에서 찾을 수 있습니다. +'{YourAppToken}'을 사용 중인 앱 토큰으로 교체한 다음, [Dashboard]에서 결과를 확인해 보세요. - 다음으로 `environment`를 샌드박스 모드나 프로덕션 모드로 설정해야 합니다. +이후 `environment`를 샌드박스나 기타 프로덕션 모드로 설정해야 합니다. - ```java - String environment = AdjustConfig.ENVIRONMENT_SANDBOX; - String environment = AdjustConfig.ENVIRONMENT_PRODUCTION; - ``` +```java +String environment = AdjustConfig.ENVIRONMENT_SANDBOX; +String environment = AdjustConfig.ENVIRONMENT_PRODUCTION; +``` -**중요:** 이 값은 앱을 테스트하는 경우에만 `AdjustConfig.ENVIRONMENT_SANDBOX`로 설정해야 합니다. 앱을 게시하기 전에 environment를 `AdjustConfig.ENVIRONMENT_PRODUCTION`으로 설정해야 합니다. 개발 및 테스트를 다시 시작할 경우에는 `AdjustConfig.ENVIRONMENT_SANDBOX`로 다시 설정하십시오. +**중요:** 이 값은 앱을 테스트하는 상황에서만`AdjustConfig.ENVIRONMENT_SANDBOX`로 설정해야 합니다. 앱을 퍼블리시하기 전, 환경을 `AdjustConfig.ENVIRONMENT_PRODUCTION`으로 설정하시기 바랍니다. 앱 개발 및 테스트를 새로 시작하는 경우, 환경을 다시 `AdjustConfig.ENVIRONMENT_SANDBOX`로 설정하시기 바랍니다. -이 environment는 실제 트래픽과 테스트 장치의 테스트 트래픽을 구별하기 위해 사용합니다. 이 단계는 매우 중요하므로 앱에 제대로 구현했는지 반드시 확인하세요. +Adjust는 테스트 기기로 인해 발생하는 테스트 트래픽과 실제 트래픽을 구분하기 위해 이와 같이 각기 다른 환경을 사용하므로, 반드시 상황에 알맞은 환경을 설정하시기 바랍니다. #### 웹뷰 SDK -사용 중인 `WebView` 개체에 대한 참조를 획득한 후, -- `webView.getSettings().setJavaScriptEnabled(true)`를 호출하고 웹뷰에서 자바스크립트를 활성화합니다. -- `AdjustBridge.registerAndGetInstance(getApplication(), webview)`를 호출하여 `AdjustBridgeInstance`의 기본 인스턴스를 시작합니다. -- 이렇게 하면 Adjust 브리지가 웹뷰의 자바스크립트 인터페이스로 등록됩니다. +`WebView` 객체에 대한 레퍼런스를 획득한 이후: -단계 수행 후 작업이 다음과 같이 보여야 합니다. +- `webView.getSettings().setJavaScriptEnabled(true)`를 호출하여 웹뷰에서 자바스크립트를 활성화합니다. +- `AdjustBridgeInstance`의 기본값 인스턴스를 시작합니다. 이는 `AdjustBridge.registerAndGetInstance(getApplication(), webview)`를 호출하면 됩니다. +- 이는 또한 Adjust 브릿지를 자바스크립트 인터페이스로서 웹뷰에 등록하게 됩니다. +- 필요한 경우 `AdjustBridge.setWebView()`를 호출하여 새로운 `WebView`를 설정합니다. +- `AdjustBridge.unregister()`를 호출하여 `AdjustBridgeInstance`와 `WebView`의 등록을 취소합니다. + +위 단계를 모두 완료하면 액티비티는 다음과 같아야 합니다. ```java public class MainActivity extends Activity { @Override - protected void onCreate(Bundle savedInstanceState) { + protected void onCreate(Bundle savedInstanceState) \{ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @@ -289,12 +302,19 @@ public class MainActivity extends Activity { e.printStackTrace(); } } + + @Override + protected void onDestroy() { + AdjustBridge.unregister(); + + super.onDestroy(); + } } ``` -이 단계를 완료하면 Adjust 브리지가 앱에 성공적으로 추가됩니다. 웹뷰에서 로드되는 사용자 페이지와 Adjust의 네이티브 안드로이드 SDK간 통신을 위해 이제 자바스크립트 브리지가 활성화됩니다. +본 단계를 완료하면 Adjust 브릿지가 앱에 성공적으로 추가됩니다. 이제 Javascript 브릿지가 활성화되어 Adjust의 네티이브 Android SDK와 페이지 간에 커뮤니케이션이 가능하며, 이는 웹뷰에 로딩됩니다. -HTML 파일에서 자산 폴더의 루트에 위치해 있는 Adjust 자바스크립트 파일을 가져옵니다. HTML 파일이 있으면 다음과 같이 가져옵니다. +asset 폴더에 있는 Adjust Javascript트 파일을 HTML 파일에 가져오시기 바랍니다. HTML 파일도 해당 폴더에 있는 경우 다음과 같이 가져오시기 바랍니다. ```html @@ -303,7 +323,7 @@ HTML 파일에서 자산 폴더의 루트에 위치해 있는 Adjust 자바스 ``` -자바스크립트 파일에 참조를 추가했으면 이를 HTML 파일에서 사용하여 Adjust SDK를 초기화합니다. +Javascript 파일에 레퍼런스를 추가한 뒤, HTML 파일에서 이를 사용하여 Adjust SDK를 초기화하시기 바랍니다. ```js let yourAppToken = '{YourAppToken}'; @@ -313,30 +333,29 @@ let adjustConfig = new AdjustConfig(yourAppToken, environment); Adjust.onCreate(adjustConfig); ``` -`{YourAppToken}`을 앱 토큰으로 대체합니다. 앱 토큰은 [대시보드][dashboard]에서 찾을 수 있습니다. +'{YourAppToken}'을 사용 중인 앱 토큰으로 교체한 다음, [Dashboard]에서 결과를 확인해 보세요. -앱을 테스트에 사용할지 아니면 프로덕션에 사용할지에 따라 `environment`를 다음 값 중 하나로 설정해야 합니다. +이후 현재 상황이 테스트 상황인지 프로덕션 모드인지에 따라 `environment`를 이에 상응하는 값으로 설정합니다. ```js let environment = AdjustConfig.EnvironmentSandbox; let environment = AdjustConfig.EnvironmentProduction; ``` -**중요**: 이 값은 앱을 테스트하는 경우에만 `AdjustConfig.EnvironmentSandbox`로 설정해야 합니다. 앱을 게시하기 전에 environment를 `AdjustConfig.EnvironmentProduction`으로 설정해야 합니다. 개발 및 테스트를 다시 시작할 경우에는 `AdjustConfig.EnvironmentSandbox`로 다시 설정하십시오. +**중요:** 앱을 테스트하는 경우에만 값을 `AdjustConfig.EnvironmentSandbox`로 설정하시기 바랍니다. 앱을 게시하기 전, 환경을 `AdjustConfig.EnvironmentProduction`로 설정하시기 바랍니다. 앱 개발 및 테스트를 새로 시작한다면 `AdjustConfig.EnvironmentSandbox`로 다시 설정하시기 바랍니다. -이 environment는 실제 트래픽과 테스트 장치의 테스트 트래픽을 구별하기 위해 사용합니다. 이 값을 항상 유의미하게 유지해야 합니다! +테스트 기기로 인해 발생하는 테스트 트래픽과 실제 트래픽을 구분하기 위해 다른 환경모드를 사용하고 있음으로, 상황에 알맞은 설정을 적용하시기 바랍니다. -### 세션 추적 +### 세션 트래킹 -**참고: 이 단계는 매우 중요합니다. 앱에 제대로 구현했는지 반드시 확인하세요**. 구현하게 되면 Adjust SDK가 제공하는 세션 추적을 앱에서 올바르게 활성화할 수 있습니다. +**중요**: 본 단계는 **매우 중요합니다**. **앱에서 다음의 사항을 올바르게 수행**하시기 바랍니다. 본 단계를 올바르게 완료해야만 Adjust SDK가 앱에서의 세션을 트래킹할 수 있습니다. #### API 레벨 14 이상 -- `ActivityLifecycleCallbacks` 인터페이스를 구현하는 비공개 클래스를 추가합니다. 이 인터페이스에 액세스할 권한이 없다면, 앱의 대상 Android api 레벨이 14보다 낮기 때문입니다. 이러한 [지침](#qs-session-tracking-api-9)에 따라 각 작업을 수동으로 업데이트해야 합니다. 이전에 앱의 각 작업에 대한 `Adjust.onResume` 및 `Adjust.onPause` 호출이 있었을 경우 각 호출을 제거해야 합니다. - -- `onActivityResumed(Activity activity)` 메서드를 편집하고 `Adjust.onResume()`에 호출을 추가합니다. -- `onActivityPaused(Activity activity)` 메서드를 편집하고 `Adjust.onPause()`에 호출을 추가합니다. -- Adjust SDK가 구성된 `onCreate()` 메서드를 추가하고 `registerActivityLifecycleCallbacks` 호출을 이전에 만든 `ActivityLifecycleCallbacks` 클래스의 인스턴스와 함께 추가합니다. +- `ActivityLifecycleCallbacks` 인터페이스를 시행하는 비공개 클래스를 추가합니다. 본 인터페이스에 액세스할 수 없다면 앱이 타게팅하는 Android API 레벨이 14 이하인 것입니다. 다음의 [설명](#qs-session-tracking-api-9)을 참조하여 각 액티비티를 수동으로 업데이트하시기 바랍니다. `Adjust.onResume`와 `Adjust.onPause` 콜이 앱의 액티비티에 각각 있다면, 이를 삭제해야 합니다. +- `onActivityResumed(Activity activity)` 메서드를 수정하고, `Adjust.onResume()`에 콜을 추가합니다. 그리고 +`onActivityPaused(Activity activity)` 메서드를 수정하고, `Adjust.onPause()`에 콜을 추가합니다. +- `onCreate()` 메서드를 Adjust SDK에 추가하고, `registerActivityLifecycleCallbacks`를 생성된 `ActivityLifecycleCallbacks` 클래스의 인스턴스와 전송합니다. ```java import com.adjust.sdk.Adjust; @@ -347,7 +366,7 @@ let environment = AdjustConfig.EnvironmentProduction; public void onCreate() { super.onCreate(); - String appToken = "{YourAppToken}"; + string appToken = "{YourAppToken}"; String environment = AdjustConfig.ENVIRONMENT_SANDBOX; AdjustConfig config = new AdjustConfig(this, appToken, environment); Adjust.onCreate(config); @@ -371,20 +390,20 @@ let environment = AdjustConfig.EnvironmentProduction; } ``` -#### API 레벨 9-13 +#### API 9~13 레벨 -앱 `minSdkVersion`이 `9`와 `13` 사이일 경우, 장기 연동 절차를 간소화하기 위해 `14` 이상으로의 업그레이드를 고려해 주십시오. 주요 버전의 최신 시장 점유율을 확인하려면 안드로이드 [대시보드][android-dashboard]를 참조하십시오. +gradle의 앱 `minSdkVersion`이 `9`에서 `13` 사이인 경우 연동 과정의 간소화를 위해 이를 최소 `14`로 업데이트하시기 바랍니다. 공식 Android [대시보드][android-dashboard]에서 주요 버전의 최신 시장 점유율 정보를 확인하시기 바랍니다. -올바른 세션 추적을 위해서는 작업 재개 혹은 중지가 있을 때마다 Adjust SDK 메서드 몇 가지를 호출해야 합니다. **이 작업을 위해서는 앱 내 각 작업 시 다음 단계를 수행해야 합니다**. +세션 트래킹을 적절하게 수행하기 위해, 액티비티가 재개되거나 중단된 경우 Adjust SDK 메서드가 호출됩니다. (이렇게 하지 않으면 SDK가 세션 시작과 종료를 놓칠 수 있음.) 이를 위해 앱의 **각 액티비티마다** 다음의 단계를 수행하시기 바랍니다. -- 작업 `onResume` 메소드에서 `Adjust.onResume()` 메소드를 호출합니다. 필요 시에는 이 메소드를 만듭니다. -- 작업 `onPause` 메소드에서 `Adjust.onPause()` 메소드를 호출합니다. 필요 시에는 이 메소드를 만듭니다. +- 액티비티의 `onResume` 메서드에서 `Adjust.onResume()`를 호출합니다. 필요한 경우 본 메서드를 생성합니다. +- 액티비티의 `onPause` 메서드에서 `Adjust.onPause()`를 호출합니다. 필요한 경우 본 메서드를 생성합니다. -단계 수행 후 작업이 다음과 같이 보여야 합니다. +위 단계를 모두 완료하면 액티비티는 다음과 같아야 합니다. ```java - import com.adjust.sdk.Adjust; -// ... +import com.adjust.sdk.Adjust; + public class YourActivity extends Activity { protected void onResume() { super.onResume(); @@ -394,24 +413,23 @@ public class YourActivity extends Activity { super.onPause(); Adjust.onPause(); } - // ... } ``` -**모든** 앱 액티비티에서 이같은 단계를 반복해야 합니다. 앞으로 새 작업을 생성할 때마다 이러한 단계를 반복하십시오. 코딩 유형에 따라 액티비티 전체에서 이를 공통 슈퍼클래스로 설정해야 할 수도 있습니다. +앱에서 **각 액티비티에 대하여** 위 단계를 반복하시기 바랍니다. 새로운 액티비티 생성 시, 위 단계를 반드시 반복하시기 바랍니다. 코딩 스타일에 따라, 모든 액티비티에 대해 공통 슈퍼클래스에서 본 단계를 이행할 수도 있습니다. ### SDK 서명 -계정 매니저가 Adjust SDK 서명을 활성화해야 합니다. 이 기능을 사용해 보고자 할 경우 Adjust 지원 팀(support@adjust.com)으로 연락해 주십시오. +계정 관리자는 애드저스트 SDK 서명을 활성화해야 합니다. 이 기능의 사용에 관심이 있는 경우 Adjust 고객 지원팀(support@adjust.com)에 문의하시기 바랍니다. -SDK 서명이 계정에서 이미 사용 가능 상태로 Adjust 대시보드에서 App Secret에 액세스할 수 있는 상태라면, 아래 메소드를 사용하여 SDK 서명을 앱에 연동하십시오. +SDK 서명이 이미 계정에서 활성화되어 있으며 Adjust 대시보드의 App Secret에 액세스할 수 있는 경우, 아래 방법을 사용하여 SDK 서명을 앱에 연동하세요. -Config 인스턴스에서 `setAppSecret`를 호출하면 App Secret이 설정됩니다. +앱 시크릿은 설정 인스턴스에서 `setAppSecret`를 호출하여 설정됩니다. @@ -426,7 +444,7 @@ Adjust.onCreate(config); @@ -439,16 +457,16 @@ Adjust.onCreate(adjustConfig); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -### Adjust 로그 기록 +### Adjust 로그 -다음 파라미터 중 하나를 사용하여 Config 인스턴스에서 `setLogLevel`을 호출하면 테스트에 표시되는 로그의 양을 늘리거나 줄일 수 있습니다. +다음 파라미터 중 하나를 통해 config 인스턴스에서 `setLogLevel`을 호출하여 테스트하는 동안 조회할 로그의 양을 늘리거나 줄일 수 있습니다.
@@ -467,7 +485,7 @@ config.setLogLevel(LogLevel.SUPRESS); // disable all logs @@ -484,14 +502,14 @@ adjustConfig.setLogLevel(AdjustConfig.LogLevelSuppress); // disable all logs ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -로그 출력을 모두 비활성화하려면 억제할 로그 레벨을 설정하고 config 개체에 대한 생성자를 사용합니다(이 개체는 억제 로그 레벨에 대한 지원 필요 여부를 나타내는 부울 파라미터를 가집니다). +로그 출력을 모두 비활성화하려면, 로그 레벨을 'suppress'로 설정하고, config 객체에 생성자를 사용하시기 바랍니다. (그러면 suppress 로그 수준의 지원 여부를 나타내는 부울 자료 파라미터가 열립니다.)
@@ -506,7 +524,7 @@ Adjust.onCreate(config); @@ -519,23 +537,21 @@ Adjust.onCreate(adjustConfig); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
- -### 앱 빌드 + -안드로이드 앱을 작성하고 실행합니다. `LogCat` 뷰어에서 `tag:Adjust` 필터를 설정하여 다른 모든 로그를 숨길 수 있습니다. 앱이 시작된 후에 다음 Adjust 로그가 표시됩니다. `Install tracked`. +### 앱 빌드하기 +Android 앱을 빌드하고 실행합니다. `LogCat` 뷰어에서 필터를 `tag:Adjust`로 설정하여 그 외 모든 로그를 숨깁니다. 앱이 실행된 이후 다음의 Adjust 로그가 나타나야 합니다:`Install tracked` ## 딥링크 ### 딥링크 개요 -URL에서 앱으로 딥링크를 거는 옵션이 있는 Adjust 트래커 URL을 사용하고 있다면, 딥링크 URL과 그 내용 관련 정보를 얻을 가능성이 있습니다. 해당 URL 클릭 시 사용자가 이미 앱을 설치한 상태(기본 딥링크)일 수도, 앱을 설치하지 않은 상태(지연된 딥링크)일 수도 있습니다. 기본 딥링크 상황에서 안드로이드는 딥링크 내용에 관한 정보 인출을 기본 지원합니다. 안드로이드는 지연된 딥링크를 기본 지원하지 않지만, Adjust SDK는 지연된 딥링크 정보를 인출하는 메커니즘을 제공합니다. - -### 기본 딥링크 시나리오 +Adjust 트래커 URL에 딥링크를 활성화한 경우, 딥링크 URL과 그 콘텐츠에 대한 정보를 받아볼 수 있습니다. 유저는 앱이 기기에 설치되었거나(표준 딥링크 시나리오) 앱이 설치되지 않은 경우(디퍼드 딥링크 시나리오)에 관계없이 URL과 모두 상호작용할 수 있습니다. 표준 딥링크 시나리오에서 Android 플랫폼은 딥링크 콘텐츠에 관한 정보를 수신할 수 있는 가능성을 네이티브로 제공합니다. Android 플랫폼은 디퍼드 딥링크 시나리오를 자동으로 지원하지 않습니다. 이 경우, Adjust SDK는 딥링크 콘텐츠의 정보를 얻기 위해 필요한 메커니즘을 제공합니다. -사용자가 앱을 설치하고 `deep_link` 파라미터가 들어간 Adjust 트래커 URL을 클릭 시 런칭하도록 하려 할 경우, 앱에 딥링크를 활성화해야 합니다. 이는 원하는 고유 스킴명 (scheme name) 을 선택할 때 이루어집니다. 사용자가 `AndroidManifest.xml` 파일에서 트래커 URL을 선택한 후 앱을 열면 실행하려는 작업에 이를 할당하게 됩니다. `intent-filter` 섹션을 매니페스트 파일 내 원하는 작업 정의에 추가하고 `android:scheme` 어트리뷰션값을 원하는 스킴명과 함께 배정하면 됩니다. +### 표준 딥링크 시나리오 +이미 앱을 설치한 유저에 대하여 `deep_link` 파라미터가 포함된 Adjust 트래커 URL과 인게이지한 이후 앱이 실행되게 하고 싶다면, 앱에서 딥링크를 활성화하시기 바랍니다. 이는 원하는 **고유의 스킴 이름***을 선택하여 수행할 수 있습니다. `AndroidManifest.xml` 파일에서 유저가 트래커 URL을 클릭한 이후 앱이 열릴 때 실행시키고 싶은 활동에 이를 부여합니다. 매니페스트 파일에 `intent-filter` 섹션을 원하는 활동 정의에 추가하고, 원하는 스킴 이름과 함께 `android:scheme` 속성 값을 부여합니다. ```xml ``` -이 설정이 끝나고 트래커 URL 클릭 시 앱이 런칭되도록 하려면, 배정한 스킴명을 Adjust 트래커 URL의 `deep_link` 파라미터에 사용해야 합니다. 딥링크에 정보가 추가되지 않은 트래커 URL은 아래와 같이 보일 것입니다. +트래커 URL이 클릭 된 이후 앱이 실행되도록 하고 싶다면, Adjust 트래커 URL의 `deep_link` 파라미터에서 부여한 스킴 이름을 사용합니다. 딥링크에 별도의 정보가 추가되지 않은 트래커 URL은 아래와 같이 나타납니다. ``` https://app.adjust.com/abc123?deep_link=adjustExample%3A%2F%2F ``` - -URL 내 `deep_link` 파라미터 값은 **URL 인코딩이 되어야 한다**는 사실을 명심하세요. -앱이 위와 같이 설정된 상황에서 이 트래커 URL을 클릭하면 `MainActivity` 인텐트와 함께 앱이 런칭됩니다. `MainActivity` 클래스에서 `deep_link` 파라미터 내용이 자동으로 제공됩니다. URL에서 인코딩이 된 상태라 해도 내용이 전달된 후에는 **인코딩이 이루어지지 않습니다**. +URL에서 `deep_link` 파라미터를 **반드시 url 인코딩**해야 한다는 점을 기억하시기 바랍니다. -`AndroidManifest.xml` 파일 내 `android:launchMode` 작업 설정에 따라 `deep_link` 파라미터 내용 정보가 작업 파일 내 적절한 위치로 전달됩니다. `android:launchMode` 어트리뷰션 값에 대한 더 자세한 정보는 [안드로이드 문서][android-launch-modes]에서 확인하세요. +앱이 위와 같이 설정되고 나면 유저가 트래커 URL을 클릭할 때 앱이 `MainActivity` 인텐트와 함께 실행되게 됩니다. `MainActivity` 클래스에서는 자동으로 `deep_link` 파라미터 콘텐츠에 관한 정보를 수신할 수 있습니다. 콘텐츠를 수신하고 나면 이는 (URL에서는 인코딩되었을지라도) 인코딩되지 **않습니다**. -딥링크 내용 정보는 `Intent` 개체를 통해 원하는 작업 내 `onCreate` 메서드 또는 `onNewIntent` 메서드로 전달됩니다. 앱을 런칭하고 두 개 메서드 중 하나가 촉발되면 실제 딥링크가 클릭한 URL 내 `deep_link` 파라미터로 전달되게 할 수 있습니다. 이렇게 하면 이 정보를 사용하여 앱에서 추가적 로직을 수행할 수 있게 됩니다. +`AndroidManifest.xml` 파일 내에서의 `android:launchMode` 활동 설정은 활동 파일 내에서 `deep_link` 파라미터의 콘텐츠 전송 위치를 결정할 것입니다. `android:launchMode` 속성의 가능한 값에 대한 자세한 정보는 Android의 [공식 문서][android-launch-modes]를 참조하시기 바랍니다. -딥링크 내용은 이들 두 개 메서드에서 다음과 같이 추출할 수 있습니다. +원하는 활동 내의 딥링크 콘텐츠 정보는 `Intent` 객체를 통해 `onCreate` 또는 `onNewIntent` 메서드로 전달됩니다. 앱을 실행하고 이러한 메서드 중 하나를 트리거하면, 클릭 URL 안의 `deep_link` 파라미터에서 전송된 실제 딥링크를 수신할 수 있습니다. 이 정보를 사용하여 앱에서 추가적인 로직을 수행할 수 있습니다. + +딥링크 콘텐츠는 위의 두 가지 메서드 중 하나를 사용하여 다음과 같이 내보내기 할 수 있습니다. ```java @Override -protected void onCreate(Bundle savedInstanceState) { +protected void onCreate(Bundle savedInstanceState) \{ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = getIntent(); Uri data = intent.getData(); - // data.toString() -> This is your deep_link parameter value. + // data.toString() -> deep_link 파라미터 값입니다. } ``` @@ -592,24 +608,24 @@ protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Uri data = intent.getData(); - // data.toString() -> This is your deep_link parameter value. + // data.toString() -> deep_link 파라미터 값입니다. } ``` -### 지연된 딥링크 시나리오 +### 디퍼드 딥링크 시나리오 -지연된 딥링크는 사용자가 `deep_link` 파라미터가 들어 있는 Adjust 트래커 URL을 클릭했으나, 그 시점에 장치에 앱을 설치하지 않은 경우 발생합니다. 클릭 후 사용자는 Play Store로 재이동하여 앱을 다운로드하게 됩니다. 링크를 처음 연 후 `deep_link` 파라미터 내용이 앱으로 전달됩니다. +디퍼드 딥링크 시나리오는 유저가 `deep_link` 파라미터를 포함한 Adjust의 트래커 URL을 클릭하였으나 클릭한 시점에 기기에 앱이 설치되어있지 않은 경우에 발생합니다. 이 경우 유저가 URL을 클릭하면 앱을 설치할 수 있도록 Play Store로 리디렉션됩니다. 앱을 최초 실행 시 `deep_link` 파라미터 콘텐츠가 앱으로 전달됩니다. -Adjust SDK는 기본적으로 지연된 딥링크를 엽니다. 추가 구성은 필요하지 않습니다. +Adjust SDK는 기본값 설정에 따라 디퍼드 딥링크를 엽니다. 따라서 별도의 설정이 필요 없습니다. -#### 지연된 딥링크 콜백 +#### 디퍼드 딥링크 콜백 -Adjust SDK가 지연된 딥링크를 열도록 할지를 제어하려면 config 개체의 콜백 메서드로 이를 수행할 수 있습니다. +Adjust SDk가 디퍼드 딥링크를 여는 것을 통제하고 싶다면 config 객체에서 콜백 메서드를 사용할 수 있습니다.
@@ -634,15 +650,14 @@ config.setOnDeeplinkResponseListener(new OnDeeplinkResponseListener() { Adjust.onCreate(config); ``` -Adjust SDK가 백엔드에서 딥링크 내용 정보를 수신하면 그 내용이 리스너에 전달되며 `boolean` 리턴값을 요청합니다. 리턴값은 (기본 딥링크에서와 마찬가지로) Adjust SDK가 스킴명을 배정한 작업을 딥링크에서 런칭할 것인지 여부를 표시합니다. - -`true`를 반환하면 작업이 실행되어 [기본 딥링크 시나리오](#dl-standard)챕터에서 설명한 시나리오를 실행합니다. SDK가 작업을 런칭하기를 원하지 않는다면, 리스너에서 `false`를 리턴하여 딥링크 내용을 토대로 앱에서 다음 작업을 어떻게 실행할 지 스스로 정할 수 있습니다. +Adjust SDK가 백엔드로부터 딥링크 정보를 수신하면, SDK는 이 내용을 수신기를 통해 전송하고 사용자로부터 `boolean` 값을 반환받을 것을 기대합니다. 반환 값은 Adjust SDK가 딥링크에서 스킴 이름이 부여된 활동을 실행해야 할지 말아야 할지에 대한 사용자의 결정을 보여줍니다. (표준 딥링크 시나리오와 유사) +즉, 반환 값이 `true`인 경우 Adjust는 해당 활동을 실행하고, [표준 딥링크 시나리오](#dl-standard) 챕터에서 명시된 시나리오를 트리거합니다. SDK가 해당 활동을 실행하는 것을 원하지 않는다면 수신기에서 `false` 값을 반환하고, (딥링크 콘텐츠에 따라) 앱에서 다음에 무엇을 해야 할지 결정하시기 바랍니다. @@ -655,8 +670,7 @@ adjustConfig.setDeferredDeeplinkCallback(function (deeplink) {}); Adjust.onCreate(adjustConfig); ``` -이러한 지연된 딥링크 시나리오에서는 config 개체에 설정할 수 있는 추가 설정이 하나 있습니다. Adjust SDK가 지연된 딥링크 정보를 얻으면 SDK가 URL을 열도록 할지 선택할 수 있습니다. Config 개체에서 `setOpenDeferredDeeplink`메서드를 호출하여 이 옵션을 설정합니다. - +이 디퍼드 딥링크 시나리오에서는 cofig 객체에서 설정할 수 있는 추가적인 설정이 있습니다. Adjust SDK가 디퍼드 딥링크 정보를 획득하면, SDK가 이 URL을 열도록 할지 선택할 수 있습니다. cofig 객체에서 `setOpenDeferredDeeplink` 메서드를 호출하여 이 옵션을 설정할 수 있습니다. ```js // ... @@ -671,25 +685,24 @@ Adjust.start(adjustConfig); ``` -콜백을 설정하지 않으면 **Adjust SDK가 기본적으로 항상 URL 런칭을 시도하게 됩니다**. - +콜백을 설정하지 않으면 **Adjust는 기본값 설정에 따라 항상 URL 실행을 시도할 것입니다.** -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ ### 딥링크를 통한 리어트리뷰션 -Adjust를 통해 딥링크를 사용하여 재관여 캠페인을 실행할 수 있습니다. 더 자세한 정보는 [공식 문서][reattribution-with-deeplinks]에서 확인하십시오. +Adjust는 딥링크를 통해 리인게이지먼트 캠페인을 집행할 수 있도록 지원합니다. 자세한 정보는 Adjust의 [공식 문서][reattribution-with-deeplinks]를 참조하시기 바랍니다. -이 기능을 사용 중이라면, 사용자를 올바로 리어트리뷰트하기 위해 앱에서 호출을 한 가지 더 수행해야 합니다. +이 기능을 사용하려면, 앱에서 Adjust SDK로 추가적인 콜을 수행하여 Adjust가 적절하게 유저를 리어트리뷰션할 수 있도록 해야 합니다. -앱에서 딥링크 내용을 수신했다면, `Adjust.appWillOpenUrl(Uri, Context)` 메서드 호출을 추가하세요. 이 호출이 이루어지면 Adjust SDK는 딥링크 내에 새로운 어트리뷰션 정보가 있는지 확인하고, 새 정보가 있으면 Adjust 백엔드로 송신합니다. 딥링크 정보가 담긴 Adjust 트래커 URL을 클릭한 사용자를 리어트리뷰트해야 할 경우 앱에서 해당 사용자의 새 어트리뷰션 정보로 [어트리뷰션 콜백](#af-attribution-callback)이 촉발되는 것을 확인할 수 있습니다. +앱에서 딥링크 콘텐츠를 수신했으면 `Adjust.appWillOpenUrl(Uri, Context)` 메서드에 콜을 추가합니다. 이 콜을 수행함으로써 Adjust SDK는 Adjust 백엔드로 정보를 전송하여 딥링크 내에 새로운 어트리뷰션 정보가 있는지 확인할 수 있습니다. 딥링크 콘텐츠를 포함하는 Adjust 트래커 URL의 클릭에 유저가 리어트리뷰션된 경우, 앱에서는 해당 유저에 대해 새로운 어트리뷰션 정보와 함께 [어트리뷰션 콜백](#af-attribution-callback)이 트리거 됩니다. -`Adjust.appWillOpenUrl(Uri, Context)` 호출은 다음과 같이 이루어집니다. +`Adjust.appWillOpenUrl(Uri, Context)`는 다음과 같이 나타납니다. ```java @Override -protected void onCreate(Bundle savedInstanceState) { +protected void onCreate(Bundle savedInstanceState) \{ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); @@ -709,9 +722,9 @@ protected void onNewIntent(Intent intent) { } ``` -**참고**: `Adjust.appWillOpenUrl (Uri)` 메소드는 **Android SDK v4.14.0** 기준으로 사용되지 않게 되었습니다. 따라서 `Adjust.appWillOpenUrl (Uri, Context)` 메서드를 사용하시기 바랍니다. +**참고**: `Adjust.appWillOpenUrl(Uri)` 메서드는 Android SDK v4.14.0부터 **지원 중단**되었습니다. 따라서, `Adjust.appWillOpenUrl(Uri, Context)` 메서드를 대신 사용하시기 바랍니다. -**웹뷰 참고 사항**: 다음과 같은 자바스크립트의 함수 `Adjust.appWillOpenUrl`을 사용하여 웹뷰에서 이러한 호출을 할 수 있습니다. +**웹뷰 참고**: 웹뷰에서도 본 콜을 자바스크립트의 `Adjust.appWillOpenUrl` 기능을 통해 다음과 같이 수행할 수 있습니다. ```js Adjust.appWillOpenUrl(deeplinkUrl); @@ -719,14 +732,14 @@ Adjust.appWillOpenUrl(deeplinkUrl); ## 이벤트 추적 -### 이벤트 추적 +### 이벤트 트래킹 -Adjust를 사용하여 앱의 모든 이벤트를 추적할 수 있습니다. 버튼의 모든 탭을 추적하려고 한다고 가정합니다. 버튼의 모든 탭을 추적하려면 [대시보드][dashboard]에서 새 이벤트 토큰을 만들어야 합니다. 예를 들어 이벤트 토큰이 `abc123`일 경우 버튼의 `onClick` 메서드에 다음 라인을 추가하여 클릭을 추적할 수 있습니다. +Adjust를 사용하여 앱의 모든 이벤트를 트래킹할 수 있습니다. 버튼을 탭하는 행동을 모두 트래킹하고 싶으시다면, [대시보드]에서 새로운 이벤트 토큰을 생성해야 합니다. 이벤트 토큰이 abc123`이라고 가정해 보겠습니다. 버튼의 `onClick` 메서드에 다음의 라인을 추가하여 클릭을 트래킹할 수 있습니다.
@@ -740,7 +753,7 @@ Adjust.trackEvent(adjustEvent); @@ -752,16 +765,16 @@ Adjust.trackEvent(adjustEvent); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -### 매출 추적 +### 매출 트래킹 -사용자가 광고를 누르거나 인앱 구매를 할 때 매출이 발생하는 경우, 이벤트를 사용하여 해당 매출을 추적할 수 있습니다. 예를 들어 탭 한 번이 1유로센트 가치인 경우 아래와 같이 매출 이벤트를 추적할 수 있습니다. +유저가 광고를 탭하거나 인앱 구매를 통해 매출을 창출할 수 있는 경우, 이벤트를 통해 해당 매출을 트래킹할 수 있습니다. 광고를 한번 누르는 행위에 €0.01의 매출 금액이 발생한다고 가정해 보겠습니다. 매출 이벤트를 다음과 같이 추적할 수 있습니다.
@@ -776,7 +789,7 @@ Adjust.trackEvent(adjustEvent); @@ -789,24 +802,24 @@ Adjust.trackEvent(adjustEvent); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -물론 콜백 파라미터와도 연결할 수 있습니다. +이는 콜백 파라미터와도 함께 사용할 수 있습니다. -통화 토큰을 설정할 경우, Adjust가 자동으로 들어오는 매출을 미리 지정한 보고용 통화로 전환해 줍니다. [통화 전환][currency-conversion]에서 확인하세요. +사용자가 통화 토큰을 설정하면, Adjust는 사용자의 선택에 따라 발생 매출을 선택한 보고 매출로 자동 전환합니다. 자세한 [통화 변환][currency-conversion] 정보는 여기에서 확인하시기 바랍니다. -인앱 구매를 추적하려면 구매가 완료되고 실제 품목이 구매된 경우에만 `trackEvent`를 호출하십시오. 이는 실제로 발생하지 않은 매출을 추적하지 않도록 하기 위해 필요한 중요 조치입니다. +인앱 결제를 트래킹하려는 경우, 구매가 완료되고 아이템이 결제되었을 때만 `trackEvent`를 호출하시기 바랍니다. 이렇게 하면 실제로 발생하지 않은 매출을 추적하는 것을 방지할 수 있습니다. -Adjust에서 매출과 이벤트를 추적하는 것에 대한 자세한 내용은 [이벤트 추적 가이드][event-tracking]를 참조하십시오. +매출과 이벤트 트래킹에 대한 자세한 정보는 Adjust의 [이벤트 트래킹 가이드][event-tracking]를 참조하시기 바랍니다. ### 매출 중복 제거 -거래 ID를 선택 사항으로 추가하여 매출 중복 추적을 피할 수 있습니다. 가장 최근에 사용한 거래 ID(Order ID) 10개를 기억하며, 똑같은 거래 ID(Order ID)로 이루어진 매출 이벤트는 중복 집계하지 않습니다. 인앱 구매 추적 시 특히 유용합니다. 사용 예는 아래에 나와 있습니다. +중복되는 매출 트래킹하는 것을 방지하기 위해 주문 ID를 선택적으로 추가할 수 있습니다. 마지막 10개의 주문 ID가 보관되며, 중복되는 주문 ID가 있는 매출 이벤트는 건너뛰게 됩니다. 이러한 방식은 인앱 결제 추적에 특히 유용합니다. 아래 예시를 참조하시기 바랍니다.
@@ -822,7 +835,7 @@ Adjust.trackEvent(adjustEvent); @@ -836,32 +849,33 @@ Adjust.trackEvent(event); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -### 인앱 구매 검증 +### 인앱 결제 검증 -Adjust의 서버 측 수신 확인 도구인 [구매 검증(Purchase Verification)][android-purchase-verification]을 사용하여 앱에서 이루어지는 구매의 유효성을 확인할 수 있습니다. 더 자세한 내용을 확인하려면 링크를 클릭하십시오. +서버측 영수증 검증 도구인 [Adjust의 결제 검증][android-purchase-verification]을 사용하여 앱에서 이루어진 인앱 결제를 검증할 수 있습니다. 링크를 클릭하여 자세한 내용을 확인하시기 바랍니다. -## 사용자 지정 파라미터 +## 맞춤 파라미터 -### 사용자 지정 파라미터 개요 +### 맞춤 파라미터 개요 -Adjust SDK가 기본적으로 수집하는 데이터 포인트 이외에도 Adjust SDK를 사용하여 추적하고 필요한 만큼 사용자 지정 값(사용자 ID, 제품 ID 등)을 이벤트나 세션에 추가할 수 있습니다. 사용자 지정 파라미터는 미가공 데이터로만 사용 가능하며 Adjust 대시보드에 표시되지 않습니다. +Adjust SDK가 기본적으로 수집하는 데이터 포인트 외에도 Adjust SDK를 사용하여 이벤트나 세션에 필요한 만큼의 맞춤 값을 추적하고 추가할 수 있습니다(사용자 ID, 제품 ID 등). 맞춤 파라미터는 원시 데이터로만 제공되며 Adjust 대시보드에 표시되지 **않습니다**. + +개인 내부용으로 수집하는 값의 경우 **콜백 파라미터**를 사용하고, 외부 파트너와 공유하는 값은 **파트너 파라미터**를 사용해야 합니다. 만약에 내부와 외부 모두를 위해 값(예: 구매 ID)이 트래킹되는 경우, 콜백과 파트너 파라미터 모두를 사용하여 트래킹하는 것을 권고합니다. -자체 내부 용도로 수집한 값에는 **콜백 파라미터**를 사용해야 하고 외부 파트너와 공유하는 값에는 **파트너 파라미터**를 사용해야 합니다. 값(예: 제품 ID)을 내부 용도와 외부 파트너 용도로 모두 추적하는 경우, 콜백 파라미터와 파트너 파라미터를 모두 사용하여 추적하는 것이 좋습니다. ### 이벤트 파라미터 ### 이벤트 콜백 파라미터 -[대시보드][dashboard]에서 이벤트 콜백 URL을 등록할 수 있습니다. 이벤트를 추적할 때마다 GET 요청이 해당 URL로 전송됩니다. 이벤트를 추적하기 전에 이벤트 인스턴스에서 `addCallbackParameter`를 호출하여 콜백 파라미터를 해당 이벤트에 추가할 수 있습니다. 그러면 해당 파라미터가 콜백 URL에 추가됩니다. +[대시보드]에서 이벤트를 위한 콜백 URL을 등록할 수 있습니다. Adjust는 이벤트가 트래킹될 때마다 해당 URL에 GET 요청을 보냅니다. 이벤트를 트래킹하기 전에 이벤트에서 'addCallbackParameter'를 호출하여 해당 이벤트에 콜백 파라미터를 추가 할 수 있습니다. 이후 Adjust는 해당 파라미터를 사용자의 콜백 URL에 추가합니다. -예를 들어 URL `http://www.example.com/callback`을 등록했다면 이벤트를 다음과 같이 추적할 수 있습니다. +예를 들어, 사용자가 이벤트를 위해 `http://www.example.com/callback` URL을 등록했으며 다음과 같은 이벤트를 추적한다고 가정해 보겠습니다.
@@ -877,7 +891,7 @@ Adjust.trackEvent(adjustEvent); @@ -891,28 +905,28 @@ Adjust.trackEvent(adjustEvent); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -이 경우에는 이벤트를 추적하고 다음 주소로 요청이 전송됩니다. +이 경우, Adjust가 이벤트를 추적하여 다음으로 요청을 전송합니다. ``` http://www.example.com/callback?key=value&foo=bar ``` -파라미터 값으로 사용할 수 있는 `{gps_adid}`와 같은 다양한 자리 표시자(placeholder)를 지원합니다. 그 결과로 생성한 콜백에서 이 자리 표시자는 현재 기기의 Google Play 서비스 ID로 대체됩니다. 사용자 지정 파라미터는 저장되지 않으며 콜백에만 추가됩니다. 이벤트에 대한 콜백을 등록하지 않은 경우 해당 파라미터는 읽을 수 없습니다. +Adjust는 파라미터 값으로 사용될 수 있는 `{gps_adid}` 등 다양한 플레이스홀더를 지원합니다. 결과 콜백에서 Adjust는 `{gps_adid}` 플레이스홀더를 현재 기기의 Google Play Services ID로 교체합니다. Adjust는 사용자의 맞춤 파라미터를 저장하지 않으며, 콜백에 **추가**만 합니다. 이벤트 콜백을 등록하지 않으면 Adjust가 맞춤 파라미터를 읽을 수 없습니다. -사용 가능한 값의 전체 목록을 포함한 URL 콜백 사용에 대한 자세한 내용은 [콜백 설명서][callbacks-guide]를 참조하십시오. +Adjust [콜백 가이드][callbacks-guide]에서 URL 콜백에 대해 자세히 알아보시기 바랍니다. ### 이벤트 파트너 파라미터 -Adjust 대시보드에서 활성화된 연동에 대해 네트워크 파트너로 전송할 파라미터도 추가할 수 있습니다. +Adjust 대시보드에서 파라미터가 활성화되면, 이를 네트워크 파트너에게 전송할 수 있습니다. -이 파라미터는 위에서 언급한 콜백 파라미터와 유사하게 작동합니다. 이벤트 인스턴스에 `addPartnerParameter` 메서드를 호출하여 파라미터를 추가하십시오. +이는 위에서 설명된 콜백 파라미터와 같은 원리로 작동됩니다. 이벤트 인스턴스에 `addPartnerParameter` 메서드를 호출하여 추가할 수 있습니다.
@@ -928,7 +942,7 @@ Adjust.trackEvent(adjustEvent); @@ -942,18 +956,18 @@ Adjust.trackEvent(adjustEvent); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -특별 파트너와 그 연동에 대한 자세한 내용은 [특별 파트너 설명서][special-partners]를 참조하십시오. +[특별 파트너 가이드][special-partners]에서 특별 파트너와 연동 방법에 대한 자세한 내용을 알아보실 수 있습니다. -### 이벤트 콜백 식별자 +### 이벤트 콜백 ID -추적하고자 하는 각 이벤트에 개별 스트링 ID를 따로 붙일 수도 있습니다. 나중에 이벤트 성공/실패 콜백에서 해당 ID에 전달하여 이벤트 트래킹의 성공 또는 실패 여부를 추적할 수 있게 해 줍니다. Event 인스턴스에서 `setCallbackId`메서드를 호출하여 설정할 수 있습니다: +트래킹하고자 하는 각 이벤트에 맞춤 문자열 ID를 추가할 수도 있습니다. 이 ID는 이후에 이벤트 성공 및/또는 이벤트 실패 콜백에서 보고되며, 이를 통해 성공적으로 트래킹된 이벤트와 그렇지 않은 이벤트를 확인할 수 있습니다. 이벤트 인스턴스에 `setCallbackId` 메서드를 호출하여 이 ID를 설정할 수 있습니다.
@@ -968,7 +982,7 @@ Adjust.trackEvent(adjustEvent); @@ -981,24 +995,24 @@ Adjust.trackEvent(adjustEvent); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ ### 세션 파라미터 -일부 파라미터는 Adjust SDK 이벤트 및 세션 발생시마다 전송을 위해 저장합니다. 어느 파라미터든 한 번 저장하면 로컬에 바로 저장되므로 매번 새로 추가할 필요가 없습니다. 같은 파라미터를 두 번 저장해도 효력이 없습니다. +세션 파라미터는 로컬에 저장되며, Adjust SDK의 모든 **이벤트**와 **세션**에 전송됩니다. 이러한 파라미터를 추가할 때마다 Adjust가 해당 파라미터를 저장하므로, 다시 추가할 필요가 없습니다. 동일한 파라미터를 다시 추가해도 아무 일도 일어나지 않습니다. -이 세션 파라미터는 설치 시에도 전송할 수 있도록 Adjust SDK 런칭 전에도 호출할 수 있습니다. 설치 시에 전송하지만 필요한 값은 런칭 후에야 들어갈 수 있게 하고 싶다면 Adjust SDK 런칭 시 [예약 시작](#cp-delay-start)을 걸 수 있습니다. +이러한 세션 파라미터는 설치 중에도 전송될 수 있도록 Adjust SDK가 실행되기 전에 호출될 수 있습니다. 설치 시에 파라미터를 전송해야 하지만, 필요한 값을 실행 이후에만 확보할 수 있는 경우, 이러한 동작이 가능하게 하려면 Adjust SDK의 첫 실행을 지연시키면 됩니다. ### 세션 콜백 파라미터 -[이벤트](#event-callback-parameters)에 등록한 콜백 파라미터는 Adjust SDK 전체 이벤트 및 세션 시 전송할 목적으로 저장할 수 있습니다. +Adjust SDK의 모든 이벤트 또는 세션에서 전송될 [이벤트](#event-callback-parameters)를 위해 모든 콜백 파라미터를 저장할 수 있습니다. -세션 콜백 파라미터는 이벤트 콜백 파라마터와 비슷한 인터페이스를 지녔습니다. 이벤트에 키, 값을 추가하는 대신 `Adjust.addSessionCallbackParameter(String key, String value)` 메서드를 호출하여 추가합니다. +세션 콜백 파라미터의 인터페이스는 이벤트 콜백 파라미터와 유사합니다. 이벤트에 키와 값을 추가하는 대신, `Adjust.addSessionCallbackParameter(String key, String value)`메서드로의 호출을 통해 추가하시기 바랍니다.
@@ -1011,7 +1025,7 @@ Adjust.addSessionCallbackParameter("foo", "bar"); @@ -1022,16 +1036,16 @@ Adjust.addSessionCallbackParameter('foo', 'bar'); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -세션 콜백 파라미터는 이벤트에 추가된 콜백 파라미터와 합쳐집니다. 이벤트에 추가된 콜백 파라미터는 세션 콜백 파라미터보다 우선합니다. 이는 세션에서 추가된 것과 같은 키로 이벤트에 콜백 파라미터를 추가한 경우, 이벤트에 추가된 콜백 파라미터 값이 우선한다는 의미입니다. +세션 콜백 파라미터는 이벤트에 추가한 콜백 파라미터와 병합됩니다. 이벤트에 추가된 콜백 파라미터는 세션 콜백 파라미터를 우선합니다. 즉, 세션에서 추가된 것과 동일한 키로 콜백 파라미터를 이벤트에 추가하면 이벤트에 추가된 콜백 파라미터의 값이 우선시됩니다. -원하는 키를 아래와 같은 메서드로 전달하여 특정 세션 콜백 파라미터를 제거할 수 있습니다. `Adjust.removeSessionCallbackParameter(String key)`. +원하는 키를 `Adjust.removeSessionCallbackParameter(String key)` 메서드에 전달하여 특정 세션 콜백 파라미터를 삭제할 수 있습니다.
@@ -1044,7 +1058,7 @@ Adjust.removeSessionCallbackParameter("foo"); @@ -1055,14 +1069,14 @@ Adjust.removeSessionCallbackParameter('foo'); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -세션 콜백 파라미터의 키와 값을 전부 없애고 싶다면 `Adjust.resetSessionCallbackParameters()` 메서드로 재설정하면 됩니다. +세션 콜백 파라미터의 모든 키와 이에 상응하는 값을 삭제하고 싶다면 `Adjust.resetSessionCallbackParameters()` 메서드를 통해 리셋할 수 있습니다.
@@ -1075,7 +1089,7 @@ Adjust.resetSessionCallbackParameters(); @@ -1086,20 +1100,20 @@ Adjust.resetSessionCallbackParameters(); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ ### 세션 파트너 파라미터 -Adjust SDK 내 모든 이벤트 및 세션에서 전송되는 [세션 콜백 파라미터](#session-callback-parameters)가 있는 것처럼, 세션 파트너 파라미터도 있습니다. +[세션 콜백 파라미터](#session-callback-parameters)가 Adjust SDK의 모든 이벤트 및 세션에서 전송되는 것과 마찬가지로, 세션 파트너 파라미터도 있습니다. -이들 파라미터는 Adjust [대시보드][dashboard]에서 연동을 활성화한 네트워크 파트너에게 전송할 수 있습니다. +이러한 세션 파트너 파라미터는 Adjust [대시보드]에서 연동이 활성화된 모든 네트워크 파트너에 전송됩니다. -세션 파트너 파라미터는 이벤트 파트너 파라미터와 인터페이스가 비슷합니다. 이벤트에 키, 값을 추가하는 대신 `Adjust.addSessionPartnerParameter(String key, String value)` 메서드를 호출하여 추가합니다. +세션 파트너 파라미터 인터페이스는 이벤트 파트너 파라미터 인터페이스와 유사합니다. 이벤트에 키와 값을 추가하는 대신에, `Adjust.addSessionPartnerParameter(String key, String value)` 메서드를 호출하여 추가할 수 있습니다.
@@ -1112,27 +1126,27 @@ Adjust.addSessionPartnerParameter("foo", "bar"); -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
```js -Adjust.addSessionPartnerParameter('foo', 'bar'); +Adjust.addSessionPartnerParameter('foo','bar'); ```
+ -세션 파트너 파라미터는 이벤트에 추가한 파트너 파라미터와 합쳐집니다. 이벤트에 추가된 파트너 파라미터는 세션 파트너 파라미터보다 우선시됩니다. 세션에서와 같은 키로 이벤트에 파트너 파라미터를 추가한 경우, 새로 추가한 파트너 파라미터가 우선권을 가집니다. +세션 파트너 파라미터는 이벤트에 추가된 파트너 파라미터와 병합됩니다. 이벤트에 추가된 파트너 파라미터는 세션 파트너 파라미터보다 높은 우선순위를 가집니다. 세션에서 추가된 것과 동일한 키로 파트너 파라미터를 이벤트에 추가하면, 이벤트에 추가된 파트너 파라미터의 값이 우선시됩니다. -원하는 키를 `Adjust.removeSessionPartnerParameter(String key)` 메서드로 전달하여 특정 세션 파트너 파라미터를 제거할 수 있습니다. +원하는 키를 `Adjust.removeSessionPartnerParameter(String key)`에 전달하여 특정 세션 파트너 파라미터를 제거할 수 있습니다.
@@ -1145,7 +1159,7 @@ Adjust.removeSessionPartnerParameter("foo"); @@ -1156,14 +1170,14 @@ Adjust.removeSessionPartnerParameter('foo'); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -세션 파트너 파라미터의 키와 값을 전부 없애고 싶다면 `Adjust.resetSessionPartnerParameters()` 메서드로 재설정하면 됩니다. +세션 파트너 파라미터의 모든 키와 이에 상응하는 값을 삭제하고 싶다면 `Adjust.resetSessionPartnerParameters()` 메서드를 통해 리셋할 수 있습니다.
@@ -1176,7 +1190,7 @@ Adjust.resetSessionPartnerParameters(); @@ -1187,18 +1201,18 @@ Adjust.resetSessionPartnerParameters(); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -### 예약 시작(delay start) +### 시작 지연 -Adjust SDK에 예약 시작을 걸면 앱이 고유 식별자 등의 세션 파라미터를 얻어 설치 시에 전송할 시간을 벌 수 있습니다. +Adjust SDK의 시작을 지연시키면, 앱이 고유 ID와 같이 설치 시 전송될 세션 파라미터를 획득할 시간을 확보할 수 있습니다. -Config 인스턴스의 `setDelayStart` 메소드에서 예약 시작 시각을 초 단위로 설정하세요. +Config 인스턴스의 `setDelayStart` 메서드로 초기 지연을 초 단위로 설정하시기 바랍니다.
@@ -1211,7 +1225,7 @@ adjustConfig.setDelayStart(5.5); @@ -1222,27 +1236,27 @@ adjustConfig.setDelayStart(5.5); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -이 경우 Adjust SDK는 최초 인스톨 세션 및 생성된 이벤트를 5.5초간 기다렸다가 전송합니다. 이 시간이 지난 후, 또는 그 사이에 `Adjust.sendFirstPackages()`을 호출했을 경우 모든 세션 파라미터가 지연된 인스톨 세션 및 이벤트에 추가되며 Adjust SDK는 원래대로 돌아옵니다. +본 예는 Adjust SDK가 초기 설치 세션과 발생한 모든 이벤트를 전송하는 것을 5.5초 지연시킵니다. 지연 설정한 시간이 만료되면(또는 도중에 `Adjust.sendFirstPackages()`를 호출한 경우), 모든 세션 파라미터는 지연된 설치 세션과 이벤트에 추가되며, Adjust SDK가 다시 원래대로 작업을 재개합니다. -**Adjust SDK의 최대 지연 예약 시작 시간은 10초입니다.** +**Adjust SDK의 최대 시작 지연 시간은 10초입니다.** -## 추가 기능 +## 부가 기능 -Adjust SDK를 프로젝트와 연동한 후에는 다음 기능을 사용할 수 있습니다. +Adjust SDK를 프로젝트에 연동하면 다음의 기능을 활용할 수 있습니다. -### 푸시 토큰 (uninstall tracking) +### 푸시 토큰(설치 삭제 트래킹) -푸시 토큰은 Audience Builder와 클라이언트 콜백에 사용되며, 앱 제거(uninstall) 및 재설치 (reinstall) 트래킹을 위해 필수입니다. +푸시 토큰은 Audience Builder 및 클라이언트 콜백에 사용되며 삭제 및 재설치 추적 기능에 필요합니다. -푸시 알림 토큰을 전송하려면 앱에서 토큰을 받거나 값 변화가 있을 때마다 아래와 같이 Adjust에 대한 호출을 추가하세요. +푸시 알림 토큰을 Adjust에 전송하려면, 토큰을 획득한 이후(또는 값이 변경된 이후) 다음의 콜을 Adjust에 추가하시기 바랍니다.
@@ -1252,15 +1266,15 @@ Adjust SDK를 프로젝트와 연동한 후에는 다음 기능을 사용할 수 Adjust.setPushToken(pushNotificationsToken, context); ``` -`context`를 추가하여 업데이트된 이 서명을 사용하여 SDK가 더욱 다양한 상황에서 푸시 토큰을 전송할 수 있습니다. 위의 서명 메서드를 사용하는 것이 좋습니다. +`context`가 추가된 업데이트된 서명은 SDK가 더 다양한 시나리오에 대응할 수 있도록 하여 푸시 토큰이 전송되도록 보장할 수 있습니다. 따라서 위의 서명 메서드 사용을 권고합니다. -하지만, `context`가 없는 동일한 메서드의 이전 서명도 계속해서 지원됩니다. +그러나 Adjust는 `context`가 포함되지 않은 이전의 동일한 서명 메서드도 여전히 지원합니다. @@ -1271,20 +1285,20 @@ Adjust.setPushToken(pushNotificationsToken); ``` -
-네이티브 SDK +Native SDK
-웹뷰 SDK +Web View SDK
+ ### 어트리뷰션 콜백 -리스너(listener)를 등록하여 트래커 어트리뷰션 변경 알림을 받을 수 있습니다. 어트리뷰션에서 고려하는 소스가 각각 다르기 때문에 이 정보는 동시간에 제공할 수 없습니다. +수신기를 등록하여 트래커 어트리뷰션의 변경 사항에 대한 알림을 받을 수 있습니다. 어트리뷰션에 고려하는 소스가 다양하기 때문에 Adjust는 이 정보를 동시에 전송할 수 없습니다. -해당 [어트리뷰션 데이터 정책][attribution-data]을 반드시 고려하세요. +자세한 정보는 Adjust의 [어트리뷰션 데이터 정책][attribution-data]을 확인하시기 바랍니다. -Config 인스턴스를 사용하여 어트리뷰션 콜백을 추가한 다음 SDK를 시작하십시오. +SDK를 시작하기 전에 config 인스턴스와 함께 어트리뷰션 콜백을 추가하시기 바랍니다.
@@ -1304,7 +1318,7 @@ Adjust.onCreate(config); @@ -1321,18 +1335,87 @@ Adjust.onCreate(adjustConfig); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ + +수신기 함수는 SDK가 최종 어트리뷰션 데이터를 수신한 이후 호출됩니다. 수신기 함수 내에서 `attribution` 파라미터에 액세스할 수 있습니다. 그 속성에 대한 요약 정보는 다음과 같습니다. + +- `trackerToken`: 현재 어트리뷰션의 트래커 토큰 문자열 +- `trackerName`: 현재 어트리뷰션의 트래커 이름 문자열 +- `network`: 현재 어트리뷰션의 네트워크 그룹화 수준 문자열 +- `campaign`: 현재 어트리뷰션의 캠페인 그룹화 수준 문자열 +- `adgroup`: 현재 어트리뷰션의 광고 그룹 그룹화 수준 문자열 +- `creative`: 현재 어트리뷰션의 크리에이티브 그룹화 수준 문자열 +- `clickLabel`: 현재 어트리뷰션의 클릭 레이블 문자열 +- `adid`: Adjust의 기기 식별자 문자열 +- `costType`: 비용 유형 문자열 +- `costAmount`: 비용 금액 +- `costCurrency`: 비용 통화 문자열 + +**참고**: 비용 데이터인 `costType`와 `costAmount`, `costCurrency`는 `setNeedsCost` 메서드를 호출하여 `AdjustConfig`에서 설정된 경우에만 이용 가능합니다. 설정이 되지 않았거나 또는 설정이 되었으나 어트리뷰션의 일부가 아닌 경우에는 필드의 값이 `null`로 나타납니다. 본 기능은 DK v4.25.0 이상 버전에서만 이용 가능합니다. + +### 구독 트래킹 + +**참고**: 이 기능은 SDK 4.22.0 버전 이상에서만 사용할 수 있습니다. + +Adjust SDK에서 Play Store 구독을 트래킹하고 유효성을 검증할 수 있습니다. 구독이 결제되면 다음을 Adjust SDK로 호출하시기 바랍니다. + +
+ + + + + + +
+Native App SDK +
+ +```java +AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription( + price, + currency, + sku, + orderId, + signature, + purchaseToken); +subscription.setPurchaseTime(purchaseTime); + +Adjust.trackPlayStoreSubscription(subscription); +``` +
+ +구독 트래킹 파라미터: + +- [가격](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getpriceamountmicros) +- [통화](https://developer.android.com/reference/com/android/billingclient/api/SkuDetails#getpricecurrencycode) +- [sku](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getsku) +- [주문 ID](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getorderid) +- [서명](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getsignature) +- [구매 토큰](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasetoken) +- [구매 시간](https://developer.android.com/reference/com/android/billingclient/api/Purchase#getpurchasetime) -리스너 함수는 SDK가 최종 어트리뷰션 데이터를 접수한 후 호출됩니다. 리스너 함수에서는 `attribution` 파라미터에 액세스할 수 있습니다. 해당 파라미터에 대한 개요는 다음과 같습니다. +이벤트 추적과 마찬가지로 콜백 및 파트너 파라미터를 구독 객체에 연결할 수 있습니다. -- `trackerToken` 현재 설치된 트래커 토큰. -- `trackerName` 현재 설치된 트래커 이름. -- `network` 현재 설치된 네트워크 그룹화 기준. -- `campaign` 현재 설치된 캠페인 그룹화 기준. -- `adgroup` 현재 설치된 광고 그룹 그룹화 기준. -- `creative` 현재 설치된 크리에이티브 그룹화 기준. -- `clickLabel` 현재 설치된 클릭 레이블. -- `adid` Adjust 기기 식별자. +```java +AdjustPlayStoreSubscription subscription = new AdjustPlayStoreSubscription( + price, + currency, + sku, + orderId, + signature, + purchaseToken); +subscription.setPurchaseTime(purchaseTime); + +// add callback parameters +subscription.addCallbackParameter("key", "value"); +subscription.addCallbackParameter("foo", "bar"); + +// add partner parameters +subscription.addPartnerParameter("key", "value"); +subscription.addPartnerParameter("foo", "bar"); + +Adjust.trackPlayStoreSubscription(subscription); +``` ### 광고 매출 트래킹 @@ -1340,37 +1423,39 @@ Adjust.onCreate(adjustConfig); 다음 메서드를 호출하여 Adjust SDK로 광고 매출 정보를 트래킹할 수 있습니다. -
- - - - - + +
-네이티브 앱 SDK -
+ + + + + + - -
+Native App SDK +
```java Adjust.trackAdRevenue(source, payload); ``` -
+
전달해야 하는 메서드 파라미터는 다음과 같습니다. + - `source` - 광고 매출 정보의 소스를 나타내는 `String` 객체 - `payload` - 광고 매출 JSON을 포함하는 `JSONObject` 객체 애드저스트는 현재 다음의 `source` 파라미터 값을 지원합니다. + - `AD_REVENUE_MOPUB` - MoPub 미디에이션 플랫폼을 나타냄(자세한 정보는 [연동 가이드][sdk2sdk-mopub] 확인) -### 세션 및 이벤트 콜백 +### 세션 이벤트 콜백 -리스너를 등록하여 이벤트나 세션 추적 시 알림을 받을 수 있습니다. 리스너에는 4가지가 있습니다. 이벤트 추적 성공, 이벤트 추적 실패, 세션 추적 성공, 그리고 세션 추적 실패입니다. 아래와 같은 config 개체를 생성한 다음 필요한 만큼 리스너를 추가하십시오. +이벤트나 세션이 트래킹될 때 수신기에 알림을 보내도록 설정할 수 있습니다. 수신기는 성공적인 이벤트를 트래킹하기 위한 수신기, 실패한 이벤트를 트래킹하기 위한 수신기, 성공한 세션을 트래킹하기 위한 수신기, 실패한 세션을 트래킹하기 위한 수신기로 총 4가지가 있습니다. config 객체를 생성한 이후 다음과 같이 필요한 만큼의 수신기를 추가하시기 바랍니다.
@@ -1417,7 +1502,7 @@ Adjust.onCreate(config); @@ -1440,32 +1525,32 @@ Adjust.onCreate(adjustConfig); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -리스너 함수는 SDK가 서버에 패키지 전송을 시도한 후에 호출됩니다. 리스너 함수에서 리스너에 대한 특정 응답 데이터 개체에 액세스할 수 있습니다. 세션 성공 시 응답 데이터 개체 필드 개요는 다음과 같습니다. +수신기 함수는 SDK가 서버로 패키지를 전송하려고 시도한 이후 호출됩니다. 수신기 내에서는 해당 수신기에 특화된 응답 데이터 객체에 액세스할 수 있습니다. 성공적인 세션 응답 데이터 객체 필드를 짧게 요약하면 다음과 같습니다. -- `message` 서버에서 전송한 메시지 또는 SDK가 기록한 오류. -- `timestamp` 서버에서 전송한 데이터의 타임스탬프. -- `adid` Adjust가 제공하는 고유 기기 식별자. -- `jsonResponse` 서버로부터의 응답이 있는 JSON 개체. +- `message`: 서버로부터의 메시지 문자열(또는 SDK에 의해 로그된 오류) +- `timestamp`: 서버로부터의 타임스탬프 문자열 +- `adid`: Adjust가 제공한 고유의 문자열 기기 식별자 +- `jsonResponse`: 서버로부터의 응답을 포함하는 JSON 객체 -이벤트 응답 데이터 개체 두 가지에는 다음 정보가 포함됩니다. +두 이벤트 응답 데이터 개체는 다음을 포함합니다. -- `eventToken` 추적 패키지가 이벤트인 경우 이벤트 토큰. -- `callbackId`: 이벤트 개체에 설정된 사용자 지정 [콜백 ID](#cp-event-callback-id) 문자열. +- `eventToken`: 이벤트 토큰 문자열(트래킹된 패키지가 이벤트인 경우) +- `callbackId`: 이벤트 객체에 설정된 맞춤 정의된 [콜백 ID](#cp-event-callback-id) 문자열 -그리고 이벤트 및 세션 실패 개체에는 다음 정보도 포함됩니다. +두 이벤트 및 세션 실패 개체는 다음을 포함합니다. -- boolean `willRetry` 나중에 패키지 재전송 시도가 있을 것임을 나타냅니다. +- `willRetry`: 이후 해당 패키지의 재전송 시도 여부를 명시하는 부울 방식 -### 사용자 어트리뷰션 +### 유저 어트리뷰션 -[어트리뷰션 콜백 섹션](#af-attribution-callback)에서 설명한 바와 같이, 이 콜백은 변동이 있을 때마다 새로운 어트리뷰션 관련 정보를 전달할 목적으로 촉발됩니다. 사용자의 현재 어트리뷰션 값 관련 정보를 언제든 억세스하고 싶다면, `Adjust` 인스턴스의 다음 메서드를 호출하면 됩니다. +[어트리뷰션 콜백 세션](#af-attribution-callback)에서 설명된 바와 같이, 본 콜백은 어트리뷰션 정보가 바뀔 때마다 트리거됩니다. 필요할 때마다`Adjust` 인스턴스의 다음 메서드를 호출하여 유저의 현재 어트리뷰션 정보에 액세스할 수 있습니다.
@@ -1478,7 +1563,7 @@ AdjustAttribution attribution = Adjust.getAttribution(); @@ -1489,30 +1574,30 @@ let attribution = Adjust.getAttribution(); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -**참고**: 이 호출은 **Adjust SDK v4.11.0** 이상 버전에서만 수행할 수 있습니다. +**참고**: 본 호출은 Adjust SDK v4.11.0 이상 버전에서만 이용할 수 있습니다. -**참고**: 사용자의 현재 어트리뷰션 관련 정보는 Adjust 백엔드가 앱 인스톨을 추적하여 최초 어트리뷰션 콜백이 촉발된 후에만 얻을 수 있습니다. 그 순간부터 Adjus SDK는 사용자 어트리뷰션 정보를 갖게 되며 이 메서드로 액세스할 수 있습니다. +**참고**: 현재 어트리뷰션 정보는 Adjust 백엔드에서 앱 설치를 트래킹하고, 어트리뷰션 콜백을 실행한 이후에만 이용 가능합니다. SDK가 초기화되고 어트리뷰션 콜백이 실행되기 전에는 유저의 어트리뷰션 값에 액세스할 수 **없습니다.** ### 기기 ID -Adjust SDK로 기기 식별자 몇 가지를 획득할 수 있습니다. +Adjust SDK를 통해 기기 식별자를 획득할 수 있습니다. -### Google Play 서비스 광고 식별자 +### Google Play Services 광고 ID -Google Analytics와 같은 서비스를 사용하려면 중복 보고가 발생하지 않도록 기기 ID와 클라이언트 ID를 조정해야 합니다. +특정 서비스(예: Google Analytics)는 중복 보고를 방지하기 위해 광고 및 클라이언트 ID 통합을 요청합니다.
-
-네이티브 앱 SDK +Native App SDK
- -Google 광고 ID가 필요한 경우 제한 사항으로 인해 백그라운드 스레드에서만 ID를 읽을 수 있습니다. `getGoogleAdId` 함수를 컨텍스트 및 `OnDeviceIdsRead` 인스턴스와 함께 호출하면 상황에 관계 없이 작동합니다. + +Google Advertising ID가 필요한 경우에는 제약이 있습니다. 이는 백그라운드 스레드에서만 읽을 수 있습니다. context를 포함한 `getGoogleAdId` 함수와 `OnDeviceIdsRead` 인스턴스를 호출하면, 어떤 상황에서든 작동할 것입니다. ```java Adjust.getGoogleAdId(this, new OnDeviceIdsRead() { @@ -1524,13 +1609,13 @@ Adjust.getGoogleAdId(this, new OnDeviceIdsRead() {
-웹뷰 SDK +Web View SDK
-기기의 Google 광고 기기 식별자를 얻으려면 콜백 함수를 `Adjust.getGoogleAdId`로 전달해야 합니다. 이 콜백 함수는 다음과 같이 인수에 Google 광고 ID를 받습니다. +해당 기기의 Google Advertising 기기 식별자 정보를 얻으려면, `Adjust.getGoogleAdId`로 콜백 함수를 전송하여, 다음과 같이 인수에서 Google Advertising ID를 받도록 할 수 있습니다. ```js Adjust.getGoogleAdId(function(googleAdId) { @@ -1539,16 +1624,16 @@ Adjust.getGoogleAdId(function(googleAdId) { ```
+ -### Amazon 광고 식별자 +### Amazon 광고 ID -Amazon 광고 ID를 얻으려면 `Adjust` 인스턴스에서 다음 메서드를 호출하면 됩니다. +Amazon 광고 ID가 필요한 경우, 다음의 메서드를 `Adjust`에서 호출합니다.
@@ -1561,7 +1646,7 @@ String amazonAdId = Adjust.getAmazonAdId(context); @@ -1572,16 +1657,16 @@ let amazonAdId = Adjust.getAmazonAdId(); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ ### Adjust 기기 식별자 -Adjust 백엔드는 앱을 인스톨한 장치에서 고유한 Adjust 기기 식별자 (adid)를 생성합니다. 이 식별자를 얻으려면 `Adjust` 인스턴스에서 다음 메서드를 호출하면 됩니다. +앱이 설치된 각 기기에 대해 Adjust의 백엔드는 고유한 **Adjust 기기 식별자(adid)** 를 생성합니다. 이 식별자를 획득하려면 다음의 메서드를 `Adjust` 인스턴스에서 호출하시기 바랍니다.
@@ -1594,7 +1679,7 @@ String adid = Adjust.getAdid(); @@ -1605,29 +1690,28 @@ let adid = Adjust.getAdid(); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
- -**참고**: 이 호출은 **Adjust SDK v4.11.0** 이상 버전에서만 수행할 수 있습니다. + -**참고**: adid 관련 정보는 Adjust 백엔드가 앱 설치를 추적한 후에만 얻을 수 있습니다. 따라서 SDK가 초기화되고 앱 설치 추적이 성공적으로 이루어지기 전에는 adid 액세스가 불가능합니다. +**참고**: 본 호출은 Adjust SDK v4.11.0 이상 버전에서만 이용할 수 있습니다. +**참고**: **adid**에 관한 정보는 Adjust의 백엔드가 앱 설치를 트래킹한 이후에만 이용 가능합니다. 따라서 SDK가 초기화되고 앱 설치가 성공적으로 추적되기 전까지는 **adid** 값에 액세스할 수 **없습니다.** ### 사전 설치된 앱 -애드저스트 SDK를 사용하여 기기 제조 과정에서 앱이 사전 설치되었던 유저를 파악할 수 있습니다. 시스템 페이로드 또는 기본 트래커를 사용하는 두 가지 방법으로 사전 설치 여부를 확인할 수 있습니다. +애드저스트 SDK를 사용하여 기기 제조 과정에서 앱이 사전 설치되었던 유저를 파악할 수 있습니다. 시스템 페이로드 또는 기본 트래커를 사용하는 두 가지 방법으로 사전 설치 여부를 확인할 수 있습니다. -일반적으로는 시스템 페이로드를 사용하는 방식을 권장합니다. 그러나 일부 상황에서는 트래커를 사용해야 될 수 있습니다. 애드저스트 [헬프 센터를](https://help.adjust.com/ko/article/pre-install-tracking) 방문하셔서 애드저스트의 사전 설치 파트너와 연동에 대해 확인하시기 바랍니다. 어느 방법을 사용해야 될지 모르겠다면 integration@adjust.com에 문의주십시오. +일반적으로 Adjust는 시스템 실 데이터 솔루션을 권고합니다. 그러나 트래커가 필요한 경우도 있습니다. Adjust의 사전설치 파트너와 연동에 관한 자세한 정보는 [Adjust 헬프 센터](https://help.adjust.com/ko/article/pre-install-tracking)에서 확인하시기 바랍니다. 어떠한 솔루션을 사용해야 할지 모르겠다면 integration@adjust.com으로 연락주시기 바랍니다. -#### 시스템 페이로드 사용하기 +#### 시스템 실 데이터 사용 -이 방법은 **SDK v4.23.0 이상**에서만 지원됩니다. +본 솔루션은 SDK **SDK v4.23.0 이상에서만** 지원됩니다. -애드저스트 SDK가 사전 설치된 앱을 인식할 수 있도록 하려면 구성 객체를 생성한 후 `setPreinstallTrackingEnabled`를`true`파라미터와 함께 요청하십시오. +Adjust SDK가 사전 설치된 앱을 인식할 수 있도록 하려면, cofig 객체를 생성한 후 `true` 파라미터와 함께 `setPreinstallTrackingEnabled`를 호출하시기 바랍니다. -
+
@@ -1651,17 +1735,17 @@ adjustConfig.setPreinstallTrackingEnabled(true); ``` -
-네이티브 앱 SDK +Native App SDK
+ -#### 기본 트래커 사용하기 +#### 기본값 트래커 사용 -- 대시보드에서 새 트래커를 생성합니다. -- 앱 델리게이트를 열고 구성의 기본 트래커를 설정합니다. +- [대시보드]에서 새 트래커를 생성합니다. +- 앱 델리게이트를 열고 config의 기본 트래커를 설정합니다. -
+
@@ -1685,25 +1769,26 @@ adjustConfig.setPreinstallTrackingEnabled(true); ``` -
- 네이티브 앱 SDK + Native App SDK
- - - `{TrackerToken}`에 1단계에서 생성한 트래커 토큰을 입력합니다. 대시보드에는 트래커 URL이 표시된다는 점에 유의하십시오(`http://app.adjust.com/` 포함). 소스 코드에는 전체 URL이 아닌 6~7글자의 토큰만 입력해야 합니다. - - - 앱을 빌드하고 실행합니다. 로그 내역에서 다음과 같은 내용이 표시됩니다. + + +- {TrackerToken}을 1단계에서 생성한 트래커 토큰으로 교체합니다. 대시보드에는 트래커 URL이 표시됩니다(`http://app.adjust.com/` 포함). 소스 코드에서는 전체 URL이 아닌 6~7자의 토큰만 지정해야 합니다. + +- 앱을 빌드하고 실행합니다. LogCat에서 다음과 같은 라인이 나타나야 합니다. + ``` Default tracker: 'abc123' ``` ### 오프라인 모드 -Adjust SDK를 오프라인 모드로 전환하여 서버로 전송하는 작업을 일시 중단하고 추적 데이터를 보관하여 나중에 보낼 수 있습니다. 오프라인 모드일 때는 모든 정보가 파일에 저장되므로 너무 많은 이벤트를 촉발(trigger)하지 않도록 주의하십시오. +Adjust 서버에 대한 전송을 일시적으로 중지(트래킹된 데이터는 이후에 전송되도록 보유)하려면 Adjust SDK를 오프라인 모드로 설정할 수 있습니다. 오프라인 모드에서는 모든 정보가 파일로 저장됩니다. 오프라인 모드에서 너무 많은 이벤트를 트리거하지 않도록 주의해야 합니다. -`setOfflineMode`를 `true`로 설정하여 호출하면 오프라인 모드를 활성화할 수 있습니다. +오프라인 모드를 활성화하려면 `setOfflineMode`를 호출하고 파라미터를 `true`로 설정합니다.
@@ -1716,7 +1801,7 @@ Adjust.setOfflineMode(true); @@ -1727,15 +1812,16 @@ Adjust.setOfflineMode(true); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -`setOfflineMode`를 `false`로 설정한 상태로 호출하면 오프라인 모드를 비활성화할 수 있습니다. Adjust SDK를 다시 온라인 모드로 전환하면 저장된 정보가 모두 올바른 시간 정보와 함께 Adjust 서버로 전송됩니다. +반대로`setOfflineMode`를 `false`와 호출하여 오프라인 모드를 취소할 수 있습니다. Adjust SDK가 다시 온라인 모드가 되면, 저장된 모든 정보가 정확한 시간 정보와 함께 Adjust 서버로 전송됩니다. -**추적 사용 중지와 달리 이 설정은 세션 간에 기억되지 않습니다.** 따라서 앱을 오프라인 모드에서 종료한 경우에도 SDK는 항상 온라인 모드로 시작됩니다. +트래킹 비활성화와는 다르게 이 설정은 **세션 간에 유지되지 않습니다.** 즉, 앱이 오프라인 모드에서 종료되었더라도, Adjust SDK는 항상 온라인 모드로 시작됩니다. -### 추적 사용 중지 -`setEnabled`를 `false` 파라미터로 설정한 상태로 호출하면 Adjust SDK에서 현재 장치의 모든 작업 추적을 중지할 수 있습니다. **이 설정은 세션 간에 기억됩니다.** +### 트래킹 비활성화 + +`false` 파라미터와 함께`setEnabled`를 호출하여 Adjust SDK가 현재 기기의 모든 활동을 트래킹하는 것을 비활성화 할 수 있습니다. (주의: 트래킹 중단을 원한때만 사용하시기 바랍니다.) **이 설정은 세션 간에 유지됩니다**.
@@ -1764,19 +1850,18 @@ Adjust.setEnabled(false); ``` -
- -`isEnabled` 함수를 호출하여 Adjust SDK가 현재 사용 가능한지 확인할 수 있습니다. 파라미터가 `true`로 설정된 `setEnabled`를 호출하면 Adjust SDK를 언제든 활성화할 수 있습니다. + +`isEnabled`함수를 호출하여 Adjust SDK가 현재 활성화되어있는지 확인할 수 있습니다. 활성화된 파라미터를`true`로 설정하여 `setEnabled`를 호출하고 언제든지 Adjust SDK를 활성화할 수 있습니다. ### 이벤트 버퍼링 -앱이 이벤트 추적을 많이 사용하는 경우, 매 분마다 배치(batch) 하나씩만 보내도록 하기 위해 일부 HTTP 요청을 지연시키고자 할 경우가 있을 수 있습니다. config 인스턴스로 이벤트 버퍼링을 활성화할 수 있습니다. +앱이 이벤트 트래킹을 많이 사용하는 경우, 일부 네트워크 요청을 연기하여 네트워크 요청을 1분에 한 번씩 일괄적으로 보낼 수 있습니다. 이벤트 버퍼링은 cofig 인스턴스에서 활성화할 수 있습니다.
@@ -1789,7 +1874,7 @@ adjustConfig.setEventBufferingEnabled(true); @@ -1800,16 +1885,16 @@ adjustConfig.setEventBufferingEnabled(true); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -### 백그라운드 추적 +### 백그라운드 트래킹 -Adjust SDK 기본값 행위는 앱이 백그라운드에 있을 동안에는 HTTP 요청 전송을 잠시 중지하는 것입니다. config 인스턴스에서 이를 변경할 수 있습니다. +Adjust SDK는 기본적으로 앱이 백그라운드에서 작동하는 동안 네트워크 요청 전송을 일시 중지하도록 설정되어 있습니다. 이는 cofig 인스턴스에서 변경할 수 있습니다.
@@ -1822,7 +1907,7 @@ adjustConfig.setSendInBackground(true); @@ -1833,16 +1918,16 @@ adjustConfig.setSendInBackground(true); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ -### GDPR(일반 개인정보 보호법) 상의 잊힐 권리 +### GDPR 잊혀질 권리 -유럽연합(EU) 일반 개인정보 보호법 제 17조에 의거하여, 사용자가 잊힐 권리를 행사하였을 경우 Adjust에 이를 통보할 수 있습니다. 다음 메서드를 호출하면 Adjust SDK는 사용자가 잊힐 권리를 사용하기로 했음을 Adjust 백엔드에 전달합니다: +EU의 개인정보보호법(GDPR) 제 17조에 따라, 사용자는 잊혀질 권리(Right to be Forgotten)를 행사했음을 Adjust에 알릴 수 있습니다. 다음 메서드를 호출하면 Adjust SDK가 잊혀질 권리에 대한 사용자의 선택과 관련된 정보를 Adjust 백엔드에 보냅니다.
@@ -1855,7 +1940,7 @@ Adjust.gdprForgetMe(context); @@ -1866,49 +1951,199 @@ Adjust.gdprForgetMe(); ``` -
-네이티브 앱 SDK +Native App SDK
-웹뷰 SDK +Web View SDK
+ + +이 정보를 수신한 후 Adjust는 해당 사용자의 데이터를 삭제하며 Adjust SDK는 해당 사용자에 대한 추적을 중지합니다. 이 기기로부터의 요청은 향후 Adjust에 전송되지 않습니다. + +이러한 설정은 테스트에서 적용하더라도 영구적으로 유지되며, **취소할 수 없습니다.** + +## 특정 유저에 대한 서드파티 공유 + +유저가 서드파티 파트너와의 데이터 공유를 비활성화, 활성화 및 재활성화할 때 Adjust에 이를 고지할 수 있습니다. + +### 특정 유저에 대한 서드파티 공유 비활성화 + +다음 메서드를 호출하여 Adjust SDK가 데이터 공유 비활성화에 대한 사용자의 선택과 관련된 정보를 Adjust 백엔드에 보냅니다: + +
+ + + + + + + + + + + + +
+Native App SDK +
+ +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(false); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
+ +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(false); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+ +이 정보를 수신하면 Adjust는 특정 사용자의 데이터를 파트너와 공유하는 것을 차단하고 Adjust SDK는 계속 정상적으로 작동합니다. + +### 특정 유저에 대한 서드파티 공유 활성화 및 재활성화 + +다음 메서드를 호출하여 Adjust SDK가 데이터 공유에 대한 유저의 선택과 변경 내용을 Adjust 백엔드에 보내도록 하시기 바랍니다. + +
+ + + + + + + + + + + + +
+Native App SDK +
+ +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(true); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
+ +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(true); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+ +Adjust는 정보 수신 후 해당 유저에 대한 파트너와의 데이터 공유 상태를 변경합니다. Adjust SDK는 계속해서 정상적으로 작동합니다. + +Adjust SDK가 Adjust 백엔드로 상세한 옵션을 전송하도록 하려면 다음의 메서드를 호출합니다. + +
+ + + + + + + + + + + + +
+Native App SDK +
+ +```java +AdjustThirdPartySharing adjustThirdPartySharing = new AdjustThirdPartySharing(null); +adjustThirdPartySharing.addGranularOption("PartnerA", "foo", "bar"); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+Web View SDK +
+ +```js +let adjustThirdPartySharing = new AdjustThirdPartySharing(null); +adjustThirdPartySharing.addGranularOption("PartnerA", "foo", "bar"); +Adjust.trackThirdPartySharing(adjustThirdPartySharing); +``` +
+ +### 특정 유저에 대한 동의 측정 + +Adjust 대시보드에서 데이터 프라이버시 설정을 활성화 또는 비활성화하려면(동의 만료 기간 및 유저 데이터 보유 기간 포함) 다음의 메서드를 도입해야 합니다. + +다음의 메서드를 호출하여 Adjust SDK가 데이터 프라이버시 설정을 Adjust 백엔드로 보내도록 하시기 바랍니다. + +
+ + + + + + + + + + + + +
+Native App SDK +
+ +```java +Adjust.trackMeasurementConsent(true); +``` +
+Web View SDK +
-이 정보를 받는 즉시 Adjust는 사용자의 데이터를 삭제하며 Adjust SDK는 해당 사용자 추적을 중단합니다. 향후 이 기기로부터 어떤 요청도 Adjust에 전송되지 않습니다. +```js +Adjust.trackMeasurementConsent(true); +``` +
-테스트를 하는 경우라도 이 결정은 영구적으로 적용됩니다. **즉, 이후에 되돌릴 수 없습니다.** +Adjust가 이 정보를 수신하면 동의 측정을 활성화 또는 비활성화합니다. Adjust SDK는 계속해서 정상적으로 작동합니다. ## 테스트 및 문제 해결 -### “세션 실패(Ignoring too frequent session...)” 오류가 표시됩니다. +### "세션 실패(너무 빈번한 세션 거부) " 오류가 발생한 경우 -이 오류는 일반적으로 설치를 테스트할 때 발생합니다. 앱을 제거하고 다시 설치해도 새 설치를 촉발할 수 없습니다. 서버에서는 SDK가 로컬에서 집계한 세션 데이터를 유실했다고 판단하며 서버에 제공된 장치 관련 정보에 따라 오류 메시지를 무시합니다. +본 오류는 일반적으로 설치 테스트 시 발생합니다. 앱의 설치 삭제와 재설치만으로는 새 설치가 트리거되지 않습니다. 서버는 SDK가 로컬에 집계된 세션 데이터를 소실했다고 판단하여, 해당 기기에 대해 서버에서 이용 가능한 정보를 기반으로 오류 메시지를 무시할 것입니다. -이 동작은 테스트 중 불편을 초래할 수도 있지만, sandbox 동작이 프로덕션 환경과 최대한 일치하도록 하기 위해 필요합니다. +이러한 행동은 테스트 시 번거로울 수 있으나, 샌드박스의 행동이 프로덕션 행동과 최대한 일치하도록 하기 위해 반드시 필요합니다. -앱에 편집자 수준의 액세스 권한(또는 더 높은 권한)이 있는 경우 모든 기기의 앱 세션 데이터를 Adjust 대시보드에서 [테스트 콘솔][testing_console]을 사용하여 재설정할 수 있습니다. +앱에 대해 편집자(또는 그 이상)의 권한이 있는 경우, Adjust 대시보드에서 Adjust의 [테스트용 콘솔][testing_console] 기능을 사용하여 직접 모든 기기에 대한 앱의 세션 데이터를 삭제할 수 있습니다. -기기가 메모리에서 삭제되면 링크에서 `Forgot device`만 반환됩니다. 기기가 이미 메모리에서 삭제되었거나 값이 올바르지 않으면 `Advertising ID not found` 메시지가 반환됩니다. +기기의 정보가 올바르게 삭제되면 테스트용 콘솔은 `Forgot device` 값을 반환합니다. 기기가 이미 삭제된 경우(또는 값이 정확하지 않은 경우) 링크는 `Advertising ID not found` 값을 반환합니다. -기기를 제거하면 GDPR 잊혀질 권리 호출을 되돌릴 수 없게 됩니다. +기기의 삭제는 GDPR 잊혀질 권리의 호출을 뒤바꾸지 않습니다. -현재 패키지에서 액세스 권한을 주는 경우 [개발자 API][dev_api]를 사용하여 기기를 검사하고 제거할 수도 있습니다. +현재 패키지에서 액세스가 있는 경우, Adjust의 [개발자 API][dev_api]를 사용해 기기를 조사하고 삭제할 수 있습니다. -### 브로드캐스트 리시버가 설치 참조 페이지를 제대로 캡처하고 있나요? +### 브로드캐스트 리시버가 설치 리퍼러를 포착하는지 확인하고 싶은 경우 -[설명서](#qs-gps-intent) 지침을 따랐다면 브로드캐스트 리시버는 설치 referrer를 Adjust SDK와 Adjust 서버로 보내도록 구성됩니다. +[가이드](#qs-gps-intent)를 그대로 수행했다면, 브로드캐스트 리시버가 Adjust의 SDK와 서버에 설치 리퍼러를 전송하도록 설정되었을 것입니다. -테스트 설치 참조 페이지를 수동으로 촉발시켜 이 구성을 테스트할 수 있습니다. `com.your.appid`를 앱 ID로 대체하고 Android Studio와 함께 제공되는 [adb](http://developer.android.com/tools/help/adb.html) 도구를 사용하여 다음 명령을 실행합니다. +테스트용 설치 리퍼러를 수동으로 실행하여 이를 테스트해볼 수 있습니다. `com.your.appid`를 앱 ID로 교체하고, Android Studio의 [adb](http://developer.android.com/tools/help/adb.html) 툴을 사용하여 다음의 명령어를 실행하시기 바랍니다. ``` adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver --es "referrer" "adjust_reftag%3Dabc1234%26tracking_id%3D123456789%26utm_source%3Dnetwork%26utm_medium%3Dbanner%26utm_campaign%3Dcampaign" ``` -이미 다른 브로드캐스트 리시버를 INSTALL_REFERRER 인텐트용으로 사용 중이면서 이 [설명서][referrer]를 따른 경우, `com.adjust.sdk.AdjustReferrerReceiver`를 사용자의 브로드캐스트 리시버로 대체합니다. +`INSTALL_REFERRER` 인텐트에 대해 이미 다른 브로드캐스트 리시버를 사용하고 본 [리퍼러 가이드]를 수행한 경우, `com.adjust.sdk.AdjustReferrerReceiver`를 브로드캐스트 리시버로 교체하시기 바랍니다. -`-n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver` 파라미터를 제거하여 기기의 모든 앱에서 `INSTALL_REFERRER` 인텐트를 수신하도록 할 수도 있습니다. +`-n com.your.appid/com.adjust.sdk.AdjustReferrerReceiver` 파라미터를 삭제하여 기기의 모든 앱이 `INSTALL_REFERRER` 인텐트를 수신하도록 설정할 수 있습니다. -로그 레벨을 `verbose`로 설정하면 referrer 확인 시 로그가 보일 것입니다. +로그 레벨을 `verbose`로 설정했다면 리퍼러를 읽을 때 로그를 다음과 같이 볼 수 있습니다. ``` -V/Adjust: Reading query string (adjust_reftag=abc1234&tracking_id=123456789&utm_source=network&utm_medium=banner&utm_campaign=campaign) from reftag +V/Adjust: Referrer to parse (adjust_reftag=abc1234&tracking_id=123456789&utm_source=network&utm_medium=banner&utm_campaign=campaign) from reftag ``` -클릭 패키지를 SDK의 패키지 핸들러에 추가: +그리고 SDK 패키지 핸들러에 추가된 클릭 패키지를 볼 수 있습니다. ``` V/Adjust: Path: /sdk_click @@ -1923,13 +2158,14 @@ V/Adjust: Path: /sdk_click referrer adjust_reftag=abc1234&tracking_id=123456789&utm_source=network&utm_medium=banner&utm_campaign=campaign reftag abc1234 source reftag + tracking_enabled 1 ``` -앱 시작 전에 이 테스트를 실시하면 전송할 패키지가 보이지 않습니다. 패키지는 앱이 시작된 후에 전송됩니다. +앱을 실행하기 전에 이 테스트를 수행했다면, 패키지가 전송되지 않을 것입니다. 패키지는 앱이 실행된 경우에만 전송됩니다. -**중요**: 이 기능 테스트에 `adb` 툴 사용을 권장하지 않는다는 사실에 주의해 주십시오. (여러 개의 파라미터를 &로 구분해 놓은 경우) 참조자 내용 전체를 `adb`에서 테스트한다면, 브로드캐스트 수신자에 들어가게 하기 위해 해당 내용을 인코딩해야 합니다. 인코딩을 하지 않으면 `adb`에서 첫 번째 & 다음에 나오는 참조자 내용을 잘라 버리기 때문에 브로드캐스트 수신자에 올바르지 않은 내용이 전달됩니다. +**중요** 본 기능을 테스트하기 위해 `adb` 툴을 사용하는 것은 권고되지 **않습니다.** 전체 리퍼러 콘텐츠(`&`로 구분된 여러 파라미터가 있는 경우)를 `adb` 툴로 테스트하려면 브로드캐스트 리시버에 도달하도록 이를 인코딩해야 합니다. 인코딩을 하지 않으면 `adb`는 첫 `&` 이후의 리퍼러를 삭제하여, 브로드캐스트 리시버에 잘못된 콘텐츠가 전송됩니다. -인코딩되지 않은 참조자 값이 앱에서 어떻게 수신되는지 보려면 아래 Adjust의 예제 앱을 참조하십시오. 전달되는 내용 중 `MainActivity.java` 파일에 있는 `onFireIntentClick` 메서드 내 인텐트로 촉발되는 부분을 다르게 써 본 후 그 결과를 확인할 수 있습니다. +앱이 인코딩되지 않은 리퍼러 값을 어떻게 수신하는지 확인하려면, Adjust의 예시 앱을 사용하여 전송되는 값을 변경함으로써 `MainActivity.java` 파일 내에 `onFireIntentClick` 메서드 안에 있는 인텐트를 전송하도록 할 수 있습니다. ```java public void onFireIntentClick(View v) { @@ -1940,40 +2176,42 @@ public void onFireIntentClick(View v) { } ``` -`putExtra` 메서드에서 두 번째 파라미터를 필요한 대로 바꿔 쓰시면 됩니다. +`putExtra` 메서드의 두 번째 파라미터는 원하는 콘텐츠로 변경할 수 있습니다. -### 응용 프로그램 런칭 시 이벤트를 촉발할 수 있나요? +### 앱 실행 시 이벤트 트리거 가능 여부 -직관적으로 생각하는 것과는 다를 수 있습니다. 이유는 다음과 같습니다. +앱 실행 시 이벤트를 트리거하면 예상과는 다른 결과가 나올 수 있습니다. 그 이유는 다음과 같습니다. -전역 `Application` 클래스의 `onCreate` 메서드는 응용 프로그램이 시작될 때뿐만 아니라, 시스템 또는 응용 프로그램 이벤트가 앱에 의해 캡처될 때도 호출됩니다. +글로벌 `Application` 클래스의 `onCreate` 메서드는 앱 실행 시 호출될 뿐만 아니라, 시스템이나 앱 이벤트가 앱에 의해 포착된 경우에도 호출됩니다. -Adjust SDK는 이 때 초기화가 준비되지만 실제로 시작되지는 않습니다. 작업 시작 시, 즉 사용자가 실제로 앱을 시작할 경우에만 실제로 시작됩니다. +Adjust SDK는 이 시점에서 초기화에 준비되어있으나 실제로 시작된 것은 아닙니다. 이는 실제 활동(유저가 실제로 앱을 실행함)이 일어난 경우에만 발생합니다. -따라서 이 때 이벤트를 촉발해도 원하는 작업이 수행되지 않습니다. 이런 호출은 사용자가 앱을 시작하지 않은 경우에도 외부 요인에 따라 결정되는 시간에 맞춰 Adjust SDK를 시작하고 이벤트를 보냅니다. +앱 실행 시 이벤트를 트리거하는 것은 실제 유저에 의해 앱이 실행되지 않았음에도 Adjust SDk를 시작하여, 앱의 외부 요소에 따라 결정되는 시점에 이벤트를 전송하도록 합니다. -따라서 응용 프로그램 시작 시 이벤트를 촉발시키면 추적하는 설치 및 세션 수가 부정확해집니다. +따라서 앱 실행 시 이벤트를 트리거하는 것은 트래킹된 설치와 세션 숫자의 정확도에 영향을 줍니다. -설치 후에 이벤트를 촉발시키려면 [어트리뷰션 콜백](#af-attribution-callback)을 사용하십시오. +설치 이후에 이벤트를 트리거하고 싶다면 [어트리뷰션 콜백](#af-attribution-callback)을 사용하시기 바랍니다. -앱이 시작될 때 이벤트를 촉발시키려면 시작된 작업의 `onCreate` 메서드를 사용하십시오. +앱이 실행될 때 이벤트를 트리거하고 싶다면, 해당 활동에 대해 `onCreate` 메서드를 사용하시기 바랍니다. -[dashboard]: http://adjust.com -[adjust.com]: http://adjust.com +[dashboard]: http://adjust.com/ko +[adjust.com]: http://adjust.com/ko [en-readme]: ../../README.md [zh-readme]: ../chinese/README.md [ja-readme]: ../japanese/README.md [ko-readme]: ../korean/README.md -[example-java]: ../../Adjust/example-app-java -[example-kotlin]: ../../Adjust/example-app-kotlin -[example-tv]: ../../Adjust/example-app-tv -[example-webbridge]: ../../Adjust/example-app-webbridge +[example-java]: ../../Adjust/example-app-java +[example-kotlin]: ../../Adjust/example-app-kotlin +[example-keyboard]: ../../Adjust/example-app-keyboard +[example-tv]: ../../Adjust/example-app-tv +[example-webbridge]: ../../Adjust/example-app-webbridge [maven]: http://maven.org -[referrer]: ../korean/multiple-receivers.md -[releases]: https://github.com/adjust/adjust_android_sdk/releases +[referrer]: doc/english/misc/multiple-receivers.md +[리퍼러 가이드]: https://github.com/adjust/android_sdk/blob/master/doc/english/misc/multiple-receivers.md +[releases]: https://github.com/adjust/android_sdk/releases [google-ad-id]: https://support.google.com/googleplay/android-developer/answer/6048248?hl=en [event-tracking]: https://docs.adjust.com/ko/event-tracking [callbacks-guide]: https://docs.adjust.com/ko/callbacks @@ -1981,26 +2219,27 @@ Adjust SDK는 이 때 초기화가 준비되지만 실제로 시작되지는 않 [special-partners]: https://docs.adjust.com/ko/special-partners [attribution-data]: https://github.com/adjust/sdks/blob/master/doc/attribution-data.md [android-dashboard]: http://developer.android.com/about/dashboards/index.html -[currency-conversion]: https://docs.adjust.com/ko/event-tracking/#part-7 +[대시보드]: http://developer.android.com/about/dashboards/index.html +[currency-conversion]: https://docs.adjust.com/ko/event-tracking/#tracking-purchases-in-different-currencies [android-application]: http://developer.android.com/reference/android/app/Application.html [android-launch-modes]: https://developer.android.com/guide/topics/manifest/activity-element.html [google-play-services]: http://developer.android.com/google/play-services/setup.html -[reattribution-with-deeplinks]: https://docs.adjust.com/ko/deeplinking/#part-6-1 -[android-purchase-verification]: https://github.com/adjust/android_purchase_sdk/tree/master/doc/korean -[testing_console]: https://docs.adjust.com/en/testing-console/#how-to-clear-your-advertising-id-from-adjust-between-tests -[dev_api]: https://docs.adjust.com/en/adjust-for-developers/ - -[sdk2sdk-mopub]: ../korean/sdk-to-sdk/mopub.md +[reattribution-with-deeplinks]: https://docs.adjust.com/ko/deeplinking/#manually-appending-attribution-data-to-a-deep-link +[android-purchase-verification]: https://github.com/adjust/android_purchase_sdk +[testing_console]: https://docs.adjust.com/en/testing-console/#how-to-clear-your-advertising-id-from-adjust-between-tests +[dev_api]: https://docs.adjust.com/en/adjust-for-developers/ +[sdk2sdk-mopub]: ../../doc/korean/sdk-to-sdk/mopub.md ## 라이선스 Adjust SDK는 MIT 라이선스에 따라 사용이 허가되었습니다. -Copyright (c) 2012-2019 Adjust GmbH, http://www.adjust.com +Copyright (c) 2012-2021 Adjust GmbH, http://www.adjust.com 이로써 본 소프트웨어와 관련 문서 파일(이하 "소프트웨어")의 복사본을 받는 사람에게는 아래 조건에 따라 소프트웨어를 제한 없이 다룰 수 있는 권한이 무료로 부여됩니다.이 권한에는 소프트웨어를 사용, 복사, 수정, 병합, 출판, 배포 및/또는 판매하거나 2차 사용권을 부여할 권리와 소프트웨어를 제공 받은 사람이 소프트웨어를 사용, 복사, 수정, 병합, 출판, 배포 및/또는 판매하거나 2차 사용권을 부여하는 것을 허가할 수 있는 권리가 제한 없이 포함됩니다. 위 저작권 고지문과 본 권한 고지문은 소프트웨어의 모든 복사본이나 주요 부분에 포함되어야 합니다. 소프트웨어는 상품성, 특정 용도에 대한 적합성 및 비침해에 대한 보증 등을 비롯한 어떤 종류의 명시적이거나 암묵적인 보증 없이 "있는 그대로" 제공됩니다. 어떤 경우에도 저작자나 저작권 보유자는 소프트웨어와 소프트웨어의 사용 또는 기타 취급에서 비롯되거나 그에 기인하거나 그와 관련하여 발생하는 계약 이행 또는 불법 행위 등에 관한 배상 청구, 피해 또는 기타 채무에 대해 책임지지 않습니다. + diff --git a/doc/korean/plugins/oaid.md b/doc/korean/plugins/oaid.md index 301b5181c..53deb92cc 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.26.2' -implementation 'com.adjust.sdk:adjust-android-oaid:4.26.2' +implementation 'com.adjust.sdk:adjust-android:4.27.0' +implementation 'com.adjust.sdk:adjust-android-oaid:4.27.0' ``` Adjust OAID 플러그인을 JAR 파일로 추가할 수도 있습니다. Adjust [릴리스 페이지][releases]에서 다운로드하세요.