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

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

1. Обзор

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

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

The AppsFlyer Android SDK is compatible with Android OS version 2.3 and above.

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

 Совет

  • Chapters 2 and 3 are MANDATORY to implement BASIC SDK integration, i.e. install attribution only
  • Tracking in-app events chapter is HIGHLY RECOMMENDED to implement
  • The rest of the described features are OPTIONAL to implement, although some of them may be necessary for you, depending on your app's business logic. For example, tracking revenue or getting the conversion data on first launch may be vital for your app's flow

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

2.1 SDK Download

Чтобы загрузить последнюю версию пакета 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.  Add this to Module-level /app/build.gradle before dependencies:
repositories { 
    mavenCentral()
}
  1. Add the implementation dependency with the latest version of the AppsFlyer SDK.
  2. Add this to Module-level /app/build.gradle after repository:
dependencies {
	implementation 'com.appsflyer:af-android-sdk:4+@aar'
	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>

 Совет

If you get the error "Unresolved class SingleInstallBroadcastReceiver" after adding the receiver to AndroidManifest.xml, make sure to build the app first.

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

Initialization of the SDK is completed in two stages. In the first stage the DevKey is supplied along with an optional conversionDataListener. In the second stage the call to startTracking indicates that all relevant preparations are complete (e.g. call setCustomerUserId) and the SDK can start tracking all events.

Для инициализации 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. .

 Совет

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

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

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

4. Отслеживание внутренних событий приложения (In-App Events)

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

Tracking in-app events is performed by calling trackEvent with event name and value parameters. See In-App Events documentation for more details.

 Примечание

Имя внутреннего события приложения должно содержать не более 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);

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 , который вызывается из AppsFlyer SDK.  Этот вызов возвращает параметры ссылки Onelink/tracking, которые используются для запуска приложения. Затем можно проанализировать значения и применить логику для вызова соответствующей страницы приложения.

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, которая будет отображаться на панели управления. 

 Примечание

Setting user local currency code for in-app purchases - the currency code should be a 3 character ISO 4217 code. (default is USD). 

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

 Важно!

Do NOT format the revenue value in any way. It should not contain comma separators, currency sign, or text. A revenue event should be similar to 1234.56, for example.

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(AppsFlyerLib.LOG_TAG, "attribute: " + attrName + " = " + conversionData.get(attrName));
      }
  }
  @Override
  public void onInstallConversionFailure(String errorMessage) {
      Log.d(AppsFlyerLib.LOG_TAG, "error getting conversion data: " + errorMessage);
  }
  @Override
  public void onAppOpenAttribution(Map<String, String> conversionData) {
  }
  @Override
  public void onAttributionFailure(String errorMessage) {
      Log.d(AppsFlyerLib.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");

 Примечание

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

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

 

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

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

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

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

Настройка User Email

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

Можно использовать следующие методы шифрования: SHA1, MD5, SHA256 и прямое шифрование.

Пример:

public void setUserEmails(String... emails);


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

AppsFlyerLib.getInstance().setUserEmails(AppsFlyerProperties.EmailsCryptType.MD5, "email1@domain.com","email2@domain.com", ….);

 Примечание

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

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 можно измерять деинсталляции приложения.

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

Tracking Push Notifications

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-уведомлений см. здесь.

Cross Promotion Tracking

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

Подробные сведения см. в статье об отслеживании cross-promo кампаний здесь.

Отслеживание пользовательских приглашений

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

Подробные сведения см. в статье "Отслеживание приглашений пользователя" здесь.

Set Currency Code

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

AFInAppEventParameterName.CURRENCY

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

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

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

public void setCurrencyCode(String currencyCode);

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

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

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

При покупках из приложения AppsFlyer SDK выполняет проверку сервера. Чтобы запустить отслеживание валидации покупок, вызовите метод 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);
       }
   }
} 

 Примечание

Calling validateAndTrackInAppPurchase automatically generates an af_purchase in-app event. There is no need to send this event yourself.

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

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

Track Out-of-Store Apps

 Примечание

Магазин по умолчанию — это 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"

Чтобы возобновить отслеживание после установки параметра stopTracking на значение "false", используйте следующий API комплекта разработчика ПО:

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

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

Используйте API "stopTracking", только если необходимо полностью исключить данного пользователя из любого процесса отслеживания. Использование данного 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);
       // Сделайте все возможное, чтобы получить customerUserID
       // ...
       // Любой код SDK AppsFlyer, вызываемый здесь, будет отменен
      //Вызовите следующий API после получения customerUserID:
 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); 
            }   
        }; 
    }

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

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

Now you can start tracking the media sources you work with.

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

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

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

Комментарии

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

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

Статьи в этом разделе