Руководство по интеграции плагина для Unity V6: базовая интеграция SDK

Краткий обзор. Интеграция и установка SDK AppsFlyer в приложения для Android или iOS, разработанные с помощью Unity. Когда вы выполните задачи базовой интеграции, приложение будет готово к атрибуции установок и измерению внутренних событий. 

 Материалы по теме

Чтобы получить полное представление об интеграции плагина для Unity в приложения, ознакомьтесь со следующими статьями:

Добавление плагина в приложение

 Важно!

AppsFlyer Unity SDK не поддерживает внутреннюю систему сборки Unity.

Скачивание плагина AppsFlyer для Unity

Скачайте последнюю версию плагина Unity с GitHub.

Установка плагина

Используйте один из следующих способов установки.

С EDM4UБез EDM4U

External Dependency Manager for Unity (EDM4U) распространяется с плагином AppsFlyer для Unity по умолчанию. Это упрощает процесс интеграции, разрешая конфликты зависимостей между вашим плагином и другими плагинами в вашем проекте.

Чтобы установить плагин:

Добавьте appsflyer-unity-plugin.v*.unitypackage, чтобы автоматически импортировать все активы, необходимые и для плагина AppsFlyer, и для EDM4U.

Настройка Android

Чтобы добавить необходимые разрешения для Android:

Задайте в файле 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" />

Для доступа к рекламному идентификатору Android приложения с целевым уровнем API 31 (Android 12) должны добавить в AndroidManifest.xml следующее разрешение:

<uses-permission android:name="com.google.android.gms.permission.AD_ID" />

Инициализация плагина

В этом разделе описана процедура внедрения и инициализации плагина.

Получение ключа разработчика

admin.png

  • Ключ используется как уникальный идентификатор аккаунта. В некоторых случаях существует ключ уровня приложения. 
  • Ключ разработчика является обязательным.

Чтобы получить ключ разработчика:

  1. В AppsFlyer перейдите в раздел Configuration (Настройки) > App Settings (Настройки приложения).
  2. Получите ключ разработчика. 

Инициализация плагина

С помощью префаба AppsFlyerИнтегрировать вручную

Чтобы инициализировать плагин с помощью префаба:

  1. Перейдите в раздел Assets (Активы) > AppsFlyer.
  2. Перетащите AppsFlyerObject.prefab в вашу сцену.

    prefab_en-us.png
  3. Задайте значения в следующих полях:

     Параметр Примечания
    Ключ разработчика Вставьте полученный ключ разработчика.
    Идентификатор приложения

    iOS: введите идентификатор приложения для iOS (без префикса id).

    Android: оставьте пустым.

    Получите данные о конверсиях Если в приложении реализованы диплинки AppsFlyer, установите значение "true". Значение по умолчанию: "false", т. е. по умолчанию диплинки НЕ реализованы.
    Is debug

    Для просмотра журналов отладки во время разработки: установите значение "true".

    Примечание. Перед выпуском приложения в рабочую среду обязательно отключите параметр (установите значение "false").

  4. Обновите код в разделе Assets (Активы) > AppsFlyer > AppsFlyerObjectScript.cs с помощью других доступных API.

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

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

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

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

Имена и параметры внутренних событий приложения

Чтобы отправлять события:

[Рекомендуется] Используйте имена и параметры событий по следующим причинам:

  • Стандартное именование. AppsFlyer сможет автоматически сопоставлять события с сетями типа SRN, такими как Meta Ads, Google, Twitter.
  • Обратная совместимость. Если в AppsFlyer будет изменено имя какого-либо события или параметра, то это не вызовет никаких проблем. Внедрение сохранит обратную совместимость.

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

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

  • Параметру af_revenue можно присваивать числовые значения, в том числе отрицательные. 
  • Параметр af_revenue заполняет поля в счетчиках дохода и в сырых данных AppsFlyer. Это позволяет маркетологам просматривать доходы на дэшборде.
  • Данные о доходе можно передавать с помощью других параметров, но платформа AppsFlyer не будет распознавать их как доход. Нажмите здесь для получения более подробной информации. 
  • Значения дохода не могут содержать запятые, символы валют или текст.
    Пример события дохода: 1234.56

Рекомендуется. Узнайте больше о настройках валюты, отображении и конвертации валют.

 Требования к коду валюты при отправке событий дохода

  • Валюта по умолчанию: USD
  • Используйте 3-символьный код ISO 4217 (см. пример ниже).
  • Чтобы установить код валюты, вызовите API:
    AppsFlyer.setCurrencyCode("ZZZ")

Пример: Событие покупки в приложении с выручкой

Это событие покупки на 200.12 евро. Чтобы доход отображался на дэшборде, сделайте следующее. 

System.Collections.Generic.Dictionary<string, string> purchaseEvent = new 
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "EUR");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200.12");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a",);
AppsFlyer.sendEvent ("af_purchase", purchaseEvent);

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

Отрицательный доход регистрируется со знаком минус.

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

Пример: пользователь приложения получает возврат денег или отменяет подписку.

System.Collections.Generic.Dictionary<string, string> purchaseEvent = new 
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "-200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "1");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
AppsFlyer.sendEvent ("cancel_purchase", purchaseEvent);

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

При покупках в приложении плагин выполняет проверку на сервере.

Инструкции операционной системы для проверки покупок:

AndroidiOS
#if UNITY_ANDROID && !UNITY_EDITOR
AppsFlyerAndroid.validateAndSendInAppPurchase(
"publicKey",
"signature",
"purchaseData",
"price",
"currency",
null,
this);
#endif

Параметры метода

Android iOS
Параметр Описание
String publicKey Открытый ключ, полученный из консоли разработчика Google
String signature

Подпись транзакции; возвращается от API Google после завершения покупки

String purchaseData

Приобретенный товар в формате JSON; возвращается от API Google после завершения покупки

String revenue Доход внутреннего события приложения, о котором необходимо сообщить в AppsFlyer
String currency Валюта внутреннего события приложения, о которой необходимо сообщить в AppsFlyer
Dictionary<String, String> additionalParameters

Дополнительные параметры внутреннего события приложения, которые отображаются в поле event_value отчета по необработанным данным о внутренних событиях приложения

 Примечание

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

Не отправляйте событие покупки после проверки покупки. Иначе одна и та же покупка будет учтена дважды.

Рекомендации по внутренним событиям приложения

  • Имя события: не более 45 символов
  • Значение события: не более 1000 символов, более длинные сообщения могут быть урезаны
  • Поддерживает неанглийские символы во внутренних событиях приложения (и других API)
  • Цены и доход:
    • Используйте только целые числа или десятичные дроби, например, 5 или 5.2
    • После десятичного разделителя можно использовать до 5 цифр, например, 5.12345.

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

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

Пример: регистрация события покупки в приложении

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

System.Collections.Generic.Dictionary<string, string> purchaseEvent = new 
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add(AFInAppEvents.CURRENCY, "USD");
purchaseEvent.Add(AFInAppEvents.REVENUE, "200");
purchaseEvent.Add(AFInAppEvents.QUANTITY, "2");
purchaseEvent.Add(AFInAppEvents.CONTENT_TYPE, "category_a");
purchaseEvent.Add(AFInAppEvents.CONTENT_ID, "092");
AppsFlyer.sendEvent (AFInAppEvents.PURCHASE, purchaseEvent);

Регистрация внутренних офлайн-событий

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

  • Плагин отправляет события на серверы AppsFlyer и ждет ответа.
  • Если плагин не получит ответ «200», событие помещается в кэш.
  • После получения следующего ответа «200», находящееся в кэше сообщение отправляется на сервер повторно.
  • Если в кэше хранится несколько событий, они отправляются на сервер одно за другим.

 Примечание

В кэше может храниться до 40 событий.

  • Сохраняются только первые 40 оффлайн-событий.
  • Все последующие оффлайн-события, пришедшие до следующего ответа «200», игнорируются.
  • В отчете по необработанным данным,
    • Время события = когда событие было отправлено в AppsFlyer после повторного выхода устройства в сеть.
    • Это не время события.

Диплинкинг с помощью OneLink

OneLink — это решение AppsFlyer для многоплатформенной атрибуции: перенаправление и диплинкинг.

Идентификация устройств и перенаправление пользователей

OneLink:

  • Определяет тип устройства (Android и iOS, настольный компьютер и др.), когда пользователь нажимает кнопку, затем
  • пользователь перенаправляется в соответствующий пункт назначения: Google Play, магазин приложений для iOS, на независимую торговую площадку или веб-страницу.

Сведения о реализации многоплатформенных ссылок атрибуции и обзор основ диплинкинга см. в руководстве по перенаправлению OneLink.

Диплинкинг

Диплинкинг позволяет направлять существующих пользователей к конкретным действиям и персонализированному контенту. 

Владелец приложения и разработчик должны совместно настроить диплинкинг с использованием OneLink:

  • Владелец приложения должен иметь доступ к панели управления AppsFlyer.
  • Разработчик должен иметь доступ к приложению

См. Настройка диплинкинга с OneLink.

Отложенная глубинная ссылка (диплинкинг)

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

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

Чтобы настроить отложенный диплинкинг с OneLink:

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

См. отложенный диплинкинг для дополнительной информации.

Получение данных диплинков

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

Чтобы получить данные диплинков:

  • Необходимо применить обратный вызов onAppOpenAttribution (входит в состав классаIAppsFlyerConversionData); он вызывается из плагина AppsFlyer.
  • Возвращаемый параметр ссылки OneLink/ссылки атрибуции запускает открытие приложения.
  • Затем можно проанализировать (parsing) значения и применить логику для вызова соответствующей страницы приложения.
public void onAppOpenAttribution(string attributionData)
{
AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
// add direct deeplink logic here
}

См. данные диплинкинга для дополнительной информации.

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

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

  • Персонализированный контент
  • Перенаправление пользователей на конкретные действия в приложении. См. раздел Отложенный диплинкинг в этой статье.

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

Для загрузки данных о конверсии из AppsFlyer:

  1. Реализуйте IAppsFlyerConversionDatabase.
  2. Вызовите метод initSDK, указав это имя в качестве последнего параметра.
  3. Используйте метод onConversionDataSuccess для перенаправления пользователя. 

См. onConversionDataSuccess в справочнике по API.

using AppsFlyerSDK;

public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData
{
    void Start()
    {
        /* AppsFlyer.setDebugLog(true); */
        AppsFlyer.initSDK("devkey", "appID", this);
        AppsFlyer.startSDK();
    }

    public void onConversionDataSuccess(string conversionData)
    {
        AppsFlyer.AFLog("onConversionDataSuccess", conversionData);
        Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData);
        // add deferred deeplink logic here
    }

    public void onConversionDataFail(string error)
    {
        AppsFlyer.AFLog("onConversionDataFail", error);
    }

    public void onAppOpenAttribution(string attributionData)
    {
        AppsFlyer.AFLog("onAppOpenAttribution", attributionData);
        Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData);
        // add direct deeplink logic here
    }

    public void onAppOpenAttributionFailure(string error)
    {
        AppsFlyer.AFLog("onAppOpenAttributionFailure", error);
    }
}

Тестирование установок

Добавление тестового устройства в список разрешенных

Добавьте тестовое устройство в разрешенный список.

Моделирование установок

Смоделируйте органические и неорганические установки.

Моделирование органической установки

Органические установки — это неатрибутированные установки, которые обычно выполняются непосредственно из магазинов приложений. Чтобы смоделировать органическую установку, воспользуйтесь следующими инструкциями.

Моделирование неорганической установки

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