<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>Android api level 14 (android 4.0).
Разрешение android.permission.INTERNET.
Разрешение android.permission.ACCESS_NETWORK_STATE.
Разрешение com.google.android.gms.permission.AD_ID.
Обязательно наличие в проекте библиотеки Google Play Services (модуль com.google.android.gms:play-services-ads-identifier).
Обязательно наличие в проекте библиотеки Google Play Install Referrer (модуль com.android.installreferrer:installreferrer).
Для приложений Huawei AppGallery обязательно наличие в проекте библиотеки Huawei Media Services (модуль com.huawei.hms:ads-identifier), чтобы MyTracker мог получить OAID.
iOS 9.0.
Подключенные фреймворки AdSupport, SystemConfiguration, CoreTelephony, CoreData, UIKit, iAd, StoreKit, AdServices, and AppTrackingTransparency.
Подключенная библиотека libz.tbd.
Импортируйте пакет myTracker.unitypackage (см. последнюю версию на https://github.com/myTrackerSDK/mytracker-unity/releases) в ваш Unity проект.
Для сборки Android версии необходимо добавить в проект зависимости с помощью Assets → Play Services Resolver → Android Resolver → Resolve Client Jars.
Для сборки iOS версии необходимо добавить зависимости с помощью CocoaPods, после создания xCode проекта.
AndroidManifest.xml
Средой Unity поддерживается слияние манифеста по умолчанию и манифестов, поставляемых вместе с различными плагинами. В случае ошибки или пост-обработки, возможно, потребуется ручное изменение манифеста Android-приложения. Для корректной работы в манифесте должны быть указаны разрешения:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>Для отслеживания источников трафика в манифесте должны быть указаны сервис и ресивер:
<application>
    <receiver android:name="com.my.tracker.campaign.MultipleInstallReceiver"
              android:permission="android.permission.INSTALL_PACKAGES"
              android:exported="true">
        <intent-filter>
            <action android:name="com.android.vending.INSTALL_REFERRER"/>
        </intent-filter>
    </receiver>
    <service android:name="com.my.tracker.campaign.CampaignService" />
</application>Proguard
Если вы используете Proguard, необходимо добавить исключения:
-keep class com.my.tracker.** { *; }
-dontwarn com.my.tracker.**
-keep class com.android.installreferrer.** { *; }
-keep class com.android.vending.billing.** { *; }
-keep class com.android.billingclient.api.** { *; }
-keep class com.google.android.gms.** { *; }Cреда сборки Gradle обеспечивает импорт данных правил автоматически при обработке aar-файлов
Для корректной работы MyTracker SDK настройку и инициализацию трекера необходимо производить
        на начальном этапе инициализации приложения. Для инициализации трекера необходимо указать ваш
        SDK_KEY. До инициализации, при необходимости, можно настроить параметры трекера.
SDK_KEY генерируется автоматически после того, как вы добавите ваше приложение в MyTracker.
Чтобы получить ключ, перейдите на страницу со списком приложений, выберите необходимое и во вкладке Обзор скопируйте ключ.
Обратите внимание, что для сборки приложения на разных платформах необходим отдельный SDK_KEY для каждой из них.
public class YourMonoBehaviour : MonoBehaviour
{
    public void Awake()
    {
#if !UNITY_IOS && !UNITY_ANDROID
        return;
#endif
        // При необходимости настройте конфигурацию трекера
        var myTrackerConfig = MyTracker.MyTrackerConfig;
        // ...
        // Настройте параметры трекера
        // ...
        // Инициализируйте трекер в зависимости от платформы
#if UNITY_IOS
        MyTracker.Init("SDK_KEY_IOS");
#elif UNITY_ANDROID
        MyTracker.Init("SDK_KEY_ANDROID");
#endif
    }
}Конфигурацию трекера можно настроить через экземпляр класса MyTrackerConfig, доступный через свойство
    MyTracker.MyTrackerConfig. Можно настраивать следующие параметры:
IsTrackingLaunchEnabled: сбор данных о запусках приложения. По умолчанию true.
Boolean IsTrackingLaunchEnabled { get; set; }LaunchTimeout: интервал в секундах, в течение которого не будет засчитываться новый запуск и прерываться сессия при сворачивании приложения. По умолчанию 30 секунд. Можно установить значение в диапазоне 30-7200 секунд.
Int32 LaunchTimeout { get; set; }BufferingPeriod: интервал в секундах, в течение которого события будут накапливаться на устройстве перед отправкой на сервер. По умолчанию 900 секунд. Можно установить значение в диапазоне 1-86400 секунд.
Int32 BufferingPeriod { get; set; }ForcingPeriod: интервал в секундах после установки или обновления приложения, в течение которого события будут незамедлительно отправляться на сервер без локальной буферизации. По умолчанию 0 секунд (незамедлительная отправка выключена). Можно установить значение в диапазоне 0-432000 секунд (5 суток).
Int32 ForcingPeriod { get; set; }IsTrackingLocationEnabled: сбор данных о местоположении. По умолчанию true для iOS и false для Android платформ.
Если ваше Android приложение запрашивает доступ к местоположению пользователя, рекомендуем включить передачу данных для более точной аналитики. В описании приложения в Google Play не забудьте указать «Да» в вопросе про сбор данных о местоположении.
Для Android платформы параметр выключен по умолчанию начиная с версии SDK 3.0.2
Boolean IsTrackingLocationEnabled { get; set; }Region: регион, где расположен сервер сбора статистики.
    С 1 марта 2023г. параметр region недействителен.
    Вне зависимости от выбранного значения данные
    будут отправляться на серверы, расположенные на территории Российской Федерации.
    Чтобы выбрать другой регион,
    обратитесь в службу поддержки
Необходимость изменить регион может возникнуть, например, в связи с требованиями законодательства. Доступные значения:
RegionEnum.RU — сервер, расположенный на территории Российской Федерации
RegionEnum.EU — сервер, расположенный на территории Европы
public RegionEnum Region { set; }RegisterForSkAdAttribution: поддержка SKAdNetwork атрибуции. По умолчанию YES.
SKAdNetwork — это инструмент атрибуции от Apple, который позволяет связать установку приложения с рекламной кампанией, и при этом сохранить конфиденциальность пользователей.
    По умолчанию при первом запуске приложения на устройствах iOS 14.5+,
    MyTracker SDK версии 2.1.2 и выше вызовет метод SKAdNetwork — RegisterForSkAdAttribution,
    чтобы передать в рекламную сеть информацию о связанной установке.
    Рекламная сеть в свою очередь может отправить данные в MyTracker.
    С версии iOS 15 копию данных можно отправить напрямую в MyTracker,
    без посредничества рекламных сетей.
    Вы можете отключить параметр RegisterForSkAdAttribution
    и самостоятельно настроить вызов методов SKAdNetwork.
    Но без поддержки SKAdNetwork вам не удастся отследить атрибуцию по устройствам,
    пользователи которых не давали разрешения на трекинг.
Подробнее см. раздел iOS и SKAdNetwork и документацию Apple
Boolean RegisterForSkAdAttribution { get; set; }Включение/выключение режима отладки производится через
    статические свойства класса MyTracker. По умолчанию false.
Boolean IsDebugMode { get; set; }
        Для получения статистики не только по устройствам, но и по пользователям, установите параметр customUserId.
        Это уникальный идентификатор пользователя в вашем проекте, который вы присваиваете ему в момент регистрации.
        Он должен оставаться неизменным, даже если пользователь авторизуется на другом устройстве.
        Установив этот параметр, вы сможете оценить размер и активность аудитории приложения, вне зависимости от того,
        на скольких устройствах пользователя установлено ваше приложение.
        А также не будете терять историю накопленных по пользователю данных, если он решит сменить устройство. Подробнее см. раздел Трекинг.
Важно установить параметр до трекинга событий, чтобы передавать идентификатор пользователя с каждым полученным событием.
public void SetUserInfo()
{
    var myTrackerParams = MyTracker.MyTrackerParams;
    // Установите пользовательский идентификатор
    myTrackerParams.CustomUserId = "user_id";
}
    Если до установки customUserId в приложении уже сформирована база зарегистрированных пользователей, то MyTracker не сможет получить данные о времени их регистрации и произвести точный расчёт Lifetime метрик.
    Для таких пользователей Lifetime статистика будет считаться на дату первого полученного события с customUserId.
Чтобы отключить трекинг пользователей, передайте пустое значение в параметре customUserId.
События можно отправлять через статические методы класса MyTracker.
    Перед вызовом методов установите параметр customUserId,
    чтобы с каждым полученным событием передавать идентификатор пользователя.
Доступны следующие методы для трекинга различных типов событий:
Событие регистрации.     Метод должен быть вызван сразу после того, как пользователь зарегистрируется в приложении.
    Идентификатор пользователя должен быть передан в параметре userId.
Идентификатор userId — обязательный параметр начиная с SDK версии 2.0.1
void TrackRegistrationEvent(String userId)Событие авторизации.     Метод должен быть вызван сразу после того, как пользователь успешно авторизуется в приложении.
    Идентификатор пользователя должен быть передан в параметре userId.
Идентификатор userId — обязательный параметр начиная с SDK версии 2.0.1
void TrackLoginEvent(String userId)Событие отправки приглашения. Дополнительный параметр eventParams позволяет задать
    произвольные параметры ключ-значение для события. Максимальная длина ключа и значения — 255
    символов.
void TrackInviteEvent(IDictionary<String, String> eventParams = null)Событие достижения уровня. Параметр level — номер уровня. Дополнительный параметр eventParams
    позволяет задать произвольные параметры ключ-значение для события. Максимальная длина ключа
    и значения — 255 символов.
void TrackLevelEvent(Int32? level = null, IDictionary<String, String>eventParams = null)Произвольное событие с заданным именем. Дополнительный параметр eventParams позволяет задать
    произвольные параметры ключ-значение для события. Максимальная длина имени, ключа и значения — 255
    символов.
void TrackEvent(String name, IDictionary<String, String> eventParams = null)Пример:
var IDictionary<String, String> eventCustomParams = new Dictionary<String, String>();
eventCustomParams["someParamKey1"] = "someParamValue1";
eventCustomParams["someParamKey2"] = "someParamValue2";
MyTracker.TrackEvent("eventName", eventCustomParams));Принудительная отправка всех событий и сброс таймера отправки.
SDK для снижения нагрузки на канал и минимизации влияния на производительность приложения
    накапливает в буфер все события на устройстве перед отправкой на сервер и регулярно
    отправляет собранные данные сжатым пакетом.
    По умолчанию данные отправляются на сервер каждые 15 минут. Этот интервал можно настроить
    через параметр bufferingPeriod от 1 секунды до 1 суток.
    Если пользователь закрыл приложение, то отправка будет произведена при следующем запуске.
    Но некоторые события крайне важно получать в аналитику как можно раньше, особенно в первые
    сессии после установки приложения.
    В этом поможет метод flush().
void Flush()На платформе iOS сбор данных по in-app платежам и подпискам происходит автоматически.
        Для сбора данных о платежах на платформе Android при использовании Unity Purchase следует использовать метод
        TrackPurchaseEvent(...), вызовы которого игнорируются на платформе iOS.
void TrackPurchaseEvent(Product product, IDictionary<String, String> eventParams = null)product — экземпляр класса Product
        eventParams — необязательный параметр, позволяющий задать произвольные параметры
            ключ-значение для события. Максимальная длина ключа и значения — 255 символов
        Если вы не используете Unity Purchase, то метод TrackPurchaseEvent(...) следует использовать иначе.
#if UNITY_ANDROID
void TrackPurchaseEvent(String skuDetails, String purchaseData, String dataSignature, IDictionary<String, String> eventParams = null)
#endifskuDetails — ответ на запрос getSkuDetails() платежа к google API, согласно документации
        purchaseData — объект JSON, который находится в ответе на запрос getBuyIntent(),
            в поле INAPP_PURCHASE_DATA, согласно документации
        dataSignature — строка, которая находится в ответе на запрос getBuyIntent(), в
            поле INAPP_DATA_SIGNATURE
        eventParams — необязательный параметр, позволяющий задать произвольные параметры
            ключ-значение для события. Максимальная длина ключа и значения – 255 символов.
        
    Для передачи данных с вашего сервера на сервер MyTracker (например, неотслеживаемых данных, офлайн-событий и пр.),
    может понадобиться специальный идентификатор устройства — instanceId.
    Идентификатор представляет собой значение UUID v4,
    которое генерируется в момент первого запуска приложения и остаётся неизменным до удаления приложения (или данных приложения) с устройства.
    Получить значение instanceId можно с помощью статического метода класса MyTracker.
public static String InstanceId { get; }
        Важно как можно раньше начать собирать instanceId
        и отправлять на ваш сервер,
        если вы используете его для передачи данных к S2S API.
    
        Вместо instanceId в запросах к API
        можно указывать любой другой идентификатор устройства:
        gaid, androidId, appSetId,
        idfa, iosVendorId,
        и/или идентификатор пользователя customUserID
        (в этом случае данные будут формировать статистику по пользователю).
        Подробнее
    
Диплинки позволяют передать в приложение дополнительные параметры, с помощью которых можно перенаправить пользователя на определённый экран в приложении. Подробнее см. раздел Диплинки.
    Для поддержки отложенных диплинков
    установите в приложении слушатель с помощью метода
        MyTracker.SetAttributionListener. Слушатель будет вызван только один раз, при первом запуске приложения, в
        случае, если для текущей установки был найден отложенный диплинк. В качестве параметра делегат будет
        передан объект атрибуции MyTrackerAttribution, содержащий свойство Deeplink.
public class YourMonoBehaviour : MonoBehaviour
{
    public void Awake()
    {
#if !UNITY_IOS && !UNITY_ANDROID
        return;
#endif
        // При необходимости, настройте конфигурацию трекера
        var myTrackerConfig = MyTracker.MyTrackerConfig;
        // ...
        // Настройте параметры трекера
        // ...
        // Устанавите слушатель
        MyTracker.SetAttributionListener(attribution => Debug.Log("Attribution: " + attribution.Deeplink));
        // Инициализируйте трекер в зависимости от платформы
#if UNITY_IOS
        MyTracker.Init("SDK_KEY_IOS");
#elif UNITY_ANDROID
        MyTracker.Init("SDK_KEY_ANDROID");
#endif
    }
}