Начните работу с Android SDK #
Tenjin Android SDK позволяет пользователям отслеживать события и установки в своих приложениях для Android. Чтобы узнать больше о Tenjin и предлагаемых нами продуктах, посетите сайт https://www.tenjin.com.
- Пожалуйста, ознакомьтесь с нашим Примечания к выпуску чтобы увидеть подробную историю изменений.
- Мы рекомендуем использовать последнюю версию Android Studio.
- Для интеграции с Unity посетите сайт https://github.com/tenjin/tenjin-unity-sdk.
- По всем вопросам и за поддержкой обращайтесь по адресу: support@tenjin.com.
Базовая интеграция #
Ручная установка #
Используйте шаги, перечисленные ниже в разделе ‘Android Studio’.’
Maven #
Если вы используете Maven, добавьте реализацию com.tenjin:android-sdk:VERSION к вашему Gradle зависимости и добавьте mavenCentral() в исходные репозитории, если его там еще нет.
Android Studio #
- Загрузите последнюю версию Android SDK с сайта здесь.
- Добавьте Tenjin SDK в проект Android Studio. Перейдите в навигатор проектов в Android Studio. Выберите опцию
Проектв Навигаторе проекта. Вы найдетеlibsпапка подприложениемодуль вашего проекта Android Studio. - Вам нужно добавить файл
tenjin.jarилиtenjin.aarкlibsпапка.
- В проекте Android Studio под
приложениевыберите модульbuild.gradleи добавьте следующее в блок зависимостей:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
implementation files('libs/tenjin.aar')
}> У нас есть демо-проект - [tenjin-android-sdk-demo][31], который демонстрирует интеграцию tenjin-android-sdk. Вы можете использовать этот проект в качестве примера, чтобы понять, как интегрировать tenjin-android-sdk.
Магазин Google Play или Amazon #
Если вы распространяете свои приложения в Google Play Store или магазине Amazon, выполните следующие начальные настройки.
Разрешение #
Tenjin SDK требует следующих разрешений:
android:имя="android.permission.INTERNET" />
android:имя="android.permission.ACCESS_NETWORK_STATE" />
Службы Google Play требуют, чтобы все приложения уровня API 32 (Android 13), использующие advertising_id (Android Advertising ID (AAID)), объявляли разрешение Google Play Services AD_ID (показано ниже) в своем файле манифеста. Пожалуйста, добавьте это разрешение как можно скорее. Для использования нижеуказанного разрешения вам также необходимо обновить tenjin-android-sdk до версии 1.12.8.
android:name="com.google.android.gms.permission.AD_ID"/> Рекламный идентификатор Android (AAID) и реферер установки #
Добавить Рекламный идентификатор Android (AAID) и Установить реферер библиотеки, добавьте его в файл build.gradle.
dependencies {
implementation 'com.google.android.gms:play-services-ads-identifier:{version}'
implementation 'com.android.installreferrer:installreferrer:{version}'
}
Чтобы иметь возможность собирать Установочный реферер Meta, add these queries to your Android Manifest:
<queries>
android:name="com.facebook.katana" />
<package android:name="com.instagram.android" />
Next, add this value to your strings.xml file:
имя="facebook_app_id" translatable="false">YOUR_META_APP_ID App Store #
По умолчанию, неуточненный является магазином приложений по умолчанию. Обновите значение магазина приложений на googleplay или amazon, В зависимости от вашего приложения.
AndroidManifest.xml:
android:name="TENJIN_APP_STORE"
android:value="googleplay" />setAppStore():
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.setAppStore(TenjinSDK.AppStoreType.googleplay);Параметры магазина приложений #
TenjinSDK.AppStoreType.googleplay // Google Play App Store
TenjinSDK.AppStoreType.amazon // Amazon AppStore
TenjinSDK.AppStoreType.другие // OtherИнициализация приложения #
- Получите свой
SDK_KEYсо страницы вашего приложения. Примечание:SDK_KEYуникален для каждого вашего приложения. Вы можете создать до 3 ключей для одного приложения.

- В Activity импортируйте Tenjin:
import com.tenjin.android.TenjinSDK; - В
onResumeметод вашего основногоДеятельностьдобавьте следующую строку кода:
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.connect();instance.connect(); “ ПРИМЕЧАНИЕ: Если в вашем приложении есть логика для запроса согласия пользователя между onCreate и onResume, используйте onCreate вместо onResume для инициализации Tenjin SDK, поскольку пользователи, не давшие согласия, не будут отслеживаться на сайте onResume`.
ПРИМЕЧАНИЕ: Пожалуйста, убедитесь, что вы внедрили этот код в каждый onResume, Не только при первом открытии приложения.
Другой магазин Android #
Если вы распространяете свои приложения за пределами Google Play Store или Amazon store (другие магазины Android), выполните следующие начальные настройки.
Разрешение #
android:имя="android.permission.INTERNET" />
android:имя="android.permission.ACCESS_NETWORK_STATE" /> Позже в этом году Google Play Services потребует, чтобы все приложения уровня API 32 (Android 13), использующие advertising_id (Android Advertising ID (AAID)), объявили разрешение Google Play Services AD_ID (показано ниже) в своем файле манифеста. Пожалуйста, добавьте это разрешение как можно скорее. Для использования нижеуказанного разрешения вам также необходимо обновить tenjin-android-sdk до версии 1.12.8.
android:name="com.google.android.gms.permission.AD_ID"/> Рекламный идентификатор Android (AAID) и реферер установки #
Добавить Рекламный идентификатор Android (AAID) и Установить реферер библиотеки, добавьте его в файл build.gradle.
dependencies {
implementation 'com.google.android.gms:play-services-ads-identifier:{version}'
implementation 'com.android.installreferrer:installreferrer:{version}'
}Если вы используете Рекламная сеть который определяет IMEI, вам нужно будет включить следующие разрешения. (Если вы распространяете свои приложения в Google Play, пожалуйста НЕ add this permission.)
android:name="android.permission.READ_PHONE_STATE" /> OAID #
Tenjin поддерживает продвижение вашего приложения в других магазинах приложений Android с помощью Android OAID. У нас есть следующие требования для интеграции библиотек OAID.
MSA OAID #
MSA OAID - это рекламный идентификатор для устройств, произведенных в Китае, который предоставляет MSA (Mobile Security Alliance). Для интеграции с Библиотека MSA, Загрузите следующее oaid\_sdk\_1.0.25.aar и supplierconfig.json.
Добавьте следующее в файл gradle вашего проекта:
implementation files('libs/oaid_sdk_1.0.25.aar')Обязательно скопируйте supplierconfig.json файл в активы папку вашего проекта.
Huawei OAID #
Если вы находитесь за пределами Китая, вы можете собирать OAID с помощью библиотеки, предоставленной компанией Huawei. Для интеграции с Библиотека Huawei OAID, Добавьте в проект следующее:
В вашем build.gradle добавьте адрес Maven для SDK Huawei:
allprojects {
repositories {
google()
maven { url 'https://developer.huawei.com/repo/' }
}
}
dependencies {
implementation 'com.huawei.hms:ads-identifier:{version}'
}Huawei Install Referrer #
Если вы продвигаете свое приложение с помощью Галерея приложений Huawei, добавьте оба Huawei OAID SDK сверху и Установить реферер библиотека.
dependencies {
implementation 'com.huawei.hms:ads-identifier:{version}'
implementation 'com.huawei.hms:ads-installreferrer:{version}'
}
App Store #
По умолчанию, неуточненный является магазином приложений по умолчанию. Обновите значение магазина приложений до другие.
AndroidManifest.xml:
android:name="TENJIN_APP_STORE"
android:value="other" />setAppStore():
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.setAppStore(TenjinSDK.AppStoreType.другие);Инициализация приложения #
- Получите свой
SDK_KEYсо страницы вашего приложения. Примечание:SDK_KEYуникален для каждого вашего приложения. Вы можете создать до 3 ключей для одного приложения.

- В Activity импортируйте Tenjin:
import com.tenjin.android.TenjinSDK; - В
onCreateметод вашего основногоДеятельностьдобавьте следующую строку кода:
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.connect();ПРИМЕЧАНИЕ: Пожалуйста, убедитесь, что вы внедрили этот код в каждый onCreate, не только при первом открытии приложения. Если мы заметим, что вы не следуете нашим рекомендациям, мы не сможем предоставить вам надлежащую поддержку, или ваш аккаунт может быть приостановлен.
Настройки Proguard #
-keep class com.tenjin.** { *; }
-keep public class com.google.android.gms.ads.identifier.** { *; }
-keep public class com.google.android.gms.common.** { *; }
-keep public class com.android.installreferrer.** { *; }
-keep class * extends java.util.ListResourceBundle {
protected java.lang.Object[][] getContents();
}
-keepattributes *Annotation*Не затуманивайте классы oaid:
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.bun.lib.**{*;}
-keep class com.bun.miitmdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public <methods>;}Если вы используете библиотеки Huawei, вы можете воспользоваться этими настройками:
-keep class com.huawei.hms.ads.** { *; }
-keep interface com.huawei.hms.ads.** { *; }Дополнительная интеграция #
GDPR #
Общий регламент по защите данных (ЕС) (GDPR) - это регламент в законодательстве ЕС о защите данных и конфиденциальности в Европейском союзе (ЕС) и Европейской экономической зоне (ЕЭЗ).
Вам нужно получить согласие пользователя, разрешает ли он отслеживание или нет, в первом ap open, а затем записать результат в checkOptInValue() . После этого вы можете следовать приведенным ниже инструкциям. Если вам не нужно соответствовать GDPR в вашем приложении, пожалуйста, просто проигнорируйте этот раздел.
В соответствии с требованиями GDPR, с помощью SDK Tenjin вы можете отказаться от использования устройств/пользователей или выбрать, какие именно параметры, связанные с устройством, следует включить или исключить. optOut() не будет отправлять никаких API-запросов в Tenjin, и мы не будем обрабатывать никаких событий.
Чтобы отказаться от участия/отказаться от участия:
import com.tenjin.android.TenjinSDK;
public class TenjinDemo extends ActionBarActivity {
@Override
public void onResume() {
//standard code
super.onResume()
//Integrate TenjinSDK connect call
String apiKey = " ";
TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);
boolean userOptIn = checkOptInValue();
if (userOptIn) {
instance.optIn();
}
else {
instance.optOut();
}
instance.connect();
//Your other code...
//...
}
protected boolean checkOptInValue(){
// check opt-in value
// return true; // if user opted-in
return false;
}
}Чтобы включить/выключить определенные параметры, связанные с устройством, вы можете использовать optInParams() или optOutParams().
optInParams()будет отправлять только те параметры устройства, которые указаны.optOutParams()отправит все параметры, связанные с устройством, кроме тех, которые указаны.- Обратите внимание, что для правильного отслеживания устройств в системе Tenjin нам необходим следующий параметр. Если обязательный параметр отсутствует, событие не будет обработано или записано.
рекламный идентификатор- Если вы нацелились на IMEI и/или OAID Рекламные сети, Эти параметры являются обязательными:
imeiоаид- Если вы планируете использовать Google AdWords, эти параметры обязательны:
платформаos_versionверсия приложениялокальмодель устройстваbuild_idрекламный идентификатор
Если вы хотите получить только определенные параметры, связанные с устройством, используйте optInParams(). В примере ниже мы рассмотрим только эти параметры, связанные с устройством: ip_адрес, рекламный идентификатор, limit_ad_tracking, и реферер.
String apiKey = " ";
TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);
String[] optInParams = {"ip_адрес", "рекламный идентификатор", "limit_ad_tracking", "реферер"};
instance.optInParams(optInParams);
instance.connect();Если вы хотите отправить ВСЕ параметры, кроме определенных параметров, связанных с устройством, используйте optOutParams(). В приведенном ниже примере мы отправим ВСЕ параметры, связанные с устройством, кроме:
String apiKey = " ";
TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);
String[] optOutParams = {"локаль", "timezone", "build_id"};
instance.optOutParams(optOutParams);
instance.connect();Включение/выключение с помощью CMP #
Вы можете автоматически отказаться от участия или отказаться от участия, используя свои согласия CMP (цель 1), которые уже сохранены в устройстве пользователя. Метод возвращает булево значение, чтобы сообщить вам о том, был ли пользователь согласен или нет.
optInOutUsingCMP()
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
optInOut = instance.optInOutUsingCMP(); Параметры, связанные с устройством #
| Param | Description | Reference |
|---|---|---|
| ip\_address | IP Address | |
| advertising\_id | Device Advertising ID | [Android][32] |
| limit\_ad\_tracking | limit ad tracking enabled | [Android][33] |
| оаид | Open Advertising ID | [Android][34] |
| imei | Device IMEI | [Android][35] |
| платформа | Platform | Android |
| реферер | Google Play Install Referrer | [Android][36] |
| os\_version | operating system version | [Android][37] |
| device | device name | [Android][38] |
| device\_manufacturer | device manufacturer | [Android][39] |
| device\_model | device model | [Android][40] |
| device\_brand | device brand | [Android][41] |
| device\_product | device product | [Android][42] |
| carrier | phone carrier | [Android][43] |
| connection\_type | cellular or wifi | [Android][44] |
| screen\_width | device screen width | [Android][45] |
| screen\_height | device screen height | [Android][46] |
| os\_version\_release | operating system version | [Android][47] |
| build\_id | build ID | [Android][48] |
| локаль | device locale | [Android][49] |
| country | locale country | [Android][50] |
| timezone | timezone | [Android][51] |
События покупки #
Чтобы понять доходы пользователей и их поведение при покупке, разработчики могут отправлять транзакция события в Tenjin. Tenjin будет подтверждать транзакция квитанции для вас. Обратите внимание, что в настоящее время мы поддерживаем только транзакции IAP из Google Play.
ВАЖНО: Вам нужно будет добавить открытый ключ вашего приложения в Приборная панель Тендзина (на странице редактирования приложения). Вы можете получить свой открытый ключ RSA в Base64-кодировке из файла Консоль разработчика Google Play \> Выберите приложение > Монетизация > Настройка монетизации > Биллинг Google Play > Лицензирование: Открытый ключ RSA в кодировке Base64. Обратите внимание, что для Android мы в настоящее время поддерживаем только IAP-транзакции из Google Play.

После ввода открытого ключа в приборную панель Tenjin для вашего приложения вы можете воспользоваться приведенным ниже методом Tenjin SDK:
public void транзакция(String productId, String currencyCode, int quantity, double unitPrice, String purchaseData, String dataSignature)Пример:
public void sendPurchaseEvent(Purchase purchase, Double price, String currencyCode) {
String sku = purchase.getSku();
String purchaseData = purchase.getOriginalJson();
String dataSignature = purchase.getSignature();
TenjinSDK instance = getTenjinInstance();
instance.транзакция(sku, currencyCode, 1, price, purchaseData, dataSignature);
}Вы можете проверить, работает ли проверка IAP, с помощью нашего сайта Инструмент для получения данных об устройстве в режиме реального времени. Вы должны увидеть, как появится живое событие:
Отказ от ответственности: Если вы впервые внедряете события покупки в Tenjin, обязательно проверьте данные с помощью других инструментов, которые вы используете, прежде чем начинать масштабировать кампании по привлечению пользователей с использованием данных о покупках.
Please ensure to ‘acknowledge’ the purchase event before sending it to Tenjin. For more details, read здесь Choose between 15% and 30% App Store’s revenue commission via our new setup. The steps are –
- Перейдите в раздел КОНФИГУРИРОВАНИЕ -> Приложения
- Нажмите на приложение, для которого вы хотите его изменить
- В разделе ‘Комиссия App Store’ нажмите ‘Изменить’.’
- Выберите 30% или 15% в качестве желаемой комиссии магазина приложений.
- Выберите дату начала и дату окончания (или вы можете оставить дату окончания пустой, если вам не нужна дата окончания).
- Нажмите кнопку Сохранить (примечание: комиссия 15% может применяться только к датам, перенесенным вперед, а не к историческим датам. Поэтому установите дату начала с даты внесения изменений и вперед)
Amazon AppStore
Проверка квитанции в Amazon AppStore требует receiptId и userId параметры.
ВАЖНО: Вам нужно будет добавить общий ключ приложения Amazon в Приборная панель Тендзина. Общий секрет можно найти в Shared Key в вашей учетной записи разработчика с помощью Учетная запись Amazon Appstore
Нестандартные события #
ПРИМЕЧАНИЕ: Событие инициализации connect() должны наступать до отправки любых пользовательских событий.
ВАЖНО: Ограничьте названия пользовательских событий до 80 символов. Не превышайте 500 уникальных названий пользовательских событий.
Вы можете использовать Tenjin SDK для передачи пользовательского события: eventWithName(String name).
Пользовательские взаимодействия с вашим приложением могут быть привязаны к уровню затрат из каждого источника приобретения, который вы используете через сервис Tenjin. Вот пример использования:
String apiKey = <SDK_KEY>;
TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);
//Integrate a custom event with a distinct name - ie. swiping right on the screen
instance.eventWithName("swipe_right");Пользовательские события со значениями #
Вы можете использовать Tenjin SDK для передачи пользовательского события с целочисленным значением: eventWithNameAndValue(String name, int value).
Передача целого числа значение с событием имя позволяет маркетологам суммировать и отслеживать средние значения, переданные для этой метрики в приборной панели Tenjin. Если вы планируете использовать DataVault, эти значения можно использовать для получения дополнительных метрик, которые могут быть полезны.
String sdkKey = <SDK_KEY>;
TenjinSDK.instance = TenjinSDK.getInstance(this, sdkKey);
//Integrate a custom event with a distinct name and value - ie. paying 100 virtual coins for an item
instance.eventWithNameAndValue("пункт", 100);Используя приведенный выше пример, приборная панель Tenjin просуммирует и усреднит значения для всех событий с именем пункт.
Keep in mind that this event will not work if the value passed not an integer.
//Integrate a custom event with a distinct name and value - ie. paying 100 virtual coins for an item
instance.eventWithNameAndValue("пункт", "1");Интеграция между серверами #
Тендзин предлагает межсерверная интеграция. Это позволит вам отправлять события установки и после установки непосредственно с ваших серверов на серверы Tenjin без необходимости интеграции SDK. Если вы хотите получить доступ к документации, пожалуйста, отправьте письмо на support@tenjin.com.
Параметр App Subversion для A/B-тестирования (требуется DataVault) #
Если вы проводите A/B-тесты и хотите получить отчет о различиях, мы можем добавить числовое значение к версии вашего приложения, используя appendAppSubversion() метод. Например, если версия вашего приложения 1.0.1, и установите appendAppSubversion(8888), Он сообщит о версии приложения как 1.0.1.8888.
Эти данные появятся в DataVault, где вы сможете запускать отчеты, используя значения субверсии приложения.
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.appendAppSubversion(8888);
instance.connect();Кампании LiveOps #
Tenjin поддерживает поиск информации об атрибуции пользователя, например, источник рекламная сеть и кампании, из SDK. Это позволит разработчикам собирать и анализировать данные об атрибуции на уровне пользователей в режиме реального времени. Вот возможные варианты использования Tenjin LiveOps Campaigns:
- Если у вас есть собственный инструмент анлитики данных, пользовательский обратный вызов позволит вам привязать данные атрибуции к вашим внутриигровым данным на уровне устройств.
- Показывайте разный контент приложения в зависимости от того, откуда пришел пользователь. Например, если пользователь А приписан к органической сети, а пользователь Б - к Facebook, и пользователь Б, скорее всего, будет более вовлечен в работу с вашим приложением, то вы хотите показать специальное предложение в игре после того, как пользователь установит приложение. Если вы хотите обсудить более конкретные сценарии использования, напишите на support@tenjin.com.
LiveOps Campaigns is a paid feature, so please contact your Tenjin account manager if you would like to get access.
Идентификатор пользователя клиента #
Вы можете задавать и получать идентификатор пользователя клиента, чтобы отправлять его в качестве параметра в событиях.
.setCustomerUserId(userId: "user_id")
.getCustomerUserId()
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.setCustomerUserId(userId: "user_id");
userId = instance.getCustomerUserId(); Идентификатор установки аналитики #
Вы можете получить идентификатор аналитика, который генерируется случайным образом и сохраняется в локальном хранилище устройства. getAnalyticsInstallationId()
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
analyticsId = instance.getAnalyticsInstallationId; Кэш повторных попыток #
Вы можете включить/выключить повторную попытку и кэширование всех событий при неудачных запросах или отсутствии интернет-соединения у пользователей. Эти события будут отправляться после того, как новое событие будет добавлено в очередь и пользователь восстановит соединение.
.setCacheEventSetting(setting: true)
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.setCacheEventSetting(setting: true);Интеграция доходов от рекламы на уровне впечатлений #
Tenjin поддерживает возможность интеграции с функцией Impression Level Ad Revenue (ILRD) из,
- AppLovin
- Unity LevelPlay
- ГиперБид
- AdMob
- TopOn
- CAS
- TradPlus
Эта функция позволяет получать события, которые соответствуют вашим рекламным доходам, на которые влияет каждый показ рекламы пользователю. Чтобы включить эту функцию, следуйте приведенным ниже инструкциям.
ILRD is a paid feature, so please contact your Tenjin account manager to discuss the price before sending ILRD events.
Параметры Google DMA #
Если у вас уже есть встроенный CMP, параметры Google DMA будут автоматически собраны Tenjin SDK. В Tenjin SDK ничего не нужно реализовывать, если у вас есть встроенный CMP.. Если вы хотите переопределить CMP или просто хотите создать собственные механизмы согласия, вы можете использовать следующее:
setGoogleDMAParameters(boolean, boolean)
TenjinSDK instance = TenjinSDK.getInstance(this, " ");
instance.setGoogleDMAParameters(adPersonalization, adUserData); To explicitly manage the collection of Google DMA parameters, you have the flexibility to opt in or opt out at any time. While the default setting is to opt in, you can easily adjust your preferences using the optInGoogleDMA or optOutGoogleDMA methods, ensuring full control over your data privacy settings:
instance.optInGoogleDMA();
instance.optOutGoogleDMA(); Тестирование #
Проверить, работает ли интеграция, можно через наш Инструмент для получения данных об устройстве в режиме реального времени. Добавьте свой рекламный идентификатор или IDFA/GAID в список тестовых устройств. Это можно найти в разделе Поддержка -\> Тестовые устройства. Перейти к Страница SDK Live и отправьте тестовые события из вашего приложения. Вы должны увидеть, как приходят живые события:
[1]: #basic-integration [2]: #google-play-or-amazon-store [3]: #permission [4]: #android-advertising-id-aaid-and-install-referrer [5]: #app-store [6]: #other-android-store [7]: #permission1 [8]: #android-advertising-id-aaid-and-install-referrer1 [9]: #oaid [10]: #msa-oaid [11]: #huawei-oaid [12]: #huawei-install-referrer [13]: #app-store1 [14]: #proguard-settings [15]: #additional-integration [17]: #gdpr [18]: #purchase-events [19]: #custom-events [20]: #deferred-deeplink [21]: #servertoserver-integration [22]: #app-subversion-parameter-for-ab-testing-requires-datavault [23]: #liveops-campaigns [24]: #customer-user-id [27]: #impression-level-ad-revenue-integration [25]: #app-initialization [26]: #app-initialization1 [30]: #testing [31]: https://github.com/tenjin/tenjin-android-sdk-demo [32]: https://developers.google.com/android/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.html#getAdvertisingIdInfo(android.content.Context) [33]: https://developers.google.com/android/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient.Info.html#isLimitAdTrackingEnabled() [34]: http://www.msa-alliance.cn/col.jsp?id=120 [35]: https://developer.android.com/reference/android/telephony/TelephonyManager#getImei() [36]: https://developer.android.com/google/play/installreferrer/index.html [37]: https://developer.android.com/reference/android/os/Build.VERSION.html#SDK_INT [38]: https://developer.android.com/reference/android/os/Build.html#DEVICE [39]: https://developer.android.com/reference/android/os/Build.html#MANUFACTURER [40]: https://developer.android.com/reference/android/os/Build.html#MODEL [41]: https://developer.android.com/reference/android/os/Build.html#BRAND [42]: https://developer.android.com/reference/android/os/Build.html#PRODUCT [43]: https://developer.android.com/reference/android/telephony/TelephonyManager.html#getSimOperatorName() [44]: https://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo() [45]: https://developer.android.com/reference/android/util/DisplayMetrics.html#widthPixels [46]: https://developer.android.com/reference/android/util/DisplayMetrics.html#heightPixels [47]: https://developer.android.com/reference/android/os/Build.VERSION.html#RELEASE [48]: https://developer.android.com/reference/android/os/Build.html [49]: https://developer.android.com/reference/java/util/Locale.html#getDefault() [50]: https://developer.android.com/reference/java/util/Locale.html#getDefault() [51]: https://developer.android.com/reference/java/util/TimeZone.html [52] #retry-cache [53]: #analytics-installation-id [55]: #opt-inout-using-cmp [56]: #google-dma-parameters [image-1]: https://tenjin-instructions.s3.amazonaws.com/android_jar.png “Студия” [image-2]: https://s3.amazonaws.com/tenjin-instructions/sdk_live_purchase_events_2.png
