Интеграция AppsFlyer SDK — Android

  • Рекламодатели
  • Разработчики

android.pngВерсия SDK: 4.10.3 (Заметки о выпуске)

1. Обзор

SDK AppsFlyer позволяет регистрировать установки приложений и события. Разработанный нами SDK — надежный (на сегодняшний день выполнено более 7 миллиардов установок ), безопасный, легкий и его очень просто встраивать.

С его помощью можно регистрировать установки приложения, обновления и сеансы, а также другие внутренние события приложения (в том числе покупки из приложения, уровни игры и т.п.), что позволяет оценивать ROI и уровень вовлеченности пользователей.

 Важно!

AppsFlyer SDK для Android совместим с ОС Android начиная с версии 2.3.

Пакет SDK также совместим с немобильными платформами на базе Android, такими как Smart TV (в том числе Amazon Fire TV).

Для приложений, разработанных для устройств Amazon Fire TV, используется решение AppsFlyer для атрибуции приложений, опубликованных вне магазина.

Для миграции с AppsFlyer SDK V.3.3.x для Android нажмите здесь.

 Совет

  • Для интеграции БАЗОВОГО SDK, то есть для использования только функции атрибуции установок, необходимо ОБЯЗАТЕЛЬНО выполнить действия, описанные в пунктах 2 и 3.
  • Использование функций, описанных в пункте "Регистрация внутренних событий приложения", НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ.
  • Остальные функции, описанные в этой статье, использовать НЕОБЯЗАТЕЛЬНО, хотя некоторые из них могут оказаться полезными для вашего приложения в зависимости от логики его функционирования. Например, использование при первом запуске приложения таких функций, как регистрация доходов или получение данных о конверсиях, может оказать существенную помощь в его продвижении.
  • Перед тем как интегрировать SDK, добавьте приложение в свой аккаунт AppsFlyer.

2. Начало работы

2.1. Загрузка SDK

Чтобы загрузить последнюю версию пакета AppsFlyer SDK для Android в формате JAR, нажмите здесь.

Для проверки целостности загруженного пакета SDK нажмите здесь.

Подробнее о примере приложения от AppsFlyer см. здесь.

2.2 Встраивание SDK в приложение

Интеграцию AppsFlyer SDK можно выполнить либо автоматически с помощью функции управления зависимостями системы Gradle, либо вручную, используя файл SDK.jar.

2.3 Добавление SDK в свой проект

Самый простой способ интеграции SDK в свой проект — это использование функции управления зависимостями системы сборки Gradle. Сведения о версиях см. здесь.

Если вы не используете Gradle, загрузите и скопируйте файл AF-Android-SDK.jar к классам вашего проекта.

Добавление AppsFlyer’s Android SDK для Android:

  1.  Откройте свой проект (или создайте новый), а затем откройте ваше_приложение | build.gradle
  2.  Добавьте этот элемент в /app/build.gradle перед блоком зависимостей:
repositories { 
  mavenCentral()
}
  1. Добавьте зависимость "implementation" с последней версией SDK AppsFlyer.
  2. Добавьте этот элемент в /app/build.gradle на уровне модуля после блока репозиториев:
dependencies {
// always make sure to use the latest SDK version: 
// https://mvnrepository.com/artifact/com.appsflyer/af-android-sdk
	implementation 'com.appsflyer:af-android-sdk:4.9.0'
	implementation 'com.android.installreferrer:installreferrer:1.0'
}

 Важно!

  • Зависимость 'com.android.installreferrer:installreferrer:1.0' необходима для поддержки API Google Play Install referrer.  Использование этого API позволяет повысить точность атрибуции, обеспечить защиту от мошеннических установок и многое другое.
  • Поддержка этого API предусмотрена в SDK AppsFlyer для Android начиная с версии 4.8.6. При переходе с SDK более старой версии добавьте эту новую зависимость путем обновления метода инициализации SDK.
  • Разработчикам, которые используют утилиту ProGuard и хотят использовать новый Google API для отслеживания рефереров, необходимо добавить в ProGuard правило: -dontwarn com.android.installreferrer.
  • Разработчикам, которые не используют сборку Gradle или библиотеку aar и хотят использовать новый API Google для отслеживания рефереров, необходимо вручную добавить com.android.installreferrer jar в виде файла и убедиться, что добавлено разрешение: com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE.

2.4 Добавление необходимых разрешений

Файл 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.5 Настройка BroadcastReceiver в AndroidManifest.xml

Есть два варианта использования Broadcast Receiver для определения источника установки (параметр referrer):

Использование одного Broadcast Receiver Использование нескольких Broadcast Receiver

Если в 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>

 Совет

Если после добавления ресивера в файл AndroidManifest.xml выдается ошибка "Unresolved class SingleInstallBroadcastReceiver", это означает, что сначала нужно выполнить сборку приложения.

3. Инициализация SDK

Процедура инициализации SDK состоит из двух этапов. На первом этапе предоставляется ключ DevKey, а также дополнительный интерфейс conversionDataListener. На втором этапе вызов startTracking указывает, что все соответствующие подготовительные действия завершены (например, вызов setCustomerUserId), и SDK может начинать атрибуцию всех событий.

Для инициализации SDK добавьте в свое приложение функцию onCreate():

import com.appsflyer.AppsFlyerLib;
import com.appsflyer.AppsFlyerConversionListener;

public class AFApplication extends Application {
  private static final String AF_DEV_KEY = "";
  @Override
  public void onCreate() {
    super.onCreate();
    AppsFlyerConversionListener conversionDataListener = 
    new AppsFlyerConversionListener() {
      ...
    };
    AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionDataListener, getApplicationContext());
    AppsFlyerLib.getInstance().startTracking(this);  }
}

 Примечание

Есть возможность отложить вызов функции startTracking и поместить её в любую функцию OnCreate() данной Activity. .

 Совет

Зависимость implementation 'com.android.installreferrer:installreferrer:1.0' и метод getApplicationContext() перенесены в следующий метод: AppsFlyerLib.getInstance().init(AF_DEV_KEY, getConversionListener(), getApplicationContext()); Это необходимое условие для использования нового Google API для отслеживания рефереров в AppsFlyer.

Ключ разработчика можно получить в панели управления AppsFlyer в разделе "Конфигурация", меню "Настройки приложения":

Это API дает возможность АppsFlyer отслеживать установки, сеансы и обновления.

4. Регистрация внутренних событий приложения

Отслеживая события внутри приложения, можно понять, что в нем происходит. Рекомендуется заранее выделить те метрики, которые понадобятся для оценивания ROI и LTV.

Для регистрации внутренних событий приложения используется вызов функции trackRichEvent с именем события и значениями параметров. Подробные сведения см. в статье о внутренних событиях приложения.

 Примечание

Имя внутреннего события приложения должно содержать не более 45 символов. Имена событий, в которых более 45 символов, не отображаются на панели управления. Их можно увидеть только в необработанных данных, полученных с помощью Push и Pull API.

//context - используйте getApplicationContext()
//eventName — любая строка, определяющая имя события.
//eventValues — перечень параметров событий, составляющих насыщенное событие.  

public static void trackEvent(Context context, String eventName, Map eventValues);

Пример: событие достижения уровня внутри приложения

Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.LEVEL,9);
eventValue.put(AFInAppEventParameterName.SCORE,100);
AppsFlyerLib.getInstance().trackEvent(context,AFInAppEventType.LEVEL_ACHIEVED,eventValue);

В этом примере генерируется событие типа af_level_achieved со следующими значениями:{af_level: 9, af_score: 100}

 Примечание

  • AppsFlyer поддерживает неанглийские символы с событиями внутри приложения или любым API для SDK, начиная с SDK для Android версии 4.8.1.
  • Не добавляйте к цифрам символы денежных единиц или запятые, поскольку они не распознаются.

 Пример использования

Map<String,Object> eventValues = new HashMap<>();
eventValues.put(AFInAppEventParameterName.REVENUE, 1200);
eventValues.put(AFInAppEventParameterName.CURRENCY, "JPY");
AppsFlyerLib.getInstance().trackEvent(this, AFInAppEventType.PURCHASE, eventValues);

record_in_app_event_android_studio.png

5. Настройка диплинкинга

 Совет

Настоятельно рекомендуется интегрировать диплинкинг в ваше приложение. Диплинкинг — это важная часть ретаргетинговых кампаний, и его необходимо использовать при проведении таких кампаний.

Для каждой активности, которая может использоваться для диплинкинга (при необходимости и для основной активности), добавьте в onCreate() такую строку:

AppsFlyerLib.getInstance().sendDeepLinkData(this);

Activities которые открываются при Deeplinking, должны содержать следующий intent-filter в определении Activity в manifest файле. 

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="yourUniquescheme" />
</intent-filter>

Настроенная схема взаимосвязана со значением af_dp, включенным в ссылку атрибуции.

Для получения данных диплинкинга необходимо выполнить обратный вызов метода onAppOpenAttribution , который вызывается из SDK AppsFlyer. Этот вызов возвращает параметры ссылки Onelink или ссылки атрибуции, которые используются для запуска приложения. Затем значения этих параметров можно проанализировать и применить логику для вызова соответствующей страницы приложения.

void onAppOpenAttribution(Map<String,String> attributionData);

Подробные сведения см. здесь или в разделе данной статьи Получение данных о конверсиях.

6. Регистрация данных о доходах

Используйте параметр события af_revenue (AFInAppEventParameterName.REVENUE) для подсчета выручки как внутреннего события приложения. Этому параметру можно присвоить любое числовое значение — положительное или отрицательное.

 Примечание

af_revenue — это ЕДИНСТВЕННЫЙ параметр события, который учитывается в AppsFlyer как реальная выручка и отображается в необработанных данных и на панели управления. Подробные сведения см. здесь.

Пример: внутреннее событие приложения, содержащее доход

Map<String, Object> eventValue = new HashMap<String, Object>();
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(getApplicationContext() , AFInAppEventType.PURCHASE , eventValue);

В этом примере генерируется событие типа af_purchase со следующими значениями:

{af_content_id: “1234567”, af_content_type: “category_a”, af_revenue: 200, af_currency: “USD”}

В этом событии покупки указан доход $200, который будет отображаться на панели управления.

 Примечание

При установке кода местной валюты пользователя для покупок из приложения необходимо использовать код валюты из 3 букв по стандарту ISO 4217 (значение по умолчанию — USD). 

Чтобы задать код валюты для всех событий, вызовите метод AppsFlyer.setCurrencyCode("GBP");

 Важно!

Для значений дохода НЕЛЬЗЯ применять какое бы то ни было форматирование. В них не могут использоваться запятые в качестве десятичных разделителей, знаки валюты или текст. Событие дохода должно быть, например, в таком формате: 1234.56.

Регистрация отрицательного дохода

В тех случаях, когда нужно регистрировать отрицательный доход, например при отмене покупки пользователем или получении им компенсации, можно отправлять данные об отрицательном доходе.

Map<String, Object> eventValue = new HashMap<String, Object>();
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(getApplicationContext() , "cancel_purchase" , eventValue);

 Примечание

Обратите внимание на приведенный выше код:

  1. Перед значением дохода стоит знак минус
  2. Имя события имеет уникальное значение "cancel_purchase", которое позволяет легко найти события отрицательного дохода на панели управления и в отчетах о необработанных данных.

7. Получение данных о конверсиях

AppsFlyer предоставляет доступ к данным атрибуции пользователей для каждой новой установки в реальном времени непосредственно на уровне SDK. Таким образом, можно предоставлять пользователям персонализированный контент или направлять их на определенные действия в приложении, что может значительно увеличить их взаимодействие с вашим приложением.

Для доступа из SDK для Android к данным о конверсиях в AppsFlyer используйте ConversionDataListener:

public interface AppsFlyerConversionListener {
    void onInstallConversionDataLoaded(Map<String,String> conversionData);
    void onInstallConversionFailure(String errorMessage);
}

Пример:

AppsFlyerLib.getInstance().registerConversionListener(this, new AppsFlyerConversionListener() {
 @Override
 public void onInstallConversionDataLoaded(Map<String, String> conversionData) {
   for (String attrName : conversionData.keySet()) {
     Log.d("LOG_TAG", "attribute: " + attrName + " = " + conversionData.get(attrName));
   }
 }
 @Override
 public void onInstallConversionFailure(String errorMessage) {
   Log.d("LOG_TAG", "error getting conversion data: " + errorMessage);
 }
 @Override
 public void onAppOpenAttribution(Map<String, String> conversionData) {
 }
 @Override
 public void onAttributionFailure(String errorMessage) {
   Log.d("LOG_TAG", "error onAttributionFailure : " + errorMessage);
 }
});

8. Идентификаторы пользователя

Получение AppsFlyer Device ID

Для каждой новой установки приложения AppsFlyer создает уникальный ID устройства. Для получения уникального ID из AppsFlyer используйте следующий API:

public String getAppsFlyerUID(Context context);

Пример использования:

String appsFlyerId = AppsFlyerLib.getInstance().getAppsFlyerUID(this);

Установка Customer User ID

Установка собственного ID клиента позволяет создать перекрестные ссылки между своим уникальным ID и уникальным ID AppsFlyer, а также ID других устройств. Этот идентификатор можно посмотреть в отчетах AppsFlyer в формате CSV, а также получить с помощью Postback API для перекрестных ссылок между внутренними идентификаторами.

Для установки своего Customer User ID используйте такой код:

public void setCustomerUserId(String id);

 

Пример использования:

AppsFlyerLib.getInstance().setCustomerUserId("myId");

 Примечание

Рекомендуется установить свой идентификатор клиента как можно раньше, так как после его установки только он привязывается к событиям, включаемым в отчеты. Если вызов setCustomerUserId выполняется перед вызовом startTracking, при экспорте необработанных данных идентификатор клиента будет отображаться и для установок, и для событий. Если же этот идентификатор установить позже, то он будет отображаться только для событий, зарегистрированных после вызова этого метода.

Клиентский User ID можно также использовать для интеграции с аналитическими платформами (такими как Mixpanel и Swrve).

 

Получение Customer User ID:

Чтобы избежать необходимости повторно настраивать значение customer user ID после первого запуска, проверьте, заполнено ли это значение, используя

AppsFlyerProperties.getInstance().getString(AppsFlyerProperties.APP_USER_ID)

Подробные сведения о Customer User ID см. здесь.

Google Advertising ID

Начиная с версии 4.8.0, AppsFlyer SDK автоматически выполняет сбор идентификаторов рекламы Google google_advertising_id. Требование включать сбор идентификаторов рекламы Google относится только к SDK версии 4.7.X или более старых версий.

IMEI и Android ID

Если устройство работает на ОС версии выше KitKat (4.4) и использует службы Google Play, то по умолчанию SDK не проводит сбор данных IMEI и Android ID (если версией SDK является 4.8.8 или более ранняя, определенным приложениям требуется GPS). 

Чтобы гарантированно отправить эти идентификаторы в AppsFlyer, разработчики могут использовать следующие API и размещать их перед кодом startTracking:

AppsFlyerLib.getInstance().setImeiData("IMEI_DATA_HERE");
AppsFlyerLib.getInstance().setAndroidIdData("ANDROID_ID_DATA_HERE");

Если службы Google Play в приложении НЕ используются, сбор данных IMEI и Android ID выполняется с помощью SDK. Однако приложения, использующие службы Google Play, не должны выполнять сбор данных IMEI, так как это противоречит политике Google Play.

Для отмены сбора данных IMEI и Android ID разработчики могут использовать такие API:

AppsFlyerLib.getInstance().setCollectIMEI(false);
AppsFlyerLib.getInstance().setCollectAndroidID(false);

 Предупреждение

Для правильной атрибуции НЕОБХОДИМО получить ID хотя бы одного из этих идентификаторов: GAID, Android ID или IMEI.

9. Дополнительные возможности

Измерение количества удалений приложений

AppsFlyer позволяет измерять количество удалений приложений пользователями, привлеченными из различных источников.

Чтобы правильно выполнить эту процедуру и использовать все ее возможности, ознакомьтесь с этой статьей.

Регистрация push-уведомлений

AppsFlyer позволяет учитывать пуш-уведомления при проведении ретаргетинговой кампании.

Чтобы включить эту функцию, добавьте приведенный ниже метод в каждую Activity внутри метода onCreate, которая запускается после нажатия на уведомление:

AppsFlyerLib.getInstance().sendPushNotificationData(this);

Данные полезной нагрузки должны включать в себя объект af и строку с соответствующим ключевым значением:

Пример:

{ 
  "data":{ 
   "score":"5x1",
   "time":"15:10",
   "af":{ 
     "c":"test_campaign",
     "is_retargeting":"true",
     "pid":"push_provider_int"
   }
  }
}
{

{ 
  "data":{ 
   "score":"5x1",
   "time":"15:10",
   "click_action":"com.example.someAction",
   "af":{ 
     "c":"test_campaign",
     "is_retargeting":"true",
     "pid":"push_provider_int"
   }
  }
}

 Примечание

Подробнее об измерении push-уведомлений см. здесь.

Атрибуция в кампаниях перекрестной рекламы

AppsFlyer позволяет атрибутировать и регистрировать установки, источником которых является перекрестная реклама одного из ваших приложений в другом приложении, которое уже есть у пользователя. Перекрестная реклама позволяет значительно увеличить количество установок ваших приложений.

Подробные сведения см. в статье Атрибуция в кампаниях перекрестной рекламы.

Атрибуция приглашений пользователей

AppsFlyer позволяет атрибутировать и регистрировать установки, источником которых являются приглашения, отправленные пользователями из вашего приложения. С их помощью уже имеющиеся пользователи могут приглашать своих друзей и знакомых в качестве новых пользователей вашего приложения, что может существенно способствовать его продвижению. Подробные сведения см. в статье Атрибуция приглашений пользователей.

Установка кода валюты

Можно установить коды конкретных валют, используемых в каждом внутреннем событии приложения, которые передаются в AppsFlyer. Еще можно установить код глобальной валюты. Код глобальной валюты используется в тех случаях, когда параметр af_currency

AFInAppEventParameterName.CURRENCY

не передается вместе с данными внутреннего события приложения.

По умолчанию используется код USD (американский доллар). Коды валют по стандарту ISO см. здесь.

Чтобы установить код валюты, используйте этот API:

public void setCurrencyCode(String currencyCode);

Пример использования:

AppsFlyerLib.getInstance().setCurrencyCode("GBP");

Валидация покупок в приложении

При покупках из приложения SDK AppsFlyer позволяет выполнять проверку на сервере. Чтобы запустить проверку покупок, вызовите метод validateAndTrackInAppPurchase из функции onActivityResult.

Этот запрос автоматически создает событие внутри приложения af_purchase.

public static void validateAndTrackInAppPurchase(Context context, 
String publicKey, String signature, String purchaseData, 
String price, String currency, HashMap<String, String> additionalParameters);

Этот вызов содержит два блока обратного вызова — один для варианта «Успешно», а второй для варианта «Ошибочно» (по любой причине, включая сбой проверки).

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);
     }
});

Пример использования:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == 1001) {
    String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
    String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
    if (resultCode == RESULT_OK) {
      HashMap<String,String> event = new HashMap<>();
      event.put(AFInAppEventParameterName.PRICE,"9");
      AppsFlyerLib.getInstance().validateAndTrackInAppPurchase(getApplicationContext(),publicKey, dataSignature, purchaseData, "3.00", "ILS", event);
    }
  }
} 

 Примечание

Вызов validateAndTrackInAppPurchase автоматически создает внутри приложения событие af_purchase. Отправлять это событие самостоятельно не нужно.

Анонимизация пользовательских данных

В AppsFlyer предусмотрен метод анонимизации идентификаторов определенных пользователей в аналитике AppsFlyer. Этот метод соответствует последним требованиям по защите личной информации и политикам Facebook в отношении обработки данных и конфиденциальности. Значение по умолчанию  — NO (НЕТ), то есть по умолчанию анонимизация не выполняется.

Для реализации явной анонимизации установок, событий и сеансов пользователя используйте этот API во время инициализации SDK:

public void setDeviceTrackingDisabled(boolean isDisabled);

Пример использования:

AppsFlyerLib.getInstance().setDeviceTrackingDisabled(true);

Если нужно отменить анонимизацию, снова вызвав функцию deviceTrackingDisabled, установите значение false.

 Предупреждение

Анонимизация пользователей СУЩЕСТВЕННО влияет на данные атрибуции.
Используйте этот параметр ТОЛЬКО для тех регионов, где сбор информации о пользователях запрещен законом.

Настройка временного интервала между сеансами

По умолчанию 2 сеанса учитываются как отдельные, если интервал между двумя запусками приложения составляет не меньше 5 секунд (см. дополнительные сведения об учете сеансов). Однако, если необходимо установить свой вариант минимального интервала между сеансами, можно использовать этот API:
AppsFlyerLib.setMinTimeBetweenSessions(int seconds);
Обратите внимание, что установка большого интервала между запусками может отрицательно сказаться на работе API, которые используют данные сеансов, например, для диплинкинга.

Фоновые сеансы для служебных приложений

Если ваше приложение — это служебное приложение, работающее в фоновом режиме, то в активности onCreate() этот API можно использовать так:

public void reportTrackSession(Context context);

Пример использования:

AppsFlyerLib.getInstance().reportTrackSession(context);

Атрибуция установок, не связанных с магазином

 Примечание

Магазин по умолчанию — это Google Play. Если ваше приложение опубликовано только в Google Play, этот раздел можно пропустить.

Для регистрации установок, не связанных с магазином Google Play, пропишите в файле AndroidManifest.xml своего приложения канал или магазин. При этом для каждого файла APK необходимо задать уникальное имя канала или любое имя магазина. Значение CHANNEL чувствительно к регистру.

Пример:

<meta-data android:name="CHANNEL" android:value="Amazon" />
<meta-data android:name="CHANNEL" android:value="Standalone"/>
<meta-data android:name="CHANNEL" android:value="Verizon" />

 Примечание

Значение CHANNEL задается на панели управления AppsFlyer во время настройки приложения.

Тег метаданных необходимо поместить внутри тега </application>.

Подробные сведения о регистрации установок приложений, приобретенных не в магазине, см. здесь.

Отказ от использования

В исключительных случаях может потребоваться полное отключение всех функций SDK для соблюдения норм законодательства и правил конфиденциальности. Для этого можно использовать API isStopTracking. После вызова этого API пакет SDK завершит обмен данными с нашими серверами и перестанет функционировать.

AppsFlyerLib.getInstance().stopTracking(true, context);

Есть несколько различных сценариев, которые пользователь.может применить для отказа использования данных. Настоятельно рекомендуется строго следовать инструкциям сценария, применимого для вашего приложения.

В любом случае SDK можно активировать повторно путем вызова того же API с передачей значения "false".

 Важно

Не вызывайте trackAppLaunch, если параметр isStopTracking установлен на значение "true"

Чтобы возобновить действие функций SDK после установки для параметра stopTracking значения false, используйте следующий API SDK:

AppsFlyerLib.getInstance().trackAppLaunch(getApplicationContext(), AF_DEV_KEY);

 Предупреждение

Используйте API "stopTracking" только в тех случаях, когда необходимо полностью отключить для данного пользователя функции SDK. Использование этого API СУЩЕСТВЕННО влияет на атрибуцию, сбор данных и механизм диплинкинга.

Задержка инициализации SDK для идентификатора customerUserID

Можно отложить инициализацию SDK до настройки идентификатора клиента customerUserID. Эта функция гарантирует, что SDK не начнет функционировать до предоставления идентификатора customerUserID. При использовании этого API все внутренние события приложения и вызовы всех других API 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 = ;
  @Override
  public void onCreate() {
    super.onCreate();
    AppsFlyerConversionListener conversionDataListener = 
    new AppsFlyerConversionListener() {
      ...
    };
    AppsFlyerLib.getInstance().waitForCustomerUserId(true); 
    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);
  }
}

 Предупреждение

Используйте данный API, только если он соответствует логике функционирования приложения. Использование данного API повышает вероятность расхождений и уязвимость приложения для мошенничества.

Настройка дополнительных пользовательских данных

API setAdditionalData необходим для интеграции на уровне SDK с несколькими внешними партнерским платформами, включая Segment, Adobe и Urban Airship. Используйте данный API, только в тех случаях, когда в руководстве по интеграции платформы специально указана необходимость использования API setAdditionalData.
Ниже приведен пример кода для использования setAdditionalData в приложениях для устройств Android:

HashMap<String,Object> CustomDataMap = new HashMap<>();
CustomDataMap.put("custom_param_1","value_of_param_1");
AppsFlyerLib.getInstance().setAdditionalData(CustomDataMap);

Атрибуция для предустановленных приложений

Для атрибуции предустановленных приложений в ОС Android есть различные методы.

Дополнительные сведения см. здесь.

Настройка listener для отслеживания запроса

Для получения подтверждения от серверов AppsFlyer о поступлении запроса на отслеживание можно использовать listener - AppsFlyerTrackingRequestListener.

Метод обратного вызова onTrackingRequestSuccess() выполняется каждый раз, когда в ответ на запрос атрибуции, посланный пакетом SDK, возвращается код 200.

Для любого другого ответа выполняется метод обратного вызова OnTrackingRequestFailure(String error) и возвращается ответ в виде строки ошибки.

Пример использования

AppsFlyerLib.getInstance().startTracking(this.getApplication(),"devKey", myListener());
private AppsFlyerTrackingRequestListener myListener() {  
  return new AppsFlyerTrackingRequestListener() { 
    @Override public void onTrackingRequestSuccess() { 
      Log.d("Debug", "Got 200 response from server");  
    }  @Override public void onTrackingRequestFailure(String error) { 
      Log.d("Debug", error); 
      }  
    }; 
  }

Разрешение упакованных URL-адресов глубинных ссылок

Если используются ссылки OneLink, которые поддерживают ссылки для приложений Android, и при этом упаковываются в сторонние универсальные ссылки, то для уведомления SDK AppsFlyer о том, какие домены CLICK, вызывающие приложение, нужно разрешить и использовать для извлечения базовой ссылки OneLink, можно применять API setResolveDeepLinkURLs. Это позволит поддерживать диплинкинг и атрибуцию при упаковке ссылки OneLink в стороннюю универсальную ссылку. Этот API нужно обязательно вызвать перед инициализацией SDK.

AppsFlyerLib.getInstance().setResolveDeepLinkURLs("example.com", "click.example.com");

10. Тестирование интеграции SDK

Описание процедуры тестирования интеграции SDK до и после отправки приложения в магазин Google Play см. здесь.

Теперь можно приступать к измерению результатов, полученных от медиа-источников, с которыми вы работаете.

11. Известные проблемы

Если вы используете ProGuard и получили предупреждение относительно нашего AFKeystoreWrapper, добавьте в свой файл правил ProGuard такой код:

-keep class com.appsflyer.** { *; }
Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 20 из 25

Комментарии

0 комментариев

Войдите в службу, чтобы оставить комментарий.