<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)
#endif
skuDetails
— ответ на запрос 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
}
}