Краткий обзор. Интеграция и установка SDK AppsFlyer в приложения для Android или iOS, разработанные с помощью Unity. Когда вы выполните задачи базовой интеграции, приложение будет готово к атрибуции установок и измерению внутренних событий.
Материалы по теме
Чтобы получить полное представление об интеграции плагина для Unity в приложения, ознакомьтесь со следующими статьями:
- Руководство по интеграции плагина для Unity V6: обзор
- Руководство по интеграции плагина для Unity V6: базовая интеграция SDK (эта статья)
- Руководство по интеграции плагина для Unity V6: интеграция дополнительных средств SDK
- Руководство по интеграции плагина для Unity V6: справочник по API
Добавление плагина в приложение
Важно!
AppsFlyer Unity SDK не поддерживает внутреннюю систему сборки Unity.
Скачивание плагина AppsFlyer для Unity
Скачайте последнюю версию плагина Unity с GitHub.
Установка плагина
Используйте один из следующих способов установки.
External Dependency Manager for Unity (EDM4U) распространяется с плагином AppsFlyer для Unity по умолчанию. Это упрощает процесс интеграции, разрешая конфликты зависимостей между вашим плагином и другими плагинами в вашем проекте.
Чтобы установить плагин:
Добавьте appsflyer-unity-plugin.v*.unitypackage, чтобы автоматически импортировать все активы, необходимые и для плагина AppsFlyer, и для EDM4U.
Чтобы установить плагин без EDM4U:
- Импортируйте appsflyer-unity-plugin.v*.unitypackage в свой проект, при этом обязательно удалите отметку с зависимостей EDM4U.
- Загрузите и добавьте необходимые зависимости Android в папку Assets/Plugins/Android:
- Загрузите и добавьте необходимые зависимости iOS в папку Assets/Plugins/iOS/AppsFlyer:
Настройка 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" />
Инициализация плагина
В этом разделе описана процедура внедрения и инициализации плагина.
Получение ключа разработчика
- Ключ используется как уникальный идентификатор аккаунта. В некоторых случаях существует ключ уровня приложения.
- Ключ разработчика является обязательным.
Чтобы получить ключ разработчика:
- В AppsFlyer перейдите в раздел Configuration (Настройки) > App Settings (Настройки приложения).
- Получите ключ разработчика.
Инициализация плагина
Чтобы инициализировать плагин с помощью префаба:
- Перейдите в раздел Assets (Активы) > AppsFlyer.
- Перетащите AppsFlyerObject.prefab в вашу сцену.
- Задайте значения в следующих полях:
Параметр Примечания Ключ разработчика Вставьте полученный ключ разработчика. Идентификатор приложения iOS: введите идентификатор приложения для iOS (без префикса
id
).Android: оставьте пустым.
Получите данные о конверсиях Если в приложении реализованы диплинки AppsFlyer, установите значение "true". Значение по умолчанию: "false", т. е. по умолчанию диплинки НЕ реализованы. Is debug Для просмотра журналов отладки во время разработки: установите значение "true".
Примечание. Перед выпуском приложения в рабочую среду обязательно отключите параметр (установите значение "false").
- Обновите код в разделе Assets (Активы) > AppsFlyer > AppsFlyerObjectScript.cs с помощью других доступных 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);
}
}
Примечание. Убедитесь, что вы не вызвали уничтожение игрового объекта.
Регистрация внутренних событий приложения
Регистрируйте внутренние события, чтобы измерять KPI, такие как доход, ROI (окупаемость инвестиций) и LTV (суммарная прибыль от пользователя).
Для регистрации пользовательских событий нужно реализовать внутренние события. События можно отправлять несколькими способами:
- [Рекомендуется] Отправка событий через приложение, как описано в этой статье.
- Дополнительные способы описаны в обзоре внутренних событий приложения.
Если приложение относится к определенной категории, такой как путешествия, игры, электронная коммерция, см. список рекомендованных событий для каждой категории.
Имена и параметры внутренних событий приложения
Чтобы отправлять события:
- Определите имя и параметры события.
- Ознакомьтесь с соответствующими списками:
- Перечень рекомендованных имен и структур событий
- Список в классе
AFInAppEvents
.
[Рекомендуется] Используйте имена и параметры событий по следующим причинам:
- Стандартное именование. 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);
Валидация покупок в приложении
При покупках в приложении плагин выполняет проверку на сервере.
Инструкции операционной системы для проверки покупок:
#if UNITY_ANDROID && !UNITY_EDITOR
AppsFlyerAndroid.validateAndSendInAppPurchase(
"publicKey",
"signature",
"purchaseData",
"price",
"currency",
null,
this);
#endif
Убедитесь, что вы используете при тестировании запросы на Apple Apple sandbox server call::
#if UNITY_IOS && !UNITY_EDITOR
AppsFlyeriOS.validateAndSendInAppPurchase(
"productIdentifier",
"price",
"currency",
"tranactionId",
null,
this);
#endif
Параметры метода
Параметр | Описание |
---|---|
String publicKey | Открытый ключ, полученный из консоли разработчика Google |
String signature |
Подпись транзакции; возвращается от API Google после завершения покупки |
String purchaseData |
Приобретенный товар в формате JSON; возвращается от API Google после завершения покупки |
String revenue | Доход внутреннего события приложения, о котором необходимо сообщить в AppsFlyer |
String currency | Валюта внутреннего события приложения, о которой необходимо сообщить в AppsFlyer |
Dictionary<String, String> additionalParameters |
Дополнительные параметры внутреннего события приложения, которые отображаются в поле event_value отчета по необработанным данным о внутренних событиях приложения |
Параметр | Описание |
---|---|
String productIdentifier | Идентификатор продукта |
String price | Доход внутреннего события приложения, о котором необходимо сообщить в 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:
- Разработчику необходим доступ к платформе 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:
- Реализуйте
IAppsFlyerConversionDatabase
. - Вызовите метод
initSDK
, указав это имя в качестве последнего параметра. - Используйте метод
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);
}
}
Тестирование установок
Добавление тестового устройства в список разрешенных
Добавьте тестовое устройство в разрешенный список.
Моделирование установок
Смоделируйте органические и неорганические установки.
Моделирование органической установки
Органические установки — это неатрибутированные установки, которые обычно выполняются непосредственно из магазинов приложений. Чтобы смоделировать органическую установку, воспользуйтесь следующими инструкциями.
Моделирование неорганической установки
Неорганические установки — это атрибутированные установки, которая обычно происходят после взаимодействия с рекламой. Чтобы смоделировать неорганическую установку, воспользуйтесь следующими инструкциями.