GameTribe

Analytics

Track performance metrics, player behavior, and custom analytics.

Overview

The GameTribe SDK automatically collects key analytics data and allows you to track custom metrics for deeper insights into player behavior.

Automatic Metrics

These metrics are collected automatically when analytics is enabled:

MetricDescription
Session DurationHow long each play session lasts
IPM (Interactions Per Minute)Player engagement intensity
Average FPSPerformance across devices
Memory UsageMemory consumption patterns
Device InfoPlatform, OS, screen size, Unity version
Rage Quit DetectionWhen players exit frustratedly
csharp
// Enable automatic analytics in PlatformConfig
enableAnalytics = true;
trackPerformanceMetrics = true;
analyticsBatchInterval = 60f; // Send every 60 seconds

Performance Tracking

Track performance metrics to identify issues across different devices:

PerformanceTracker.cs
using UnityEngine;
using GameTribe.SDK;
public class PerformanceTracker : MonoBehaviour
{
private float[] fpsBuffer = new float[60];
private int fpsIndex = 0;
void Update()
{
// Track FPS
fpsBuffer[fpsIndex] = 1f / Time.deltaTime;
fpsIndex = (fpsIndex + 1) % fpsBuffer.Length;
}
public void SendPerformanceReport()
{
float avgFps = 0f;
float minFps = float.MaxValue;
foreach (var fps in fpsBuffer)
{
avgFps += fps;
if (fps < minFps && fps > 0) minFps = fps;
}
avgFps /= fpsBuffer.Length;
PlatformSDK.Instance.Events.TrackPerformance(new Dictionary<string, object>
{
{ "avgFps", Mathf.RoundToInt(avgFps) },
{ "minFps", Mathf.RoundToInt(minFps) },
{ "memoryUsage", System.GC.GetTotalMemory(false) / 1024 / 1024 }, // MB
{ "qualityLevel", QualitySettings.GetQualityLevel() }
});
}
}

Feature Usage Analytics

Track which features players use most:

csharp
// Track when player opens shop
PlatformSDK.Instance.Events.TrackFeatureUsed(
featureName: "item_shop",
metadata: new Dictionary<string, object>
{
{ "timeSpent", shopOpenTime },
{ "itemsViewed", viewedItems.Count },
{ "purchaseMade", didPurchase }
}
);
// Track tutorial completion
PlatformSDK.Instance.Events.TrackFeatureUsed(
featureName: "tutorial",
metadata: new Dictionary<string, object>
{
{ "completed", true },
{ "stepsCompleted", 5 },
{ "timeToComplete", tutorialTime }
}
);

Understand how players navigate through your game:

csharp
// Track screen navigation
PlatformSDK.Instance.Events.TrackNavigation(
fromScreen: "main_menu",
toScreen: "level_select"
);
// Track with additional context
PlatformSDK.Instance.Events.TrackNavigation(
fromScreen: "game_over",
toScreen: "leaderboard",
metadata: new Dictionary<string, object>
{
{ "navigationMethod", "button_click" },
{ "timeOnPreviousScreen", 5.2f }
}
);

Error Tracking

Track errors to identify and fix issues:

ErrorTracker.cs
public class ErrorTracker : MonoBehaviour
{
void OnEnable()
{
Application.logMessageReceived += HandleLog;
}
void OnDisable()
{
Application.logMessageReceived -= HandleLog;
}
void HandleLog(string logString, string stackTrace, LogType type)
{
if (type == LogType.Error || type == LogType.Exception)
{
PlatformSDK.Instance.Events.TrackError(
errorType: type.ToString(),
errorMessage: logString,
metadata: new Dictionary<string, object>
{
{ "stackTrace", stackTrace },
{ "severity", type == LogType.Exception ? "critical" : "error" }
}
);
}
}
}

Time Tracking

Track how players spend their time in different areas:

csharp
// At end of session, report time breakdown
PlatformSDK.Instance.Events.TrackTimeSpent(
totalTime: (int)totalSessionTime,
breakdown: new Dictionary<string, object>
{
{ "gameplay", gameplayTime },
{ "menus", menuTime },
{ "loading", loadingTime },
{ "paused", pausedTime },
{ "shop", shopTime }
}
);

Custom Metrics

Track any custom data specific to your game:

csharp
// Track custom game-specific metrics
PlatformSDK.Instance.Analytics.TrackCustomMetric("power_ups_used", 5);
PlatformSDK.Instance.Analytics.TrackCustomMetric("enemies_defeated", 42);
PlatformSDK.Instance.Analytics.TrackCustomMetric("coins_collected", 1500);
// Track with metadata
PlatformSDK.Instance.Events.SendCustomEvent("boss_defeated", new Dictionary<string, object>
{
{ "bossId", "final_boss" },
{ "attemptNumber", 3 },
{ "timeToDefeat", 120 },
{ "healthRemaining", 25 }
});

Analytics Configuration

SettingDefaultDescription
enableAnalyticstrueEnable/disable all analytics
analyticsBatchInterval60sHow often to send batched data
trackPerformanceMetricstrueAuto-track FPS, memory, etc.

Best Practices

  • Be selective — Track meaningful metrics, not everything
  • Use consistent naming — Establish naming conventions for events
  • Include context — Add relevant metadata to events
  • Respect privacy — Don't track personal information
  • Monitor performance — Track FPS to identify optimization needs