dependencies {
//... другие зависимости
implementation 'com.my.tracker:mytracker-sdk:3.3.+'
}
Подключите MyTracker SDK для Android. В качестве примера вы можете использовать готовые демо-приложения на Java и Kotlin.
Минимальная поддерживаемая версия Android — 5.0 (API Level 21).
Для приложений Google Play обязательно наличие в проекте библиотек Google Play Services (модуль com.google.android.gms:play-services-ads-identifier) и Google Play Install Referrer (модуль com.android.installreferrer:installreferrer).
Добавьте в файл build.gradle вашего проекта в секцию dependencies зависимость:
dependencies {
//... другие зависимости
implementation 'com.my.tracker:mytracker-sdk:3.3.+'
}
Скачайте последнюю версию MyTracker.aar.
Добавьте скаченный aar-файл как зависимость в проект.
Добавьте в файл build.gradle вашего приложения следующие зависимости:
dependencies {
...
implementation 'com.android.installreferrer:installreferrer:2.2'
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.0'
implementation 'com.google.android.gms:play-services-appset:16.0.1'
}
(Опционально или в случае использования jar) Если вы используете Proguard, добавьте исключение:
-keep class com.my.tracker.** { *; }
-dontwarn com.my.tracker.**
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {
com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context);
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {
java.lang.String getId();
boolean isLimitAdTrackingEnabled();
}
-keep class com.android.installreferrer.** { *; }
-keep class com.android.vending.billing.** { *; }
-keep class com.android.billingclient.api.** { *; }
(Опционально или в случае использования jar) Добавьте в файл AndroidManifest.xml вашего приложения в секцию manifest необходимые разрешения:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
>
...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
...
</manifest>
Для корректной работы MyTracker SDK настройку и инициализацию трекера необходимо
производить в классе Application
вашего приложения, в методе onCreate
. Для инициализации
трекера необходимо указать ваш SDK_KEY
,
но перед этим следует выполнить необходимые настройки (конфигурации, трекинга пользователей, диплинков и пр.).
SDK_KEY
генерируется автоматически после того, как вы добавите ваше приложение в MyTracker.
Чтобы получить ключ, перейдите на страницу со списком приложений, выберите необходимое и во вкладке Обзор скопируйте ключ.
public class YourApplicationClass extends Application
{
@Override
public void onCreate()
{
super.onCreate();
// При необходимости, настройте конфигурацию трекера
MyTrackerParams trackerParams = MyTracker.getTrackerParams();
MyTrackerConfig trackerConfig = MyTracker.getTrackerConfig();
// …
// Настройте параметры трекера
// …
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, this);
}
}
class YourApplicationClass : Application()
{
override fun onCreate()
{
super.onCreate()
// При необходимости, настройте конфигурацию трекера
val trackerParams = MyTracker.getTrackerParams()
val trackerConfig = MyTracker.getTrackerConfig()
// ...
// Настройте параметры трекера
// ...
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, this)
}
}
Если нет возможности инициализировать трекер в классе Application
, его можно инициализировать в
первой запускающейся активности вашего приложения. В этом случае после инициализации трекера
необходимо вызвать метод trackLaunchManually
.
public class YourActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// При необходимости, настройте конфигурацию трекера
MyTrackerParams trackerParams = MyTracker.getTrackerParams();
MyTrackerConfig trackerConfig = MyTracker.getTrackerConfig();
// ...
// Настройте параметры трекера
// ...
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, getApplication());
MyTracker.trackLaunchManually(this);
}
}
class YourActivity : Activity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
// При необходимости, настройте конфигурацию трекера
val trackerParams = MyTracker.getTrackerParams()
val trackerConfig = MyTracker.getTrackerConfig()
// ...
// Настройте параметры трекера
// ...
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, getApplication())
MyTracker.trackLaunchManually(this)
}
}
Начиная с версии SDK 3.0.10, в автоматическом режиме MyTracker собирает только сбрасываемые идентификаторы устройства:
Данная информация используется MyTracker для рекламных целей в атрибуции установок к источникам трафика и уникализации устройства в рамках проекта. При публикации вашего приложения в Google Play заполните раздел Google Play Data Safety согласно нашим рекомендациям.
Если ваше приложение не размещено в Google Play или для целей проекта требуется сбор дополнительных идентификаторов, вы можете передать их в MyTracker, используя соответствующий метод SDK:
MyTrackerParams trackerParams = MyTracker.getTrackerParams();
trackerParams.setCustomParam("custom_param_key", "custom_param_value");
val trackerParams = MyTracker.getTrackerParams()
trackerParams.setCustomParam("custom_param_key", "custom_param_value");
Метод поддерживает следующие значения custom_param_key
:
Согласно политике конфиденциальности Google Play, android_id нельзя использовать вместе с GAID. Но он может быть передан в случае размещения приложения в альтернативных магазинах приложений.
Согласно политике конфиденциальности Google Play, imei нельзя использовать вместе с GAID. Но он может быть передан в случае размещения приложения в альтернативных магазинах приложений.
Передача перечисленных идентификаторов является опциональной.
Пример инициализации MyTracker с передачей дополнительных идентификаторов:
public class YourApplicationClass extends Application
{
// Метод получения Android ID
static @Nullable String getAndroidId(Context context)
{
try
{
ContentResolver cr = context.getContentResolver();
if (cr != null)
{
return Settings.Secure.getString(cr, Settings.Secure.ANDROID_ID);
}
}
catch (Throwable e) {}
return null;
}
// Метод получения MAC
static @Nullable String getMac()
{
try
{
List<NetworkInterface> all = Collections.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface nif : all)
{
if (!nif.getName().equalsIgnoreCase("wlan0"))
{
continue;
}
try
{
byte[] macBytes = nif.getHardwareAddress();
if (macBytes == null)
{
return null;
}
StringBuilder result = new StringBuilder();
for (byte b : macBytes)
{
result.append(String.format("%02X:", b));
}
int length = result.length();
if (length > 0)
{
result.deleteCharAt(length - 1);
}
return result.toString();
}
catch (Throwable e) {}
}
}
catch (Throwable e) {}
return null;
}
@Override
public void onCreate()
{
super.onCreate();
// Настройте конфигурацию трекера
MyTrackerParams trackerParams = MyTracker.getTrackerParams();
// Настройте передачу дополнительных идентификаторов
trackerParams.setCustomParam("android_id", getAndroidId(getApplicationContext()));
trackerParams.setCustomParam("mac", getMac());
MyTrackerConfig trackerConfig = MyTracker.getTrackerConfig();
// …
// Настройте параметры трекера
// …
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, this);
}
}
class YourApplicationClass : Application()
{
override fun onCreate()
{
super.onCreate()
// Настройте конфигурацию трекера
val trackerParams = MyTracker.getTrackerParams()
// Настройте передачу дополнительных идентификаторов
trackerParams.setCustomParam("android_id", getAndroidId(applicationContext))
trackerParams.setCustomParam("mac", getMac())
val trackerConfig = MyTracker.getTrackerConfig()
// …
// Настройте параметры трекера
// …
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, this)
}
// Метод получения Android ID
fun getAndroidId(context: Context): String?
{
try
{
val cr = context.contentResolver
if (cr != null)
{
return Settings.Secure.getString(cr, Settings.Secure.ANDROID_ID)
}
} catch (e: Throwable)
{
}
return null
}
// Метод получения MAC
fun getMac(): String?
{
try
{
val all: List<NetworkInterface> = Collections.list(NetworkInterface.getNetworkInterfaces())
for (nif in all)
{
if (!nif.name.equals("wlan0", ignoreCase = true))
{
continue
}
try
{
val macBytes = nif.hardwareAddress ?: return null
val result = StringBuilder()
for (b in macBytes)
{
result.append(String.format("%02X:", b))
}
val length = result.length
if (length > 0)
{
result.deleteCharAt(length - 1)
}
return result.toString()
}
catch (e: Throwable)
{
}
}
}
catch (e: Throwable)
{
}
return null
}
}
Конфигурацию трекера можно произвести через экземпляр класса MyTrackerConfig
, который доступен через метод
MyTracker.getTrackerConfig()
. Параметры трекера — через экземпляр класса MyTrackerParams
, через метод
MyTracker.getTrackerParams()
. Можно настраивать следующие параметры:
TrackingLaunchEnabled: сбор данных о запусках приложения. По умолчанию true.
@NonNull MyTrackerConfig setTrackingLaunchEnabled(boolean trackingLaunchEnabled)
fun setTrackingLaunchEnabled(trackingLaunchEnabled: Boolean): MyTrackerConfig
LaunchTimeout: интервал в секундах, в течение которого не будет засчитываться новый запуск и прерываться сессия при сворачивании приложения. По умолчанию 30 секунд. Можно установить значение в диапазоне 30-7200 секунд.
@NonNull MyTrackerConfig setLaunchTimeout(int seconds)
fun setLaunchTimeout(seconds: Int): MyTrackerConfig
BufferingPeriod: интервал в секундах, в течение которого события будут накапливаться на устройстве перед отправкой на сервер. По умолчанию 900 секунд. Можно установить значение в диапазоне 1-86400 секунд (1 день).
@NonNull MyTrackerConfig setBufferingPeriod(int seconds)
fun setBufferingPeriod(seconds: Int): MyTrackerConfig
ForcingPeriod: интервал в секундах после установки или обновления приложения, в течение которого события будут незамедлительно отправляться на сервер без локальной буферизации. По умолчанию 0 секунд (незамедлительная отправка выключена). Можно установить значение в диапазоне 0-432000 секунд (5 суток).
@NonNull MyTrackerConfig setForcingPeriod(int seconds)
fun setForcingPeriod(seconds: Int): MyTrackerConfig
AutotrackingPurchaseEnabled: автоматический сбор данных о платежах в приложении. По умолчанию true.
@NonNull MyTrackerConfig setAutotrackingPurchaseEnabled(boolean autotrackingPurchaseEnabled)
fun setAutotrackingPurchaseEnabled(autotrackingPurchaseEnabled: Boolean): MyTrackerConfig
LocationTrackingMode: отслеживание местоположения пользователя. По умолчанию NONE.
Если ваше приложение запрашивает доступ к местоположению пользователя, рекомендуем включить передачу данных для более точной аналитики. В описании приложения в Google Play не забудьте указать «Да» в вопросе про сбор данных о местоположении.
Доступные значения:
LocationTrackingMode действует с версии SDK 3.3.0 вместо TrackingLocationEnabled
@NonNull MyTrackerConfig setLocationTrackingMode(@LocationTrackingMode int locationTrackingMode)
fun setLocationTrackingMode(@LocationTrackingMode locationTrackingMode: Int): MyTrackerConfig
TrackingPreinstallEnabled: отслеживание предустановок с помощью метода System Properties. По умолчанию true. MyTracker отследит предустановку, если приложение передано производителю устройств вместе со специальным ключом-значением. Подробнее см. документацию на метод System Properties.
@NonNull MyTrackerConfig setTrackingPreinstallEnabled(boolean trackingPreinstallEnabled)
fun setTrackingPreinstallEnabled(trackingPreinstallEnabled: Boolean): MyTrackerConfig
ApkPreinstallParams: отслеживание предустановок в ретейле. MyTracker отследит предустановку, если приложение передано ретейлеру вместе со специальными APK параметрами. Подробнее см. документацию на метод ApkPreinstallParams.
Сборка приложения с APK параметрами предназначена только для ретейлера. Не следует размещать её в магазине приложений, поскольку все установки будут записаны на одного партнёра.
@NonNull MyTrackerConfig setApkPreinstallParams(String apkPreinstallParams)
fun setApkPreinstallParams(apkPreinstallParams: String): MyTrackerConfig
Region: регион, где расположен сервер сбора статистики.
С 1 марта 2023г. параметр region
недействителен.
Вне зависимости от выбранного значения данные
будут отправляться на серверы, расположенные на территории Российской Федерации.
Чтобы выбрать другой регион,
обратитесь в службу поддержки
Необходимость изменить регион может возникнуть, например, в связи с требованиями законодательства. Доступные значения:
Region.RU — сервер, расположенный на территории Российской Федерации
Region.EU — сервер, расположенный на территории Европы
@NonNull MyTrackerConfig setRegion(int region)
fun setRegion(region: Int): MyTrackerConfig
Включение/выключение режима отладки производится через статические методы
класса MyTracker
. По умолчанию false.
@AnyThread
void setDebugMode(boolean debugMode)
@AnyThread
fun setDebugMode(debugMode: Boolean)
Для получения статистики не только по устройствам, но и по пользователям, установите параметр customUserId
.
Это уникальный идентификатор пользователя в вашем проекте, который вы присваиваете ему в момент регистрации.
Он должен оставаться неизменным, даже если пользователь авторизуется на другом устройстве.
Установив этот параметр, вы сможете оценить размер и активность аудитории приложения, вне зависимости от того,
на скольких устройствах пользователя установлено ваше приложение.
А также не будете терять историю накопленных по пользователю данных, если он решит сменить устройство. Подробнее см. раздел Трекинг.
Важно установить параметр до трекинга событий, чтобы передавать идентификатор пользователя с каждым полученным событием.
public void setUserInfo()
{
MyTrackerParams trackerParams = MyTracker.getTrackerParams();
// Установите пользовательский идентификатор
trackerParams.setCustomUserId("user_id");
}
fun setUserInfo()
{
val trackerParams = MyTracker.getTrackerParams()
// Установите пользовательский идентификатор
trackerParams.setCustomUserId("user_id")
}
Если до установки customUserId
в приложении уже сформирована база зарегистрированных пользователей,
то MyTracker не сможет получить данные о времени их регистрации и произвести точный расчёт
Lifetime метрик.
Для таких пользователей Lifetime статистика будет считаться на дату первого полученного события с customUserId
.
Чтобы отключить трекинг пользователей, передайте пустое значение в параметре customUserId
.
События можно отправлять через статические методы класса MyTracker
.
Перед вызовом методов установите параметр customUserId,
чтобы с каждым полученным событием передавать идентификатор пользователя.
Доступны следующие методы для трекинга различных типов событий:
Событие регистрации. Метод должен быть вызван сразу после того, как пользователь зарегистрируется в приложении.
Идентификатор пользователя должен быть передан в параметре userId
.
Идентификатор userId — обязательный параметр начиная с SDK версии 2.0.8
@AnyThread
void trackRegistrationEvent(@NonNull String userId)
@AnyThread
fun trackRegistrationEvent(userId: String)
Событие авторизации. Метод должен быть вызван сразу после того, как пользователь успешно авторизуется в приложении.
Идентификатор пользователя должен быть передан в параметре userId
.
Идентификатор userId — обязательный параметр начиная с SDK версии 2.0.8
@AnyThread
void trackLoginEvent(@NonNull String userId)
@AnyThread
fun trackLoginEvent(userId: String)
Событие отправки приглашения. Дополнительный параметр eventParams
позволяет задать
произвольные параметры ключ-значение для события. Максимальная длина ключа и значения — 255
символов.
@AnyThread
void trackInviteEvent()
@AnyThread
void trackInviteEvent(@Nullable Map<String, String> eventParams)
@AnyThread
fun trackInviteEvent()
@AnyThread
fun trackInviteEvent(eventParams: Map<String, String>?)
Событие достижения уровня. Можно отправлять как с указанием номера уровня (параметр level
),
так и без. Дополнительный параметр eventParams
позволяет задать произвольные параметры
ключ-значение для события. Максимальная длина ключа и значения — 255 символов.
@AnyThread
void trackLevelEvent()
@AnyThread
void trackLevelEvent(@Nullable Map<String, String> eventParams)
@AnyThread
void trackLevelEvent(int level, @Nullable Map<String, String> eventParams)
@AnyThread
fun trackEvent(name: String)
@AnyThread
fun trackEvent(name: String, eventParams: Map<String, String>?)
Произвольное событие с заданным именем. Дополнительный параметр eventParams
позволяет задать
произвольные параметры ключ-значение для события. Максимальная длина имени, ключа и значения — 255
символов.
@AnyThread
void trackEvent(@Nullable String name)
@AnyThread
void trackEvent(@Nullable String name, @Nullable Map<String, String> eventParams)
@AnyThread
fun trackEvent(name: String)
@AnyThread
fun trackEvent(name: String, eventParams: Map<String, String>?)
Пример:
Map<String, String> eventParams = new HashMap<>();
eventParams.put("someParamKey1", "someParamValue1");
eventParams.put("someParamKey2", "someParamValue2");
MyTracker.trackEvent("eventName", eventParams);
val eventParams = HashMap<String, String>()
eventParams["someParamKey1"] = "someParamValue1";
eventParams["someParamKey2"] = "someParamValue2";
MyTracker.trackEvent("eventName", eventParams);
Принудительная отправка всех событий и сброс таймера отправки.
SDK для снижения нагрузки на канал и минимизации влияния на производительность приложения
накапливает в буфер все события на устройстве перед отправкой на сервер и регулярно
отправляет собранные данные сжатым пакетом.
По умолчанию данные отправляются на сервер каждые 15 минут. Этот интервал можно настроить
через параметр bufferingPeriod
от 1 секунды до 1 суток.
Если пользователь закрыл приложение, то отправка будет произведена при следующем запуске.
Но некоторые события крайне важно получать в аналитику как можно раньше, особенно в первые
сессии после установки приложения.
В этом поможет метод flush()
.
@AnyThread
void flush()
@AnyThread
fun flush()
MyTracker собирает данные по in-app платежам и подпискам.
Если вы используете Google Play Billing Library, для автоматического отслеживания платежей необходимо вызвать соответствующий метод MyTracker из метода onPurchasesUpdated слушателя BillingClient.
private BillingClient client;
...
client = BillingClient.newBuilder(context)
.setListener(new PurchasesUpdatedListener()
{
@Override
public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases)
{
MyTracker.onPurchasesUpdated(responseCode, (List) purchases);
// ваш код обработки платежей
// ...
}
})
.build();
...
private var client: BillingClient? = null
// ...
client = BillingClient.newBuilder(this)
.setListener { billingResult, purchases ->
MyTracker.onPurchasesUpdated(billingResult.responseCode, purchases as List<Any>?)
// ...
// ваш код обработки платежей
// ...
}
.build()
// ...
Если вы используете собственную реализацию In-App Billing API, для автоматического отслеживания платежей необходимо вызвать соответствующий метод MyTracker из метода onActivityResult активности, запустившей процесс платежа.
public static final int PURCHASE_REQUEST_CODE = 1001;
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PURCHASE_REQUEST_CODE)
{
MyTracker.onActivityResult(resultCode, data);
// ваш код обработки платежа
// ...
}
}
...
// ...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
{
super.onActivityResult(requestCode, resultCode, data)
if (PURCHASE_REQUEST_CODE == requestCode)
{
MyTracker.onActivityResult(resultCode, data)
// ...
// ваш код обработки платежа
// ...
}
}
// ...
companion object
{
const val PURCHASE_REQUEST_CODE = 1001
}
Если вы хотите отслеживать платежи вручную, необходимо выключить автоматический трекинг
параметром autotrackingPurchaseEnabled = false
, и воспользоваться методами:
@AnyThread
void trackPurchaseEvent(@NonNull JSONObject skuDetails,
@NonNull JSONObject purchaseData,
@NonNull String dataSignature)
@AnyThread
void trackPurchaseEvent(@NonNull JSONObject skuDetails,
@NonNull JSONObject purchaseData,
@NonNull String dataSignature,
@Nullable Map<String, String> eventParams)
@AnyThread
fun trackPurchaseEvent(skuDetails: JSONObject,
purchaseData: JSONObject,
dataSignature: String)
@AnyThread
fun trackPurchaseEvent(skuDetails: JSONObject,
purchaseData: JSONObject,
dataSignature: String,
eventParams: Map<String, String>?)
При включенном автоматическом трекинге платежей вызовы этих методов игнорируются. Обязательные параметры:
skuDetails
— ответ на запрос getSkuDetails()
платежа к google API, согласно документации.
purchaseData
— объект JSON, который находится в ответе на запрос getBuyIntent()
,
в поле INAPP_PURCHASE_DATA, согласно документации.
dataSignature
— строка, которая находится в ответе на запрос getBuyIntent()
, в
поле INAPP_DATA_SIGNATURE.
Ответы на getSkuDetails()
и getBuyIntent()
приходят в виде Bundle, поля в них имеют тип
String, и их необходимо преобразовать в JSONObject перед отправкой.
Дополнительный параметр eventParams
позволяет задать произвольные параметры ключ-значение для
события. Максимальная длина ключа и значения — 255 символов.
public static final int PURCHASE_REQUEST_CODE = 1001;
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PURCHASE_REQUEST_CODE && resultCode == RESULT_OK)
{
try
{
final String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
final String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
final JSONObject purchaseDataJson = new JSONObject(purchaseData);
// Самостоятельное получение skuDetails
final JSONObject skuDetailsJson = obtainSkuDetailJson(purchaseData);
MyTracker.trackPurchaseEvent(skuDetailsJson, purchaseDataJson, dataSignature);
// ваш код обработки платежа
// ...
}
catch (Exception ignored)
{
}
}
}
...
// ...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
{
super.onActivityResult(requestCode, resultCode, data)
// Checking if the request code is PURCHASE_REQUEST_CODE
if (PURCHASE_REQUEST_CODE == requestCode && RESULT_OK == resultCode && data != null)
{
try
{
val dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE") ?: return
val purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA") ?: return
// Самостоятельное получение skuDetails
val skuDetailsJson = obtainSkuDetailJson(purchaseData)
val purchaseDataJson = JSONObject(purchaseData)
MyTracker.trackPurchaseEvent(skuDetailsJson, purchaseDataJson, dataSignature)
}
catch (_: Exception)
{
}
}
}
// ...
companion object
{
const val PURCHASE_REQUEST_CODE = 1001
}
// ...
Для передачи данных с вашего сервера на сервер MyTracker (например, неотслеживаемых данных, офлайн-событий и пр.),
может понадобиться специальный идентификатор устройства — instanceId
.
Идентификатор представляет собой значение UUID v4,
которое генерируется в момент первого запуска приложения и остаётся неизменным до удаления приложения (или данных приложения) с устройства.
Получить значение instanceId
можно с помощью статического метода класса MyTracker
(не следует использовать этот метод на главном потоке).
@WorkerThread
@NonNull String getInstanceId(@NonNull Context context)
@WorkerThread
fun getInstanceId(context: Context): String
Важно как можно раньше начать собирать instanceId
и отправлять на ваш сервер,
если вы используете его для передачи данных к S2S API.
Вместо instanceId
в запросах к API
можно указывать любой другой идентификатор устройства: gaid
, androidId
, appSetId
,
и/или идентификатор пользователя customUserID
(в этом случае данные будут формировать статистику по пользователю).
Подробнее
Диплинки позволяют передать в приложение дополнительные параметры, с помощью которых можно перенаправить пользователя на определённый экран в приложении. Диплинк может быть обычным, когда параметры передаются при первом запуске приложения, и отложенным, когда параметры могут быть переданы при первом запуске после установки. Подробнее см. раздел Диплинки.
Для поддержки обычных диплинков, в каждой активности вашего приложения поддерживающей диплинки,
в методах onCreate
и onNewIntent
необходимо вызывать метод handleDeeplink
.
public class SomeActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate();
// ...
String deeplink = MyTracker.handleDeeplink(getIntent());
if(deeplink != null)
{
// Обработка диплинка
}
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
// ...
String deeplink = MyTracker.handleDeeplink(intent);
if(deeplink != null)
{
// Обработка диплинка
}
}
}
class SomeActivity : Activity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
// ...
val deeplink = MyTracker.handleDeeplink(intent)
if (deeplink != null)
{
// ...
// Обработка диплинка
// ...
}
}
override fun onNewIntent(intent: Intent?)
{
super.onNewIntent(intent)
// ...
val deeplink = MyTracker.handleDeeplink(intent)
if (deeplink != null)
{
// ...
// Обработка диплинка
// ...
}
}
}
Для поддержки отложенных диплинков в своем приложении необходимо установить
слушатель, реализующий интерфейс MyTracker.AttributionListener
. Слушатель будет
вызван только один раз, при первом запуске приложения, в случае, если для текущей
установки был найден отложенный диплинк. В качестве параметра в метод onReceiveAttribution
будет передан объект атрибуции MyTrackerAttribution
, содержащий свойство deeplink.
Значение свойства обязательно должно быть проверено на принадлежность именно вашему
приложению, во избежание открытия стороннего приложения, при использовании перехода по Intent.
public class YourApplicationClass extends Application
{
@Override
public void onCreate()
{
super.onCreate();
// При необходимости, настройте конфигурацию трекера
MyTrackerParams trackerParams = MyTracker.getTrackerParams();
MyTrackerConfig trackerConfig = MyTracker.getTrackerConfig();
// ...
// Настройте параметры трекера
// ...
// Установите слушатель для получения отложенного диплинка
MyTracker.setAttributionListener(new MyTracker.AttributionListener()
{
@Override
public void onReceiveAttribution(MyTrackerAttribution attribution)
{
String deeplink = attribution.deeplink;
// Обработка отложенного диплинка
// ...
}
});
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, this);
}
}
class YourApplicationClass : Application
{
override fun onCreate()
{
super.onCreate()
// При необходимости, настройте конфигурацию трекера
val trackerParams = MyTracker.getTrackerParams();
val trackerConfig = MyTracker.getTrackerConfig();
// ...
// Настройте параметры трекера
// ...
// Установите слушатель для получения отложенного диплинка
MyTracker.setAttributionListener { myTrackerAttribution ->
val deeplink = myTrackerAttribution.deeplink
// ...
// Обработка отложенного диплинка
// ...
}
// Инициализируйте трекер
MyTracker.initTracker(SDK_KEY, this)
}
}
При желании, при установке слушателя вы можете задать Handler потока выполнения методов слушателя c
помощью метода setAttributionListener(AttributionListener attributionListener, Handler handler)
.
Если при установке слушателя не был установлен хэндлер, метод onReceiveAttribution
будет вызван в
главном потоке.