Игры
Полное руководство по аналитике для игровых проектов: отслеживание уровней, ресурсов, внутриигровых покупок и удержания игроков
🎯 Что вы получите
- Полную картину прогресса игроков по уровням
- Анализ баланса ресурсов и внутриигровой экономики
- Отслеживание монетизации и ARPPU
- Когортный анализ удержания игроков (Day 1, 7, 30)
- Данные о достижениях и ключевых событиях
Ключевые метрики для игр
DAU/MAU
4 520 / 15 780
Ежедневная и месячная аудитория. Sticky Factor 28.6%
Retention Day 1/7/30
42% / 24% / 12%
Удержание игроков. Выше среднего по жанру
ARPU / ARPPU
$0.45 / $4.20
Доход на пользователя и на платящего игрока
Конверсия в платящие
12.5%
Процент игроков, совершивших хотя бы одну покупку
Типовая воронка игрока
📲
Запуск
game_start
→
🎮
Туториал
tutorial_complete
→
⬆️
Уровень 5
level_5_reached
→
💰
Первая покупка
first_purchase
Какие события отправлять
| Событие | Описание | Обязательность | Ключевые свойства |
|---|---|---|---|
game_start |
Запуск игры (первый экран) | Обязательно | version, platform |
tutorial_start |
Начало обучения | Рекомендуется | step |
tutorial_complete |
Завершение обучения | Обязательно для воронки | time_spent |
level_start |
Начало уровня | Обязательно | level, difficulty |
level_complete |
Завершение уровня | Обязательно | level, score, stars, time_spent |
level_fail |
Проигрыш на уровне | Опционально | level, reason |
resource_earned |
Получение ресурса | Рекомендуется | resource, amount, source |
resource_spent |
Трата ресурса | Рекомендуется | resource, amount, item |
achievement_unlocked |
Получение достижения | Опционально | achievement |
iap_purchase |
Внутриигровая покупка за реальные деньги | Обязательно | product_id, price, currency |
Метаданные для игр
// Запуск игры
{
"event": "game_start",
"user_id": "player_123",
"properties": {
"version": "1.2.0",
"platform": "ios",
"device": "iPhone 14 Pro",
"os_version": "17.4"
}
}
// Прохождение туториала
{
"event": "tutorial_complete",
"user_id": "player_123",
"properties": {
"time_spent": 245,
"steps_completed": 5
},
"_metadata": {
"funnel_sales_step": 1,
"funnel_sales_name": "Туториал",
"event_display_name": "Завершение обучения",
"event_color": "#28a745"
}
}
// Завершение уровня
{
"event": "level_complete",
"user_id": "player_123",
"properties": {
"level": 5,
"score": 12500,
"stars": 3,
"time_spent": 184,
"enemies_killed": 45
},
"_metadata": {
"funnel_sales_step": 2,
"funnel_sales_name": "Прохождение уровня",
"event_display_name": "Уровень пройден",
"event_color": "#2A6DF4"
}
}
// Получение ресурса
{
"event": "resource_earned",
"user_id": "player_123",
"properties": {
"resource": "coins",
"amount": 100,
"source": "level_complete",
"balance": 1250
}
}
// Внутриигровая покупка
{
"event": "iap_purchase",
"user_id": "player_123",
"properties": {
"product_id": "gold_pack_1",
"product_name": "100 золотых",
"price": 299,
"currency": "RUB",
"quantity": 1,
"resources_gained": {
"gold": 100,
"gems": 10
}
},
"_metadata": {
"funnel_sales_step": 3,
"funnel_sales_name": "Покупка",
"is_order": true,
"order_revenue_field": "price",
"event_display_name": "Покупка золота",
"event_color": "#fd7e14"
}
}
Анализ прогресса по уровням
Прохождение уровней
Уровень 1
95%
Уровень 2
82%
Уровень 3
67%
Уровень 4
45%
Уровень 5
28%
Инсайт: Резкое падение на уровне 4 говорит о том, что уровень слишком сложный или плохо сбалансирован.
Анализ ресурсов и экономики
Монеты (игровая валюта)
+125 000 заработано / -98 000 потрачено
Кристаллы (премиум валюта)
+15 000 заработано / -12 500 потрачено
Энергия
+45 000 получено / -42 000 потрачено
Отслеживание источников ресурсов
| Источник | Монеты | % |
|---|---|---|
| Прохождение уровней | 75 000 | 60% |
| Ежедневные бонусы | 25 000 | 20% |
| Покупки | 15 000 | 12% |
| Достижения | 10 000 | 8% |
Анализ достижений
🏆
Первая кровь
Убить первого врага
78% игроков
⭐
3 звезды
Пройдите уровень с 3 звездами
45% игроков
👑
Король горы
Достигните 10 уровня
12% игроков
💎
Коллекционер
Соберите 1000 кристаллов
8% игроков
Атрибуты игроков
json
{
"event": "player_data",
"user_id": "player_123",
"attributes": {
"nickname": "DragonSlayer",
"level": 42,
"experience": 12500,
"guild": "Knights of Round",
"vip_level": 3,
"total_play_time": 36000,
"last_login": "2026-03-19T15:30:00Z",
"achievements_count": 156,
"total_purchases": 12,
"total_spent": 4500,
"favorite_character": "warrior",
"premium_currency": 1500,
"free_currency": 5000,
"_metadata": {
"nickname": {
"attribute_display_name": "Никнейм",
"attribute_category": "Основное"
},
"level": {
"attribute_display_name": "Уровень",
"attribute_category": "Прогресс",
"attribute_format": "number",
"attribute_color": "#fd7e14"
},
"guild": {
"attribute_display_name": "Гильдия",
"attribute_category": "Социальное"
},
"vip_level": {
"attribute_display_name": "VIP уровень",
"attribute_category": "Монетизация",
"attribute_format": "number",
"attribute_color": "#2A6DF4"
},
"total_spent": {
"attribute_display_name": "Всего потрачено",
"attribute_category": "Монетизация",
"attribute_format": "currency"
},
"favorite_character": {
"attribute_display_name": "Любимый персонаж",
"attribute_category": "Геймплей"
},
"premium_currency": {
"attribute_display_name": "Кристаллы",
"attribute_category": "Ресурсы",
"attribute_format": "number"
}
}
}
}
Пример интеграции на Unity (C#)
csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class InstantBaseGameTracker : MonoBehaviour
{
private string apiKey = "your_api_key";
private string apiUrl = "https://api.instantbase.ru/v1/track";
private string userId;
private string sessionId;
void Awake()
{
sessionId = System.Guid.NewGuid().ToString();
userId = PlayerPrefs.GetString("player_id", System.Guid.NewGuid().ToString());
PlayerPrefs.SetString("player_id", userId);
}
IEnumerator TrackEvent(string eventName, Dictionary properties = null, Dictionary metadata = null)
{
var data = new Dictionary
{
{ "event", eventName },
{ "user_id", userId },
{ "session_id", sessionId },
{ "timestamp", System.DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ") },
{ "properties", properties ?? new Dictionary() }
};
if (metadata != null)
{
data["_metadata"] = metadata;
}
string jsonData = JsonUtility.ToJson(data);
using (UnityEngine.Networking.UnityWebRequest request = new UnityEngine.Networking.UnityWebRequest(apiUrl, "POST"))
{
byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonData);
request.uploadHandler = new UnityEngine.Networking.UploadHandlerRaw(bodyRaw);
request.downloadHandler = new UnityEngine.Networking.DownloadHandlerBuffer();
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("X-API-Key", apiKey);
yield return request.SendWebRequest();
if (request.result == UnityEngine.Networking.UnityWebRequest.Result.Success)
{
Debug.Log("Event tracked: " + eventName);
}
else
{
Debug.LogError("Failed to track event: " + request.error);
}
}
}
public void TrackGameStart()
{
var props = new Dictionary
{
{ "version", Application.version },
{ "platform", Application.platform.ToString() },
{ "device", SystemInfo.deviceModel },
{ "os_version", SystemInfo.operatingSystem }
};
StartCoroutine(TrackEvent("game_start", props));
}
public void TrackLevelStart(int level, string difficulty)
{
var props = new Dictionary
{
{ "level", level },
{ "difficulty", difficulty },
{ "attempt", GetAttemptCount(level) }
};
StartCoroutine(TrackEvent("level_start", props));
}
public void TrackLevelComplete(int level, int score, int stars, float timeSpent)
{
var props = new Dictionary
{
{ "level", level },
{ "score", score },
{ "stars", stars },
{ "time_spent", timeSpent }
};
var metadata = new Dictionary
{
{ "funnel_sales_step", 2 },
{ "funnel_sales_name", "Прохождение уровня" }
};
StartCoroutine(TrackEvent("level_complete", props, metadata));
}
public void TrackResourceEarned(string resource, int amount, string source)
{
var props = new Dictionary
{
{ "resource", resource },
{ "amount", amount },
{ "source", source },
{ "balance", GetResourceBalance(resource) }
};
StartCoroutine(TrackEvent("resource_earned", props));
}
public void TrackIAPPurchase(string productId, string productName, decimal price, string currency)
{
var props = new Dictionary
{
{ "product_id", productId },
{ "product_name", productName },
{ "price", price },
{ "currency", currency },
{ "quantity", 1 }
};
var metadata = new Dictionary
{
{ "funnel_sales_step", 3 },
{ "funnel_sales_name", "Покупка" },
{ "is_order", true },
{ "order_revenue_field", "price" }
};
StartCoroutine(TrackEvent("iap_purchase", props, metadata));
}
private int GetAttemptCount(int level)
{
return PlayerPrefs.GetInt($"level_{level}_attempts", 0);
}
private int GetResourceBalance(string resource)
{
return PlayerPrefs.GetInt($"resource_{resource}", 0);
}
}
Рекомендации
- Отслеживайте каждую сессию — game_start, game_end с длительностью
- Следите за балансом — если ресурсов слишком много, игроки не будут покупать
- Анализируйте сложность — где игроки застревают и перестают играть
- Тестируйте гипотезы — изменили сложность? Смотрите на удержание
- Сегментируйте платящих — их поведение отличается от бесплатных игроков
- Используйте A/B тесты — проверяйте разные механики монетизации
Нужна помощь с настройкой игровой аналитики?
Напишите нам, и мы поможем настроить интеграцию под вашу игру