Интеграция deltaDNA для мобильной игры
deltaDNA — платформа поведенческой аналитики, которую выбирают именно игровые студии: она изначально спроектирована под игровые события, воронки прогрессии, сегментацию по LTV и управление кампаниями прямо из консоли. Это не Google Analytics с игровыми виджетами — у deltaDNA другая модель данных, другие SDK и другой процесс авторизации событий.
Где обычно спотыкаются при интеграции
Самая распространённая проблема — неправильная инициализация SDK до старта сессии игры. deltaDNA требует вызова DDNA.Instance.StartSDK() до любой отправки событий, иначе события уходят в очередь, которая никогда не сбрасывается, и данные теряются без каких-либо ошибок в логе.
На Unity это выглядит так:
// GameAnalyticsManager.cs — вызывать в Awake() самого раннего GameObject
DDNA.Instance.SetLoggingLevel(DeltaDNA.Logger.Level.DEBUG);
DDNA.Instance.StartSDK(
"YOUR_ENVIRONMENT_KEY",
"https://collect.deltadna.net/YOUR_COLLECT_URL",
"https://engage.deltadna.net/YOUR_ENGAGE_URL"
);
Вторая проблема — обязательные параметры схемы событий. deltaDNA проверяет события на соответствие схеме, определённой в Dashboard. Если отправить событие missionStarted без обязательного поля missionName — событие не отклоняется явно, оно просто не попадает в отчёты. Это обнаруживается только при просмотре Event Browser спустя несколько дней.
Как строим интеграцию
Схема работы: сначала в Dashboard создаём схему событий под конкретный игровой цикл, затем генерируем типизированные обёртки через deltaDNA Event Builder, затем подключаем SDK.
Для стандартных игровых событий deltaDNA предоставляет готовые классы: GameEvent, Transaction, MissionStartedEvent, MissionCompletedEvent. Для кастомных — наследуемся от GameEvent:
var missionEvent = new GameEvent("missionStarted")
.AddParam("missionName", "Level_05_Boss")
.AddParam("missionDifficulty", "hard")
.AddParam("playerLevel", 12)
.AddParam("timeSinceLastSession", sessionManager.SecondsSinceLast);
DDNA.Instance.RecordEvent(missionEvent).Run();
Монетизационные события оборачиваем через Transaction — это критично для когортного анализа LTV:
var transaction = new Transaction(
"Gem Pack Purchase",
"PURCHASE",
new Product().AddVirtualCurrency("Gems", "GRIND", 500),
new Product().SetRealCurrency("USD", 199) // в центах
);
transaction.AddParam("storeItemID", "gem_pack_small");
DDNA.Instance.RecordEvent(transaction).Run();
Параметр SetRealCurrency — реальная валюта в минимальных единицах (центы, копейки). Ошибка здесь сломает все отчёты по ARPU.
Engage — персонализация прямо из консоли
Отдельный модуль deltaDNA — Engage. Позволяет получать параметры A/B тестов и персонализированные предложения с сервера без релиза обновления:
DDNA.Instance.RequestEngagement(
new Engagement("offerWall")
.AddParam("userSegment", playerSegment.ToString()),
response => {
if (response.IsSuccessful) {
var offerData = response.JSON["parameters"];
ShowOffer(offerData["gemPackDiscount"].Value<int>());
}
}
);
Важно: Engage-запросы кешируются SDK на устройстве. Если сервер недоступен, возвращается последний успешный ответ. Это нужно учитывать при проектировании fallback-логики.
Что входит в работу
- Создание и валидация схем событий в deltaDNA Dashboard
- Интеграция SDK (Unity / Unreal через C++ плагин / нативный iOS Swift / нативный Android Kotlin)
- Реализация всех игровых событий: сессии, прогрессия, монетизация, социальные взаимодействия
- Настройка Engage для A/B тестирования внутриигровых предложений
- Верификация данных в Event Browser и первые отчёты
Сроки
Базовая интеграция Unity с покрытием 10–15 событий: 2–3 дня. Полный цикл с Engage, кастомными воронками и QA в Event Browser: до 5 дней. Стоимость рассчитывается индивидуально после анализа требований.







