- SDK Version: 5.4.3 (Release Notes)
- Deprecated SDK versions
1. Обзор
AppsFlyer Android SDK provides app install and event recording functionality as part of the AppsFlyer attribution solution.
Embed the SDK in your app to record installs, sessions, and additional in-app events, for example, in-app purchases and game levels, to evaluate user engagement levels.
1.1 SDK integration—what you need to do
Вкладка | Цель | After completion |
---|---|---|
Интеграция SDK (обязательно) |
Add and configure the SDK |
|
Основные API (Рекомендуется) |
Измерение внутренних событий приложения и дохода, настройка диплинкинга и сбор данных о конверсиях |
|
Дополнительные API |
Implement and use optional APIs Check the additional APIs list, as some APIs may be vital for your business plan. Example: Uninstall measurement, or referrals attribution. |
|
Краткий справочник по API SDK для разработчиков |
1.2. Совместимость SDK с платформами Android
- Starting Android V4.0
- Non-mobile Android-based platforms such as Smart TVs, including Amazon Fire TV
- Out-of store markets for Android apps, like Amazon, and Baidu
This tab explains how to implement and initialize the AppsFlyer SDK, and is written for app developers. After completion g this tab, you will see two installs in your app's dashboard, one organic and one non-organic.
2. Добавление SDK в приложение
2.1 Добавление SDK в свой проект
Use one of the following methods to add the SDK to your app:
- [Best practice] Using Gradle
- Manually add the SDK
- Добавьте этот код в /app/build.gradle на уровне модуля перед блоком
dependencies
:repositories { mavenCentral() }
- Добавьте последнюю версию SDK AppsFlyer как зависимость. Загрузить последнюю версию можно здесь.
dependencies { //make sure to use the latest SDK version: https://mvnrepository.com/artifact/com.appsflyer/af-android-sdk implementation 'com.appsflyer:af-android-sdk:5.4.0' }
- Синхронизируйте проект для получения зависимостей — см. снимок экрана ниже:
2.2 Добавление инициатора установки для Android к вашему приложению
Инициатор установки для Android повышает точность атрибуции, защищает от мошеннических установок, а также выполняет другие функции. Его поддержка в SDK AppsFlyer для Android предусмотрена начиная с версии 4.8.6.
Примечание
Google прекратил поддержку BroadcastReceiver в марте 2020 г.
- Это изменение не влияет на приложение.
- Возможно, вам по-прежнему понадобится BroadcastReceiver для атрибуции приобретенных не в магазине приложений. Проверьте это в магазине, в котором зарегистрировано приложение.
- Внедрение инициатора установки теперь является обязательным.
Добавить инициатор установки в приложение можно двумя способами:
- С помощью системы Gradle (рекомендуется)
- Добавление инициатора установки вручную
Добавьте инициатор установки для Android как зависимость. Загрузить последнюю версию можно здесь.
-
dependencies { //make sure to use the latest SDK version: https://mvnrepository.com/artifact/com.appsflyer/af-android-sdk implementation 'com.appsflyer:af-android-sdk:5.+' implementation 'com.android.installreferrer:installreferrer:1.1' }
- Синхронизируйте проект для получения зависимостей — см. снимок экрана ниже:
Если вы используете утилиту ProGuard и хотите применять новый API Google API для отслеживания инициаторов, необходимо добавить в ProGuard правило: -keep public class com.android.installreferrer.** { *; }
- Загрузите файл инициатора установки в формате aar.
- Добавьте его в проект.
- Добавьте следующее разрешение в манифест:
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE
.
2.3. Настройка необходимых разрешений
Добавление разрешения повышает показатель атрибуции на основе вероятностного моделирования. Кроме того, это позволяет SDK отправлять больше данных, таких как данные Wi-Fi и сети оператора связи. Эти данные можно получать из отчетов по сырым данным и использовать для анализа и оптимизации кампаний.
Добавление необходимых разрешений
- Добавьте в файл AndroidManifest.xml эти разрешения:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- Optional : --> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
2.4. Настройка BroadcastReceiver для получения данных из Google Play
Примечание
Google прекратил поддержку BroadcastReceiver в марте 2020 г.
- Это изменение не влияет на приложение.
- Возможно, вам по-прежнему понадобится BroadcastReceiver для атрибуции приобретенных не в магазине приложений. Проверьте это в магазине, в котором зарегистрировано приложение.
- Внедрение инициатора установки теперь является обязательным.
Приемник широковещательных сообщений BroadcastReceiver получает информацию из Google Play, которую AppsFlyer использует для атрибуции. Использование BroadcastReceiver повышает показатель атрибуции.
Есть два варианта реализации приемника широковещательных сообщений об источнике установки (параметр referrer):
Если в файле AndroidManifest.xml для INSTALL_REFERRER
не зарегистрирован приемник, добавьте следующий приемник в тег <application>:
<application>
<receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
</application>
<application>
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
</application>
Совет
Если после добавления ресивера в файл AndroidManifest.xml выдается ошибка "Unresolved class SingleInstallBroadcastReceiver", это означает, что сначала нужно выполнить сборку приложения.
3. Внедрение и инициализация SDK
В этом разделе описана процедура внедрения и инициализации SDK AppsFlyer для Android.
3.1. Получение ключа разработчика
AppsFlyer использует ключ разработчика в качестве уникального идентификатора вашей учетной записи. Ключ разработчика является обязательным, поскольку он позволяет SDK безопасно отправлять и получать данные, которые относятся к вашей учетной записи AppsFlyer.
Важно: очень важно использовать правильный ключ разработчика при инициализации SDK. Использование чужого или некорректного ключа разработчика скажется на обработке всего трафика, направляемого из SDK, и приведет к проблемам с атрибуцией и отчетностью.
Чтобы получить ваш ключ разработчика:
- Перейдите на панель управления приложения.
- На панели управления выберите в разделе Configuration (Конфигурация) пункт App Settings (Настройки приложения).
- Скопируйте свой ключ разработчика
3.2. Инициализация SDK
Рекомендуется инициализировать SDK в приложении внутри глобального класса application. Это обеспечит инициализацию SDK для всех сценариев, включая диплинкинг.
Перечисленные ниже действия выполняются внутри глобального класса application.
- Импортируйте в глобальный класс данного приложения указанные библиотеки.
import android.app.Application; import android.util.Log; import com.appsflyer.AppsFlyerLib; import com.appsflyer.AppsFlyerConversionListener; import java.util.Map;
- Внутри глобального класса присвойте свой ключ разработчика переменной — рекомендуется присвоить этой переменной имя AF_DEV_KEY.
Важно: очень важно использовать правильный ключ разработчика при инициализации SDK. Использование чужого или некорректного ключа разработчика скажется на обработке всего трафика, направляемого из SDK, и приведет к проблемам с атрибуцией и отчетностью.
public class AFApplication extends Application { private static final String AF_DEV_KEY = "qrdZGj123456789"; //... }
class AFApplication : Application() { private val devKey = "qrdZGj123456789"; //... }
- Внутри глобального класса вставьте после вызова
super.onCreate()
код дляAppsFlyerConversionListener
. См. код, приведенный в пункте 4. - Внутри глобального класса после
ConversionListener
запустите инициализацию SDK с помощью методаinit()
.
public class AFApplication extends Application { private static final String AF_DEV_KEY = "qrdZGj123456789"; @Override public void onCreate() { super.onCreate(); AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() { @Override public void onConversionDataSuccess(Map<String, Object> conversionData) { for (String attrName : conversionData.keySet()) { Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName)); } } @Override public void onConversionDataFail(String errorMessage) { Log.d("LOG_TAG", "error getting conversion data: " + errorMessage); } @Override public void onAppOpenAttribution(Map<String, String> attributionData) { for (String attrName : attributionData.keySet()) { Log.d("LOG_TAG", "attribute: " + attrName + " = " + attributionData.get(attrName)); } } @Override public void onAttributionFailure(String errorMessage) { Log.d("LOG_TAG", "error onAttributionFailure : " + errorMessage); } }; AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionListener, this); } }
class AFApplication : Application() { private val devKey = "qrdZGj123456789"; override fun onCreate() { super.onCreate() val conversionDataListener = object : AppsFlyerConversionListener{ override fun onConversionDataSuccess(data: MutableMap<String, Any>?) { data?.let { cvData -> cvData.map { Log.i(LOG_TAG, "conversion_attribute: ${it.key} = ${it.value}") } } } override fun onConversionDataFail(error: String?) { Log.e(LOG_TAG, "error onAttributionFailure : $error") } override fun onAppOpenAttribution(data: MutableMap<String, String>?) { data?.map { Log.d(LOG_TAG, "onAppOpen_attribute: ${it.key} = ${it.value}") } } override fun onAttributionFailure(error: String?) { Log.e(LOG_TAG, "error onAttributionFailure : $error") } } AppsFlyerLib.getInstance().init(devKey, conversionDataListener, this) } }
- Внутри глобального класса приложения вызовите
startTracking()
.
AppsFlyerLib.getInstance().startTracking(this);
AppsFlyerLib.getInstance().startTracking(this)
3.3. Регистрация глобального класса application
В файле AndroidManifest.xml вставьте внутри тега application
такую строку:
android:name="APP.PACKAGE.NAME.AFApplication"
- APP.PACAKGE.NAME — замените на имя пакета приложения.
- AFApplication — замените на имя, присвоенное глобальному классу приложения.
Эта строка в манифесте manifest.xml сообщает приложению имя глобального класса application. Как уже было сказано, это обеспечивает глобальный доступ к SDK AppsFlyer в приложении.
3.4 Задержка инициализации SDK
Чтобы отложить инициализацию SDK, можно вызвать startTracking из класса Activity.
Эту опцию можно использовать, например, если вам нужно отложить startTracking до тех пор, пока вы не получите согласие пользователя в соответствии с требованиями GDPR, CCPA и др. законов о защите данных.
При вызове startTracking в классе Activity:
- Обязательно передавайте экземпляр Activity в качестве аргумента, а не Application.
- Если вы планируете использовать диплинки, добавьте
startTracking()
API к любой другой активности, на которую могут ссылаться диплинки и в которой нет startTracking.
4. Тестирование установок
Теперь можно начинать тестирование интеграции SDK, имитируя органические и неорганические установки.
4.1. Добавление тестового устройства в белый список
Прежде чем начать тестирование установок, внесите в белый список устройство, которое будет использоваться для тестирования.
4.2. Имитация органической установки
Органические установки — это неатрибутированные установки, которые обычно выполняются непосредственно из магазинов приложений.
Для имитации органической установки выполните следующие действия:
- Убедитесь, что к вашему компьютеру подключено мобильное устройство.
- В Android Studio вызовите Logcat.
- Установите приложение на устройство или эмулятор из Android Studio.
- Дождитесь запуска приложения.
- Найдите в журнале Logcat имя пакета своего приложения.
Вы увидите на экране такие строки:
Выделенная часть снимка экрана содержит строки, из которых видно, что SDK сообщило об органической установке. Эти данные получены из метода onConversionDataSuccess
класса AFApplication. Способ получения данных о конверсиях описан далее в этой руководстве.
Примечание: Начиная с SDK V5, имя метода для получения данных о конверсиях — onConversionDataSuccess
. Если у вас версия SDK ниже чем 5.0.0, метод называется onInstallConversionDataLoaded
. Мы рекомендуем обновить SDK до версии 5.0.0. Подробнее см. тут.
После этого сведения об органической установке должны появиться на обзорной странице панели управления приложения.
Если на панели управления приложения нет сведений об установке, см. наше руководство по поиску и устранению неисправностей в SDK.
4.3. Имитация неорганической установки
Неорганическая установка — это атрибутированная установка, которая обычно происходит после взаимодействия с рекламой. Для имитации неорганической установки можно использовать ссылки атрибуции.
Для имитации неорганической установки:
- Найдите в манифесте имя пакета своего приложения, например com.company.app.
- В приведенном ниже URL-адресе замените <app_id> на имя пакета вашего приложения:
https://app.appsflyer.com/<app_id>?pid=Test&c=Test
- Параметр c указывает название кампании.
- Параметр pid указывает имя медиа-источника, которому атрибутирована установка.
- Если вы тестируете клик с компьютера, следует добавить рекламный идентификатор (GAID) (добавив
&advertising_id=<GAID>
в конец ссылки в шаге 1).
- В приведенном ниже URL-адресе замените <app_id> на имя пакета вашего приложения:
- Отправьте этот URL-адрес на устройство. Его можно отправить, например, по электронной почте или через WhatsApp.
- На устройстве нажмите на этот URL-адрес.
- Если приложение зарегистрировано в магазине приложений, произойдет перенаправление в магазин приложений. Не загружайте приложение из магазина приложений и не устанавливайте его. Перейдите к пункту 5.
- Если приложение все еще в разработке и не зарегистрировано в магазине приложений, на экране появится сообщение о том, что этого приложения в магазине приложений нет. Просто перейдите к пункту 5.
- В Android Studio вызовите Logcat.
- Подключите устройство к компьютеру с помощью USB-кабеля.
- Установите приложение на устройство из Android Studio.
- Найдите в журнале Logcat имя пакета своего приложения.
Вы увидите на экране такие строки:
После этого сведения о неорганической установке должны появиться на обзорной странице панели управления приложения.
Примечание
Когда вы закончите тестирование и отладку интеграции SDK, отключите журналы SDK.
Известные проблемы с интеграцией SDK
Ознакомьтесь с приведенной информацией, чтобы узнать о возможных проблемах с интеграцией SDK и способах их разрешения.
Предупреждение ProGuard
Если вы используете ProGuard, и вы получаете предупреждение в связи с вашим классом AFKeystoreWrapper
, добавьте в ваш файл правил ProGuard такой код:
-keep class com.appsflyer.** { *; }
Правила резервного копирования
Если вы добавите android:fullBackupContent="true"
внутри тега <application> tag в AndroidManifest.xml, вы можете получить сообщение об ошибке:
Manifest merger failed : Attribute application@fullBackupContent value=(true)
Чтобы устранить эту ошибку, добавьте tools:replace="android:fullBackupContent"
в тег <application> tag в файле AndroidManifest.xml.
Если у вас определены собственные правила резервного копирования (android:fullBackupContent="@xml/my_rules"
), объедините их вручную с правилами AppsFlyer, добавив следующее правило:
<full-backup-content>
...//your custom rules
<exclude domain="sharedpref" path="appsflyer-data"/>
</full-backup-content>
Недостающие файлы ресурсов
Если вы используете Android SDK версии 5 и выше, убедитесь, что в файле APK, помимо файлов classes.dex и resources , у вас есть папка com > appsflyer > internal с файлами a- и b-
Примечание: В SDK до версии 5.3.0 файлы называются a. и b.
Проверьте, что у вас есть нужные файлы, открыв ваш пакет APK в Android Studio. См. скриншот ниже.
Если этих файлов нет, SDK не может отправлять сетевые запросы на наш сервер, и вам нужно будет обратиться к своему менеджеру по работе с клиентами или в службу поддержки.
Эта вкладка содержит описание способов регистрации внутренних событий приложения и данных о доходах, а также процедуры настройки диплинкинга.
Регистрация внутренних событий приложения и данных о доходах позволит вам измерять качество ваших пользователей. Диплинкинг позволяет обеспечить пользователям более простой и удобный способ взаимодействия с рекламой и приложением.
Эта вкладка содержит инструкции для разработчиков, однако участие маркетологов также необходимо по таким причинам:
- Маркетолог решает, какие события в приложении нужно регистрировать, чтобы измерять качество пользователей.
- Маркетолог имеет доступ к панели управления AppsFlyer, которая используется для настройки ссылки OneLink для диплинкинга.
5. Регистрация внутренних событий приложения
Отслеживая события внутри приложения, можно понять, что в нем происходит. Рекомендуется заранее определить, какие события нужно регистрировать. Регистрация внутренних событий приложения позволит измерять такие KPI, как ROI (окупаемость инвестиций) и LTV (жизненный цикл клиента).
Есть несколько способов регистрации внутренних событий приложения. Наиболее распространенный способ — это отправка событий через SDK. Именно этот способ и рассматривается в этой статье. Сведения о других способах регистрации событий в приложении см. в нашем обзоре внутренних событий приложения.
Если ваше приложение относится к определенной сфере, например к сфере путешествий, игр, электронной коммерции и т. д., вы можете ознакомиться с полным списком рекомендованных событий для каждой сферы.
5.1. Имена внутренних событий в приложении и параметры
В SDK есть два интерфейса, связанных с внутренними событиями приложения:
- AFInAppEventType — константы для имен событий в приложении.
- AFInAppEventParameterName — константы для имен параметров событий в приложении.
Мы настоятельно рекомендуем использовать эти два интерфейса по следующим причинам:
- Стандартное именование позволяет AppsFlyer автоматически сопоставлять события с сетями типа SRN, такими как Facebook, Google, Twitter и Snapchat.
- Обратная совместимость — если AppsFlyer решит изменить имя какого-либо события или параметра события, ваши настройки останутся совместимыми.
Чтобы использовать эти два интерфейса, их нужно импортировать:
import com.appsflyer.AFInAppEventParameterName;
import com.appsflyer.AFInAppEventType;
5.2. Регистрация данных о доходах
Данные о доходах можно отправлять с любым событием. Для того чтобы включить доход во внутреннее событие приложения, используйте параметр события af_revenue
(AFInAppEventParameterName.REVENUE
). Этому параметру можно присвоить любое числовое значение — как положительное, так и отрицательное.
af_revenue
— это единственный параметр события, который AppsFlyer учитывает как реальный доход и отображает в отчетах по необработанным данным и на панели управления. Подробные сведения см. здесь.
При отправке событий с доходом необходимо учитывать следующее:
- При установке кода местной валюты (см. пример ниже) необходимо использовать код валюты из 3 букв по стандарту ISO 4217 (значение по умолчанию — USD).
- Чтобы задать код валюты для всех событий, вызовите метод
AppsFlyer.setCurrencyCode("ZZZ")
Сведения о настройках валюты, отображении и конвертации валюты см. в нашем справочнике по валюте доходов. - В значениях дохода нельзя использовать запятые-разделители, знаки валюты или текст. Событие дохода должно иметь, например, такой формат: 1234.56.
Пример: событие покупки в приложении с доходом
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.REVENUE,1234.56);
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE,"Shirt");
eventValue.put(AFInAppEventParameterName.CONTENT_ID,"1234567");
eventValue.put(AFInAppEventParameterName.CURRENCY,"USD");
AppsFlyerLib.getInstance().trackEvent(getApplicationContext() , AFInAppEventType.PURCHASE , eventValue);
val eventValue = HashMap<String, Any>()
eventValue.put(AFInAppEventParameterName.REVENUE,1234.56)
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE,"Shirt")
eventValue.put(AFInAppEventParameterName.CONTENT_ID,"1234567")
eventValue.put(AFInAppEventParameterName.CURRENCY,"USD")
AppsFlyerLib.getInstance().trackEvent(getApplicationContext() , AFInAppEventType.PURCHASE , eventValue)
Событие покупки, с которым связан доход $1234.56 долларов США, отображается на панели управления как доход.
Регистрация отрицательного дохода
Возможны такие ситуации, когда нужно зарегистрировать отрицательный доход.
Например, пользователь получает возмещение за приобретенную у вас обувь.
Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.REVENUE,-200);
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE,"shoes");
eventValue.put(AFInAppEventParameterName.CONTENT_ID,"4875");
eventValue.put(AFInAppEventParameterName.CURRENCY,"USD");
AppsFlyerLib.getInstance().trackEvent(getApplicationContext() , "cancel_purchase" , eventValue);
val eventValue = HashMap<String, Any>()
eventValue.put(AFInAppEventParameterName.REVENUE, -200)
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE, "category_a")
eventValue.put(AFInAppEventParameterName.CONTENT_ID, "1234567")
eventValue.put(AFInAppEventParameterName.CURRENCY, "USD")
AppsFlyerLib.getInstance().trackEvent(applicationContext, "cancel_purchase", eventValue)
Примечание
Обратите внимание на приведенный выше код:
- Перед значением дохода стоит знак минус
- Имя события имеет уникальное значение "cancel_purchase", которое позволяет легко найти события отрицательного дохода на панели управления и в отчетах сырых данных.
5.3. Проверка покупок в приложении
При покупках в приложении SDK AppsFlyer выполняет валидацию чека на сервере. Чтобы проверить покупку, вызовите метод validateAndTrackInAppPurchase
.
Если покупка проверена, этот запрос автоматически создает внутреннее событие приложения af_purchase
.
public static void validateAndTrackInAppPurchase(Context context,
String publicKey, String signature, String purchaseData,
String price, String currency, HashMap<String, String> additionalParameters);
Параметры метода
- String publicKey — открытый ключ, полученный с помощью консоли разработчика Google.
- String signature — подпись транзакции (возвращает API Google после завершения покупки).
- String purchaseData — приобретенный товар в формате JSON (возвращает API Google после завершения покупки).
- Строка price — доход внутреннего события приложения, о котором необходимо сообщить в AppsFlyer.
- String currency — валюта внутреннего события приложения, о которой необходимо сообщить в AppsFlyer.
- HashMap<String, String> additionalParameters — дополнительные параметры внутреннего события приложения, которые отображаются в поле event_value отчета по необработанным данным о внутренних событиях приложения.
Обратные вызовы по результатам проверки покупки "Успешно" и "Ошибка"
Если нужно узнать результат проверки покупки, включите в класс application своего приложения прослушиватель registerValidatorListener. Этот прослушиватель содержит два блока обратного вызова — один для результата "Успешно", а второй для результата "Ошибка" (по любой причине, включая неудачную проверку).
AppsFlyerLib.getInstance().registerValidatorListener(this,new
AppsFlyerInAppPurchaseValidatorListener() {
public void onValidateInApp() {
Log.d(TAG, "Purchase validated successfully");
}
public void onValidateInAppFailure(String error) {
Log.d(TAG, "onValidateInAppFailure called: " + error);
}
});
AppsFlyerLib.getInstance().registerValidatorListener(this, object : AppsFlyerInAppPurchaseValidatorListener {
override fun onValidateInApp() {
Log.d(LOG_TAG, "Purchase validated successfully")
}
override fun onValidateInAppFailure(error: String) {
Log.d(LOG_TAG, "onValidateInAppFailure called: $error")
}
})
Пример применения проверки покупки
// Purchase object is returned by Google API in onPurchasesUpdated() callback
private void handlePurchase(Purchase purchase) {
Log.d(LOG_TAG, "Purchase successful!");
Map<String, String> additional_event_values = new HashMap<>();
additional_event_values.put("some_parameter", "some_value");
String price= "10";
String currency = "USD";
AppsFlyerLib.getInstance().validateAndTrackInAppPurchase(getApplicationContext(), PUBLIC_KEY, purchase.getSignature(), purchase.getOriginalJson(), revenue, currency, additional_event_values);
}
// Purchase object is returned by Google API in onPurchasesUpdated() callback
private fun handlePurchase(Purchase purchase) {
Log.d(LOG_TAG, "Purchase successful!");
val additional_event_values = HashMap<String, String>()
additional_event_values.put("some_parameter", "some_value");
val price= "10";
val currency = "USD";
AppsFlyerLib.getInstance().validateAndTrackInAppPurchase(this, PUBLIC_KEY, purchase.getSignature(), purchase.getOriginalJson(), revenue, currency, additional_event_values);
}
При проверке покупки в AppsFlyer автоматически отправляется событие покупки в приложении. Ниже приведены примеры данных, которые передаются в параметре event_value:
{
"some_parameter":"some_value", // from additional_event_values
"af_currency":"USD", // from currency
"af_content_id":"test_id", // from purchase
"af_revenue":"10", // from revenue
"af_quantity":"1", // from purchase
"af_validated":true // flag that AF verified the purchase
}
Примечание
Вызов validateAndTrackInAppPurchase
автоматически создает внутри приложения событие af_purchase. При самостоятельной отправке этого события происходит дублирование данных о событии.
5.4. Ограничения для внутренних событий приложения
- Название события: до 45 символов
- Значение события: не более 1000 символов, более длинные сообщения могут быть урезаны
- В значениях цены и дохода можно использовать только цифры и десятичную точку, например 5 или 5.2.
- Значения цены и дохода могут иметь не более 5 знаков после десятичной точки, например 5.12345
- Неанглийские символы поддерживаются во внутренних события приложения и других SDK API, начиная с SDK для Android версии 4.8.1.
5.5. Примеры регистрации внутренних событий приложения
Для регистрации внутренних событий приложения используется вызов функции trackRichEvent
с именем события и значениями параметров. Подробные сведения см. в статье о внутренних событиях приложения.
Ниже приведен простой пример способа регистрации события покупки. Полный список готовых фрагментов кода для различных отраслей см. в нашем руководстве по насыщенным внутренним событиям приложения применительно к отраслям.
Пример: событие покупки в приложении
Map<String,Object> eventValues = new HashMap<>();
eventValues.put(AFInAppEventParameterName.REVENUE, 1200);
eventValues.put(AFInAppEventParameterName.CURRENCY, "JPY");
eventValues.put(AFInAppEventParameterName.CONTENT_TYPE, "Shoes");
AppsFlyerLib.getInstance().trackEvent(this, AFInAppEventType.PURCHASE, eventValues);
val eventValues = HashMap<String, Any>();
eventValues.put(AFInAppEventParameterName.REVENUE, 1200)
eventValues.put(AFInAppEventParameterName.CURRENCY, "JPY")
eventValues.put(AFInAppEventParameterName.CONTENT_TYPE, "Shoes")
AppsFlyerLib.getInstance().trackEvent(this, AFInAppEventType.PURCHASE, eventValues)
5.6 Регистрация внутренних событий приложения в режиме оффлайн
Если пользователь инициирует событие, когда подключение к Интернету недоступно, Appsflyer все же сможет записать это событие. Вот как это происходит:
- SDK отправляет события на серверы AppsFlyer и ждет ответа.
- Если SDK не получит ответа «200», событие будет помещено в кэш.
- Если затем будет получен ответ «200», сохраненное событие отправляется на сервер повторно.
- Если в кэше хранится несколько событий, они отправляются на сервер одно за другим без перерывов.
Примечание
В кэше SDK можно хранить не более 40 событий. Это означает, что сохраняются только первые 40 событий, происходящих в автономном режиме. Все, что приходит после этого до следующего ответа «200», игнорируется.
Время события, которое появляется в необработанных данных — это время события, которое отправляется в AppsFlyer после того, как устройство снова выходит в сеть. Это время не равнозначну времени, когда событие происходит.
5.7 Обработка успешных и неудачных попыток при регистрации внутренних событий приложения
При регистрации внутренних событий приложения вы можете установить прослушиватель. Прослушиватель позволяет вам определять логику для двух сценариев:
- Внутреннее событие приложения зарегистрировано успешно.
- При регистрации внутреннего события произошла ошибка.
AppsFlyerLib.getInstance().trackEvent(getApplicationContext(), AFInAppEventType.PURCHASE, eventValue, new AppsFlyerRequestListener() {
@Override
public void onSuccess() {
Log.d(LOG_TAG, "Event sent successfully");
}
@Override
public void onError(int i, @NonNull String s) {
Log.d(LOG_TAG, "Event failed to be sent:\n" +
"Error code: " + i + "\n"
+ "Error description: " + s);
}
});
AppsFlyerLib.getInstance().trackEvent(getApplicationContext(), AFInAppEventType.PURCHASE, eventValue, object : AppsFlyerRequestListener {
override fun onSuccess() {
Log.d(LOG_TAG, "Event sent successfully")
}
override fun onError(errorCode: Int, errorDesc: String) {
Log.d(LOG_TAG, "Event failed to be sent:\n" +
"Error code: " + errorCode + "\n"
+ "Error description: " + errorDesc)
}
})
В случае возникновения ошибки во время записи внутреннего события отображается код ошибки и описание строки, как указано в таблице ниже.
Код ошибки | Описание строки |
---|---|
10 |
"Event timeout. Check 'minTimeBetweenSessions' param" ("Время события истекло. Проверьте параметр 'minTimeBetweenSessions'") |
11 |
"Skipping event because 'isStopTracking' enabled" (Событие пропущено, т.к. включен параметр 'isStopTracking'") |
40 |
Ошибка сети: описание ошибки предоставляет Android |
41 |
"No dev key" ("Нет ключа разработчика") |
50 |
"Status code failure" ("Ошибка кода статуса") + фактический код ответа от сервера |
6. Диплинкинг при помощи OneLink
OneLink — это решение AppsFlyer для многоплатформенной атрибуции, перенаправления и диплинкинга.
6.1. Идентификация устройств и перенаправление пользователей
При нажатии на ссылку OneLink определяется тип устройства и пользователь перенаправляется в соответствующий пункт назначения, например на портал Google Play, в магазин приложений для iOS, на независимую торговую площадку или веб-страницу.
В руководстве по настройке OneLink рассматривается атрибуция с использованием многоплатформенных ссылок (программирование SDK не требуется). Эти ссылки можно также использовать для диплинкинга.
6.2. Диплинкинг
Диплинкинг позволяет направлять пользователей на определенное действие в приложении, предоставляя им индивидуально подобранный контент. Такие возможности очень полезны при проведении ретаргетинговых кампаний.
Настройку диплинкинга при помощи Onelink должны совместно выполнять маркетолог с доступом к панели управления AppsFlyer и разработчик с доступом к приложению.
См. наше руководство по настройке диплинкинга при помощи OneLink.
6.3. Отложенный диплинкинг
Отложенный диплинкинг позволяет перенаправлять новых пользователей по глубинной ссылке и предоставлять им после установки приложения индивидуально подобранный контент. Этот метод отличается от обычного диплинкинга, который можно использовать, только если приложение уже установлено на устройстве пользователя.
Чтобы настроить отложенный диплинкинг при помощи OneLink, разработчику также необходим доступ к панели управления AppsFlyer.
Настройка отложенного диплинкинга выполняется так же, как и настройка обычного диплинкинга. Единственное отличие состоит в том, что для перенаправления пользователей по глубинной ссылке и предоставления им индивидуально подобранного контента после установки и запуска приложения необходимо добавить в приложение соответствующий код.
Дополнительные сведения см. в руководстве по отложенному диплинкингу.
6.4. Доступ к данным глубинных ссылок
SDK предоставляет данные о конверсии или вовлечении после каждого события установки или перехода по глубинной ссылке. Эти данные можно использовать для программной настройки контента и поведения приложения.
Чтобы получать данные по диплинкингу, когда используется прямой диплинк и открыто приложение, внедрите метод onAppOpenAttribution.
Чтобы получать данные по диплинкингу для повторного вовлечения вручную в любое время, внедрите метод performOnAppAttribution.Это позволяет получить доступ к данным по повторному вовлечению, не регистрируя новое повторное вовлечение.
Дополнительные сведения см. в руководстве по настройке диплинкинга.
7. Получение данных о конверсиях
Вы получаете доступ к данным атрибуции пользователей для каждой новой установки в реальном времени на уровне SDK.
Таким образом, можно предоставлять пользователям персонализированный контент или направлять их на определенные действия в приложении (см. раздел Отложенный диплинкинг в этой статье). Это позволит значительно улучшить взаимодействие с вашим приложением.
Чтобы получить в AppsFlyer данные конверсии из SDK для Android, используйте функцию AppsFlyerConversionListener
.
import android.app.Application;
import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerConversionListener;
import java.util.Map;
import android.util.Log;
public class AFApplication extends Application {
private static final String AF_DEV_KEY = "qrdZGj123456789";
@Override
public void onCreate() {
super.onCreate();
AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
@Override
public void onConversionDataSuccess(Map<String, Object> conversionData) {
for (String attrName : conversionData.keySet()) {
Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName));
}
}
@Override
public void onConversionDataFail(String errorMessage) {
Log.d("LOG_TAG", "error getting conversion data: " + errorMessage);
}
@Override
public void onAppOpenAttribution(Map<String, String> conversionData) {
for (String attrName : conversionData.keySet()) {
Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName));
}
}
@Override
public void onAttributionFailure(String errorMessage) {
Log.d("LOG_TAG", "error onAttributionFailure : " + errorMessage);
}
};
AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionListener, getApplicationContext());
AppsFlyerLib.getInstance().startTracking(this);
}
}
import com.appsflyer.AppsFlyerConversionListener
import com.appsflyer.AppsFlyerLib
import com.appsflyer.AppsFlyerLibCore.LOG_TAG
class AFApplication : Application() {
private val devKey = "qrdZGj123456789";
override fun onCreate() {
super.onCreate()
val conversionDataListener = object : AppsFlyerConversionListener{
override fun onConversionDataSuccess(data: MutableMap<String, Any>?) {
data?.let { cvData ->
cvData.map {
Log.i(LOG_TAG, "conversion_attribute: ${it.key} = ${it.value}")
}
}
}
override fun onConversionDataFail(error: String?) {
Log.e(LOG_TAG, "error onAttributionFailure : $error")
}
override fun onAppOpenAttribution(data: MutableMap<String, String>?) {
data?.map {
Log.d(LOG_TAG, "onAppOpen_attribute: ${it.key} = ${it.value}")
}
}
override fun onAttributionFailure(error: String?) {
Log.e(LOG_TAG, "error onAttributionFailure : $error")
}
}
AppsFlyerLib.getInstance().init(devKey, conversionDataListener, applicationContext)
AppsFlyerLib.getInstance().startTracking(this)
}
}
Самые важные API в интерфейсе AppsFlyerConversionListener
:
onInstallConversionData
— предоставляет данные о конверсиях для новых установок.
Примечание: Начиная с SDK V5, имя метода для получения данных о конверсиях —onConversionDataSuccess
. Если у вас версия SDK ниже чем 5.0.0, метод называетсяonInstallConversionDataLoaded
. Рекомендуется обновить SDK до версии 5.0.0. Подробнее см. тут.onAppOpenAttribution
— предоставляет данные о конверсиях ретаргетинга при запуске существующего приложения вручную либо с помощью глубинной ссылки.
Дополнительные сведения относительно данных о конверсиях см. в нашем руководстве по сценариям использования данных о конверсиях.
8. Атрибуция
Приложения для Android, приобретенные на независимых торговых площадках
AppsFlyer позволяет атрибутировать установки приложений для Android, приобретенных на независимых торговых площадках. Это дает возможность продвигать ваши приложения на рынках, где Google Play недоступен, и расширять аудиторию.
Подробные сведения об атрибуции установок приложений, приобретенных на независимых торговых площадках, см. здесь.
Предустановленные приложения
В ходе предустановочных кампаний изготовители устройств по просьбе владельцев приложений устанавливают эти приложения на устройства еще до их отправки в торговую сеть.
AppsFlyer позволяет легко атрибутировать установки предустановленных приложений. Когда пользователь в первый раз запускает приложение, AppsFlyer атрибутирует эту установку изготовителю как медиаисточнику.
Дополнительные сведения см. здесь.
Измерение количества удалений приложений
Инструкции по настройке измерения количества удалений см. здесь.
Настройка listener для отслеживания запроса
Для получения подтверждения от серверов AppsFlyer о поступлении запроса на отслеживание можно использовать listener - AppsFlyerTrackingRequestListener.
Метод обратного вызова onTrackingRequestSuccess()
выполняется каждый раз, когда в ответ на запрос атрибуции, посланный пакетом SDK, возвращается код 200
.
Для любого другого ответа выполняется метод обратного вызова OnTrackingRequestFailure(String error)
и возвращается ответ в виде строки ошибки.
Пример использования
AppsFlyerLib.getInstance().startTracking(getApplicationContext(), "devKey", new AppsFlyerRequestListener() {
@Override
public void onSuccess() {
Log.d(LOG_TAG, "Launch sent successfully, got 200 response code from server");
}
@Override
public void onError(int i, @NonNull String s) {
Log.d(LOG_TAG, "Launch failed to be sent:\n" +
"Error code: " + i + "\n"
+ "Error description: " + s);
}
});
AppsFlyerLib.getInstance().startTracking(this, "devKey", object : AppsFlyerRequestListener {
override fun onSuccess() {
Log.d(LOG_TAG, "Launch sent successfully")
}
override fun onError(errorCode: Int, errorDesc: String) {
Log.d(LOG_TAG, "Launch failed to be sent:\n" +
"Error code: " + errorCode + "\n"
+ "Error description: " + errorDesc)
}
})
В случае возникновения ошибки во время работы прослушивателя запросов отображается код ошибки и описание строки, как указано в таблице ниже.
Код ошибки | Описание строки |
---|---|
10 |
"Event timeout. Check 'minTimeBetweenSessions' param" ("Время события истекло. Проверьте параметр 'minTimeBetweenSessions'") |
11 |
"Skipping event because 'isStopTracking' enabled" (Событие пропущено, т.к. включен параметр 'isStopTracking'") |
40 |
Ошибка сети: описание ошибки предоставляет Android |
41 |
"No dev key" ("Нет ключа разработчика") |
50 |
"Status code failure" ("Ошибка кода статуса") + фактический код ответа от сервера |
Настройка дополнительных пользовательских данных
API setAdditionalData
необходим для интеграции на уровне SDK с несколькими внешними партнерским платформами, включая Segment, Adobe и Urban Airship.
Используйте данный API только в тех случаях, когда в руководстве по интеграции платформы специально указана необходимость использования API setAdditionalData.
Пример кода setAdditionalData
:
HashMap<String,Object> CustomDataMap = new HashMap<>();
CustomDataMap.put("custom_param_1","value_of_param_1");
AppsFlyerLib.getInstance().setAdditionalData(CustomDataMap);
val customDataMap = HashMap<String, Any>()
customDataMap.put("custom_param_1","value_of_param_1")
AppsFlyerLib.getInstance().setAdditionalData(customDataMap)
9. Сеансы
Настройка временного интервала между сеансами
По умолчанию два сеанса учитываются как отдельные, если интервал между двумя запусками приложения составляет не меньше 5 секунд (см. дополнительные сведения об учете сеансов).
Чтобы установить минимальный интервал между сеансами, используйте этот API:
AppsFlyerLib.setMinTimeBetweenSessions(int seconds);
Установка большого интервала между запусками может отрицательно сказаться на работе API, которые используют данные сеансов, например, для диплинкинга.
Фоновые сеансы для служебных приложений
Чтобы сообщить о новых сеансах пользователя, можно использовать этот метод SDK. Это может оказаться удобным, например, для служебных приложений, которые работают в фоновом режиме.
Используйте этот API в активности onCreate():
public void reportTrackSession(Context context);
Пример использования:
AppsFlyerLib.getInstance().reportTrackSession(context);
10. Собственные медиаканалы
Разрешение упакованных URL-адресов глубинных ссылок
Некоторые сторонние службы, такие как службы электронной почты упаковывают ссылки в электронных письмах в свои собственные домены регистрации кликов. Некоторые даже разрешают вам устанавливать свои собственные домены регистрации кликов. Упаковка ссылки OneLink в такие домены может привести к ограничению ее функциональных возможностей.
Чтобы преодолеть эту проблему, можно использовать API setResolveDeepLinkURLs
. Этот API позволяет получать ссылки OneLink от доменов кликов, которые запускают приложение. Этот API нужно обязательно вызвать перед инициализацией SDK.
Например, у вас есть три домена регистрации кликов, которые выполняют перенаправление на вашу ссылку OneLink по адресу https://mysubdomain.onelink.me/abCD. Используйте этот API для получения ссылки OneLink, на которую перенаправляют домены регистрации кликов. Этот метод API получает список доменов, разрешение которых выполняет SDK. Добавьте следующий код перед запуском SDK.
AppsFlyerLib.getInstance().setResolveDeepLinkURLs("clickdomain.com", "myclickdomain.com", "anotherclickdomain.com");
Приведенный выше код позволяет использовать домен регистрации кликов, сохраняя при этом функциональные возможности OneLink. Домены регистрации кликов выполняют запуск приложения. API, в свою очередь, получает от этих доменов ссылку OneLink, после чего данные этой ссылки OneLink можно использовать для диплинкинга и персонализации пользовательского контента.
Регистрация push-уведомлений
С помощью AppsFlyer можно выполнять измерения push-уведомлений при проведении кампаний по ретаргетингу.
Чтобы включить эту функцию, вызовите метод sendPushNotificationData
в каждой активности внутри метода onCreate
, которая запускается после нажатия на уведомление:
AppsFlyerLib.getInstance().sendPushNotificationData(this);
Подробные сведения об измерении push-уведомлений см. здесь.
Атрибуция приглашений пользователей
С их помощью уже имеющиеся пользователи могут приглашать своих друзей и знакомых в качестве новых пользователей вашего приложения, что может существенно способствовать его продвижению. С помощью AppsFlyer можно атрибутировать и регистрировать установки, источником которых являются приглашения, отправленные пользователями из вашего приложения.
Подробные сведения см. в статье Атрибуция приглашений пользователей.
Атрибуция в кампаниях перекрестной рекламы
Подробные сведения см. в статье Атрибуция в кампаниях перекрестной рекламы.
11. Идентификаторы пользователей
Получение AppsFlyer ID
Идентификатор AppsFlyer ID создается для каждой новой установки приложения. Вы можете использовать AppsFlyer ID для различных целей:
- Отправляйте внутренние события приложения от сервера к серверу.
- Сопоставляйте AppsFlyer ID с данными пользователей, зарегистрированных в ваших серверных системах.
- Сопоставляйте записи при объединении данных из Pull API и Push API.
Для получения уникального ID из AppsFlyer используйте следующие API:
public String getAppsFlyerUID(Context context);
Пример использования:
String appsFlyerId = AppsFlyerLib.getInstance().getAppsFlyerUID(this);
Установка Customer User ID
Для установки своего Customer User ID используйте такой код:
public void setCustomerUserId(String id);
Пример использования:
AppsFlyerLib.getInstance().setCustomerUserId("myId");
Рекомендуется установить свой ID клиента на раннем этапе продвижения приложения, так как после установки этого идентификатора только он привязывается к событиям, включаемым в отчеты:
- Если вызов
setCustomerUserId
выполняется перед вызовомstartTracking
, идентификатор клиента будет отображаться в отчетах по необработанным данным и для установок, и для событий. - Если установить ID клиента позже, он будет привязан только к событиям, зарегистрированным после установки этого идентификатора.
Получение Customer User ID:
Чтобы избежать необходимости повторно устанавливать значение ID клиента после первого запуска и многократно обращаться к серверу для его получения, проверьте, задано ли его значение, с помощью этого кода:
AppsFlyerProperties.getInstance().getString(AppsFlyerProperties.APP_USER_ID)
Для получения дополнительных сведений о Customer User ID щелкните здесь.
Задержка инициализации SDK для идентификатора customerUserID
Можно отложить инициализацию SDK до настройки идентификатора customerUserID.
Чтобы указать, что инициализацию SDK необходимо отложить до установки идентификатора клиента, выполните такой вызов:
AppsFlyerLib.getInstance().waitForCustomerUserId(true);
непосредственно перед методом init(). Остальную часть инициализации SDK следует оставить без изменений.
После передачи customerUserID выполните вызов
AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id", this);
чтобы передать SDK соответствующий идентификатор клиента User ID и запустить SDK.
Должен отобразиться следующий код:
public class AFApplication extends Application {
private static final String AF_DEV_KEY = "qrdZGj123456789";
@Override
public void onCreate() {
super.onCreate();
AppsFlyerConversionListener conversionDataListener =
new AppsFlyerConversionListener() {
...
};
AppsFlyerLib.getInstance().waitForCustomerUserId(true);
//WARNING! Removing above line doesn't cancel its effect.
// Replace with this to stop waiting for CUID:
// AppsFlyerLib.getInstance().waitForCustomerUserId(false);
AppsFlyerLib.getInstance().init(AF_DEV_KEY, getConversionListener(), getApplicationContext());
AppsFlyerLib.getInstance().startTracking(this);
// Do your magic to get the customerUserID
// ...
// any AppsFlyer SDK code invoked here will be discarded
//Call the following API once the customerUserID is available:
AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id", this);
}
}
class AFApplication: Application() {
private val afDevKey = ""
override fun onCreate() {
super.onCreate()
val conversionDataListener = object: AppsFlyerConversionListener {
...
}
AppsFlyerLib.getInstance().waitForCustomerUserId(true);
//WARNING! Removing above line doesn't cancel its effect.
// Replace with this to stop waiting for CUID:
// AppsFlyerLib.getInstance().waitForCustomerUserId(false);
AppsFlyerLib.getInstance().init(afDevKey, conversionDataListener, this)
AppsFlyerLib.getInstance().startTracking(this)
// Do your magic to get the customerUserID
// ...
// any AppsFlyer SDK code invoked here will be discarded
// Call the following API once the customerUserID is available:
AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id", this)
}
}
Дополнительные сведения об отсрочке инициализации SDK до получения идентификатора клиента см. здесь.
Предупреждение
Используйте данный API, только если он соответствует логике функционирования приложения. Использование данного API повышает вероятность расхождений и уязвимость приложения для мошенничества.
Google Advertising ID
AppsFlyer SDK, начиная с версии 4.8.0, автоматически выполняет сбор идентификаторов рекламы Google google_advertising_id
.
Требование включать сбор идентификаторов рекламы Google относится только к SDK версии 4.7.X или более старых версий.
OAID, IMEI и Android ID
Хотя бы один идентификатор устройства должен быть получен для целей атрибуции. Доступны следующие идентификаторы: GAID, Android ID, IMEI и OAID.
GAID - Google Advertising ID
Получается автоматически из приложений, содержащих Сервисы Google Play. Если GAID доступен, IMEI и Android ID НЕ ДОЛЖНЫ собираться приложением, чтобы избежать нарушения политики Google Play.
IMEI и Android ID
По умолчанию отключено. Можно собирать ТОЛЬКО для приложений, не включающих Сервисы Google Play.
Примечание: Начиная с Android 10 (уровень API 29), выпущенной в конце 2019 года, доступ к параметру IMEI ограничен.
Чтобы передавать эти идентификаторы в AppsFlyer:
- После запуска приложения соберите IMEI устройства и/или Android ID.
- Вызовите следующие API, ПРЕЖДЕ ЧЕМ вызывать метод
startTracking
:
AppsFlyerLib.getInstance().setImeiData("IMEI_HERE"); AppsFlyerLib.getInstance().setAndroidIdData("ANDROID_ID_HERE");
OAID - Open Advertiser Identifier(Открытый идентификатор рекламодателя)
Отказ от сбора идентификатора устройства
Разработчики могут отказаться от сбора IMEI, Android ID и OAID, используя следующие API:
AppsFlyerLib.getInstance().setCollectIMEI(false);
AppsFlyerLib.getInstance().setCollectAndroidID(false);
AppsFlyerLib.getInstance().setCollectOaid(false);
12. Защита конфиденциальной информации пользователей
Отказ от использования данных
В исключительных случаях может потребоваться полное отключение отслеживания средствами SDK для соблюдения норм законодательства и правил конфиденциальности. Для этого можно использовать API isStopTracking. После вызова этого API пакет SDK прекратит работу и обмен данными с серверами AppsFlyer.
AppsFlyerLib.getInstance().stopTracking(true, context);
Есть несколько различных сценариев, которые пользователь.может применить для отказа использования данных. Настоятельно рекомендуется строго следовать инструкциям сценария, применимого для вашего приложения.
В любом случае SDK можно активировать повторно путем вызова того же API с передачей значения "false".
Важно
Не вызывайте startTracking
, если isStopTracking
имеет значение true
Чтобы возобновить отслеживание после установки параметра stopTracking
на значение "false"
, используйте следующий API комплекта разработчика ПО:
AppsFlyerLib.getInstance().startTracking(getApplicationContext(), AF_DEV_KEY);
Предупреждение
Используйте API «stopTracking» только в тех случаях, когда необходимо полностью исключить данного пользователя из всех процессов отслеживания. Использование этого API СУЩЕСТВЕННО влияет на атрибуцию, сбор данных и механизм диплинкинга.
Анонимизация пользовательских данных
Для реализации явной анонимизации установок, событий и сеансов пользователя используйте этот API во время инициализации SDK:
public void setDeviceTrackingDisabled(boolean isDisabled);
Пример использования:
AppsFlyerLib.getInstance().setDeviceTrackingDisabled(true);
Если вам нужно запустить отслеживание снова, то вызовите еще раз deviceTrackingDisabled
со значением false.
Предупреждение
Анонимизация пользователей СУЩЕСТВЕННО влияет на информацию атрибуции.Используйте данный параметр ТОЛЬКО для регионов, в которых законодательно запрещен сбор информации о пользователях.
Прекратить предоставлять данные партнерам
В некоторых случаях рекламодатели должны прекратить передачу рекламным сетям / партнерам данных по определенным пользователям. Причины могут быть следующие:
- Политики конфиденциальности, такие как CCPA или GDPR.
- Отказ пользователей от предоставления данных
- Конкуренция с некоторыми партнерами (рекламными сетями, третьими сторонами)
AppsFlyer предоставляет два метода API для прекращения обмена данными с некоторыми или всеми партнерами:
- setSharingFilter: Используется рекламодателями, чтобы задать несколько сетей/интегрированных партнеров, которым нужно прекратить предоставлять данные.
- setSharingFilterForAllPartners: Используется рекламодателями, чтобы прекратить предоставлять данные всем сетям/интегрированным партнерам.
Эти методы фильтрации поддерживаются в SDK начиная с версии V5.4.1.
Метод фильтрации должен вызываться каждый раз при инициализации SDK, он влияет на всю сессию. Если требуется время, чтобы определить, нужно ли устанавливать фильтры общего доступа, то отложите инициализацию SDK.
Если метод активирован до первого вызова startTracking:
- Пользователи из SRN атрибутируются как органические, и их данные не передаются интегрированным партнерам.
- Пользователи по кликам из рекламных сетей (не SRN) правильно атрибутируются в AppsFlyer, но их данные не передаются в рекламные сети через постбэки, API, отчеты по сырым данным или каким-либо другим способом.
В настоящее время данные об удалении приложения нельзя фильтровать с помощью этих методов. Однако вы можете прекратить отправку событий удаления партнерам, настроив это на их страницах настройки в AppsFlyer.
getAppsFlyerUID
Описание |
Получение AppsFlyer ID. Подробные сведения см. здесь. |
Сигнатура метода |
|
Пример использования |
|
onAppOpenAttribution
Описание |
Получает данные с глубинными ссылками, когда приложение открывается по глубинной ссылке. |
Сигнатура метода |
|
onAttributionFailure
Описание |
Обработка ошибок получения данных по глубинным ссылкам. |
Сигнатура метода |
|
onConversionDataSuccess
Описание |
Получение данных о конверсии после установки. Полезно для отложенного диплинкинга. Примечание: Начиная с SDK V5, имя метода для получения данных о конверсиях — |
Сигнатура метода |
|
onConversionDataFail
Описание |
Обрабатывает ошибки, когда не удается получить данные о конверсиях для установок. |
Сигнатура метода |
|
onTrackingRequestFailure
Описание |
Метод обратного вызова для AppsFlyerTrackingRequestListener. Вызывается в случаях, когда SDK не удается сообщить о запуске приложения. |
Сигнатура метода |
|
Пример использования |
См. раздел Настройка прослушивателя для отслеживания запроса. |
onTrackingRequestSuccess
Описание |
Метод обратного вызова для AppsFlyerTrackingRequestListener. Вызывается, когда SDK успешно сообщает о запуске приложения. |
Сигнатура метода |
|
Пример использования |
См. раздел Настройка прослушивателя для отслеживания запроса. |
performOnAppAttribution
Описание |
Эта функция позволяет разработчикам вручную перезапустить onAppOpenAttribution со специальной ссылкой (URI или URL), не регистрируя новое повторное вовлечение. Этот метод может потребоваться, если приложению необходимо перенаправить пользователей по указанной ссылке или получить короткий URL-адрес AppsFlyer, не сворачивая приложение. Это может потребоваться, поскольку обычно обратный вызов onAppOpenAttribution вызывается, только если приложение было открыто по диплинку. |
Сигнатура метода |
|
Пример использования |
|
reportTrackSession
Описание |
Информирование о сеансах в том случае, если ваше приложение является служебным приложением, которое работает в фоновом режиме. |
Сигнатура метода |
|
Пример использования |
|
sendDeepLinkData (не рекомендуется с версии V5.3.0)
Описание |
Этот метод больше не используется, чтобы гарантировать, что вы получите данные об атрибуции, даже если пользователь перенаправлен по диплинку на определенную активность. Вместо этого убедитесь, что вызван метод startTracking(). Подробные сведения см. здесь. |
Сигнатура метода |
|
Пример использования |
|
sendPushNotificationData
Описание |
Измерение и получение данных из кампаний с push-уведомлениями. Дополнительные сведения см. в разделе Измерение push-уведомлений. |
Сигнатура метода |
|
Пример использования |
|
setAdditionalData
Описание |
Добавление дополнительных данных для отправки на внешние партнерские платформы. |
Сигнатура метода |
|
Пример использования |
См. раздел Настройка дополнительных данных. |
setAndroidIdData
Описание |
Отправка Android ID в AppsFlyer. См. OAID, IMEI и Android ID. |
Сигнатура метода |
|
Пример использования |
|
setAppInviteOneLink
Описание |
Установка идентификатора шаблона OneLink, который используется для создания настраиваемых ссылок атрибуции для приглашений пользователей. |
Сигнатура метода |
|
Пример использования |
См. описание настройки ссылки OneLink для атрибуции приглашений пользователей. |
setCollectAndroidID
Описание |
Указание на необходимость отправлять Android ID в AppsFlyer. |
Сигнатура метода |
|
Пример использования |
setCollectIMEI
Описание |
Указание на необходимость отправлять IMEI в AppsFlyer. |
Сигнатура метода |
|
Пример использования |
setCustomerIdAndTrack
Описание |
Инициирование SDK в тот момент, когда идентификатор Customer User ID становится доступным. Дополнительные сведения см. в пунктеЗадержка инициализации SDK для идентификатора customerUserID. |
Сигнатура метода |
|
Пример использования |
|
Установка Customer User ID
Описание |
Настройка Customer User ID. Дополнительные сведения см. в пунктеУстановка Customer User ID. |
Сигнатура метода |
|
Пример использования |
|
setDebugLog
Описание |
Включение журналов отладки. См. описание отладки для Android. |
Сигнатура метода |
|
Пример использования |
|
setDeviceTrackingDisabled
Описание |
Анонимизация установок, событий и сеансов пользователя. Дополнительные сведения см. в пунктеАнонимизация пользовательских данных. |
Сигнатура метода |
|
Пример использования |
|
setLogLevel
Описание |
Настройка уровня для журнала SDK AppsFlyer. |
Сигнатура метода |
|
Пример использования |
|
setMinTimeBetweenSessions
Описание |
Настройка минимального временного интервала между сеансами. Дополнительные сведения см. в пунктеНастройка временного интервала между сеансами. |
Сигнатура метода |
|
Пример использования |
|
setOaidData
Описание |
Отправка OAID в AppsFlyer. См. OAID, IMEI и Android ID. |
Сигнатура метода |
|
Пример использования |
|
setOutOfStore
Описание |
Указание независимого магазина приложений, из которого было загружено приложение. |
Сигнатура метода |
|
Пример использования |
|
setPreinstallAttribution
Описание |
Настройка SDK на информирование о предустановке при запуске предустановленного приложения. |
Сигнатура метода |
|
Пример использования |
См статью о кампаниях по предустановке приложений для Android. |
setResolveDeepLinkURLs
Описание |
Получение ссылки OneLink от доменов регистрации кликов. Дополнительные сведения см. в разделе Разрешение упакованных URL-адресов глубинных ссылок. |
Сигнатура метода |
|
Пример использования |
|
setSharingFilter
Описание |
Используется рекламодателями, чтобы задать несколько сетей/интегрированных партнеров, которым нужно прекратить предоставлять данные. Узнать больше |
Сигнатура метода |
|
Пример использования |
|
setSharingFilterForAllPartners
Описание |
Используется рекламодателями, чтобы прекратить предоставлять данные всем сетям/интегрированным партнерам.Узнать больше |
Сигнатура метода |
|
Пример использования |
|
startTracking
Описание |
Запуск SDK при открытии приложения. Подробные сведения см. в разделе обинициализации SDK. |
Сигнатура метода |
|
Пример использования |
|
stopTracking
Описание |
Прекращение выполнения всех функций SDK. Подробные сведения см. в разделе озащите конфиденциальной информации пользователей, пункт "Отказ". |
Сигнатура метода |
|
Пример использования |
|
trackAppLaunch (не рекомендуется с версии V5.2.0)
Описание |
Данный метод устарел. Вместо него используйте startTracking. Имеет две функции:
|
Сигнатура метода |
|
Пример использования |
|
trackEvent
Описание |
Отправка в AppsFlyer внутренних событий приложения. Подробные сведения см. в разделе орегистрации внутренних событий приложения. |
Сигнатура метода |
|
Пример использования |
|
updateServerUninstallToken
Описание |
Для разработчиков, которые не используют Firebase для измерения количества удалений. Подробные сведения см. в статье Измерение количества удалений. |
Сигнатура метода |
|
Пример использования |
|
waitForCustomerUserId
Описание |
Задержка инициализации SDK до установки идентификатора клиента. |
Сигнатура метода |
|
Пример использования |
|
Устаревшие API
Устаревший API означает, что этот метод будет заменен другим. Для разработчиков это подходящее время, чтобы обновить код.
Дата прекращения поддержки — это дата, после которой метод перестанет работать или будет иметь ограниченные функции.
Имя API | Устарело с версии | Дата деактивации |
---|---|---|
sendDeepLinkData |
5.3.0 |
TBD |
trackAppLaunch |
5.2.0 |
TBD |
Комментарии
Войдите в службу, чтобы оставить комментарий.