🎮 Игры

Полное руководство по аналитике для игровых проектов: отслеживание уровней, ресурсов, внутриигровых покупок и удержания игроков

🎯 Что вы получите
  • Полную картину прогресса игроков по уровням
  • Анализ баланса ресурсов и внутриигровой экономики
  • Отслеживание монетизации и 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"
  }
}

Анализ прогресса по уровням

Прохождение уровней

Уровень 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% игроков

Атрибуты игроков

{
  "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?
  • На каком уровне чаще всего бросают?
  • Как туториал влияет на удержание?

💰 Монетизация

  • Какой процент игроков покупает?
  • Какие предметы покупают чаще?
  • На каком уровне совершают первую покупку?

⚖️ Баланс

  • Не слишком ли сложные уровни?
  • Хватает ли ресурсов?
  • Сбалансирована ли экономика?

🚀 Прогресс

  • Как быстро игроки проходят уровни?
  • Сколько времени в игре?
  • Какие достижения популярны?

Дашборды для игр

После настройки интеграции вы получите готовые дашборды:

Рекомендации

  • Отслеживайте каждую сессию — game_start, game_end с длительностью
  • Следите за балансом — если ресурсов слишком много, игроки не будут покупать
  • Анализируйте сложность — где игроки застревают и перестают играть
  • Тестируйте гипотезы — изменили сложность? Смотрите на удержание
  • Сегментируйте платящих — их поведение отличается от бесплатных игроков
  • Используйте A/B тесты — проверяйте разные механики монетизации

Что дальше?

📱 Мобильное приложение

Аналитика для мобильных приложений

Перейти →

📊 Знакомство с дашбордом

Как работать с полученными данными

Перейти →

Нужна помощь с настройкой игровой аналитики?

Напишите нам, и мы поможем настроить интеграцию под вашу игру

support@instantbase.online Telegram