🎮 Игры
Полное руководство по аналитике для игровых проектов: отслеживание уровней, ресурсов, внутриигровых покупок и удержания игроков
🎯 Что вы получите
- Полную картину прогресса игроков по уровням
- Анализ баланса ресурсов и внутриигровой экономики
- Отслеживание монетизации и 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 |
item_purchased |
Покупка предмета за игровую валюту | Опционально | item, price, currency |
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_start",
"user_id": "player_123",
"properties": {
"level": 5,
"difficulty": "hard",
"attempt": 2
}
}
// Завершение уровня
{
"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"
}
}
// Получение достижения
{
"event": "achievement_unlocked",
"user_id": "player_123",
"properties": {
"achievement": "first_blood",
"achievement_name": "Первая кровь",
"points": 10
},
"_metadata": {
"event_display_name": "Достижение",
"event_color": "#ffc107"
}
}
Анализ прогресса по уровням
Прохождение уровней
Инсайт: Резкое падение на уровне 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% игроков
Атрибуты игроков
{
"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#)
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.online/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);
}
}
}
// Game start
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));
}
// Level start
public void TrackLevelStart(int level, string difficulty)
{
var props = new Dictionary
{
{ "level", level },
{ "difficulty", difficulty },
{ "attempt", GetAttemptCount(level) }
};
StartCoroutine(TrackEvent("level_start", props));
}
// Level complete
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));
}
// Resource earned
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));
}
// IAP purchase
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));
}
// Achievement unlocked
public void TrackAchievementUnlocked(string achievementId, string achievementName)
{
var props = new Dictionary
{
{ "achievement", achievementId },
{ "achievement_name", achievementName }
};
StartCoroutine(TrackEvent("achievement_unlocked", props));
}
private int GetAttemptCount(int level)
{
// Implement attempt counting logic
return PlayerPrefs.GetInt($"level_{level}_attempts", 0);
}
private int GetResourceBalance(string resource)
{
// Implement balance checking logic
return PlayerPrefs.GetInt($"resource_{resource}", 0);
}
}
Пример интеграции на JavaScript (Web-игры)
class GameTracker {
constructor(apiKey) {
this.apiKey = apiKey;
this.apiUrl = 'https://api.instantbase.online/v1/track';
this.userId = this.getUserId();
this.sessionId = this.generateSessionId();
}
getUserId() {
let userId = localStorage.getItem('game_player_id');
if (!userId) {
userId = 'player_' + Math.random().toString(36).substr(2, 9);
localStorage.setItem('game_player_id', userId);
}
return userId;
}
generateSessionId() {
return 'sess_' + Math.random().toString(36).substr(2, 9);
}
async track(event, properties = {}, metadata = {}) {
const data = {
event,
user_id: this.userId,
session_id: this.sessionId,
timestamp: new Date().toISOString(),
properties
};
if (Object.keys(metadata).length > 0) {
data._metadata = metadata;
}
try {
const response = await fetch(this.apiUrl, {
method: 'POST',
headers: {
'X-API-Key': this.apiKey,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
return await response.json();
} catch (error) {
console.error('Failed to track event:', error);
}
}
// Game start
trackGameStart() {
return this.track('game_start', {
version: '1.0.0',
platform: 'web',
user_agent: navigator.userAgent
});
}
// Level start
trackLevelStart(level) {
return this.track('level_start', {
level
});
}
// Level complete
trackLevelComplete(level, score, stars, timeSpent) {
return this.track('level_complete', {
level,
score,
stars,
time_spent: timeSpent
}, {
funnel_sales_step: 2,
funnel_sales_name: 'Прохождение уровня'
});
}
// Purchase
trackPurchase(productId, productName, price, currency) {
return this.track('iap_purchase', {
product_id: productId,
product_name: productName,
price,
currency
}, {
funnel_sales_step: 3,
funnel_sales_name: 'Покупка',
is_order: true,
order_revenue_field: 'price'
});
}
}
// Использование
const tracker = new GameTracker('your_api_key');
// При загрузке игры
tracker.trackGameStart();
// При начале уровня
tracker.trackLevelStart(1);
// При прохождении уровня
tracker.trackLevelComplete(1, 1500, 3, 45);
// При покупке
tracker.trackPurchase('gold_pack', '100 Gold', 2.99, 'USD');
Ключевые вопросы для анализа игр
👥 Удержание
- Какой Day 1, 7, 30 retention?
- На каком уровне чаще всего бросают?
- Как туториал влияет на удержание?
💰 Монетизация
- Какой процент игроков покупает?
- Какие предметы покупают чаще?
- На каком уровне совершают первую покупку?
⚖️ Баланс
- Не слишком ли сложные уровни?
- Хватает ли ресурсов?
- Сбалансирована ли экономика?
🚀 Прогресс
- Как быстро игроки проходят уровни?
- Сколько времени в игре?
- Какие достижения популярны?
Дашборды для игр
После настройки интеграции вы получите готовые дашборды:
- Главная — DAU/MAU, новые игроки, retention, выручка
- Выручка — динамика IAP, топ продуктов, ARPU/ARPPU
- Заказы — воронка монетизации, популярные покупки
- Клиенты — распределение по уровням, ресурсам, достижениям
- Удержание — когорты по дням, прогресс по уровням
- Активность — время в игре, сессии, активность по часам
Рекомендации
- Отслеживайте каждую сессию — game_start, game_end с длительностью
- Следите за балансом — если ресурсов слишком много, игроки не будут покупать
- Анализируйте сложность — где игроки застревают и перестают играть
- Тестируйте гипотезы — изменили сложность? Смотрите на удержание
- Сегментируйте платящих — их поведение отличается от бесплатных игроков
- Используйте A/B тесты — проверяйте разные механики монетизации
Что дальше?
Нужна помощь с настройкой игровой аналитики?
Напишите нам, и мы поможем настроить интеграцию под вашу игру