CroupierCroupier
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
  • C# SDK
  • Lua SDK
分析
GitHub
指南
架构
API 参考
  • C++ SDK
  • Go SDK
  • Java SDK
  • JavaScript SDK
  • Python SDK
  • C# SDK
  • Lua SDK
分析
GitHub
  • 分析系统

    • 游戏数据分析系统
    • 快速开始

客户端上报概览

Go(示例)

client := analytics.NewClient(analytics.Config{
  Endpoint: "https://ingest.example.com",
  Secret:   os.Getenv("ANALYTICS_SECRET"),
})
client.Track(context.Background(), analytics.Event{
  Name: "session.start",
  Ts:   time.Now(),
  Attrs: map[string]any{"uid": "u1", "game_id": "demo"},
})

C#(Unity 快速接入,示意)

var c = new AnalyticsClient(new Config {
  Endpoint = "https://ingest.example.com",
  Secret = Env.Get("ANALYTICS_SECRET")
});
c.Track("session.start", new { uid = "u1", game_id = "demo" });

JavaScript(Node/浏览器)

// 计算签名:Base64(HMAC_SHA256(secret, `${ts}\n${nonce}\n${sha256(body)}`))
import crypto from 'node:crypto';
const endpoint = 'https://ingest.example.com/api/ingest/events';
const secret = process.env.ANALYTICS_SECRET;
const body = JSON.stringify([{ event: 'session.start', ts: Date.now(), attrs: { uid: 'u1', game_id: 'demo' } }]);
const ts = Math.floor(Date.now() / 1000).toString();
const nonce = crypto.randomBytes(8).toString('hex');
const bodySha = crypto.createHash('sha256').update(body).digest('hex');
const sig = crypto.createHmac('sha256', secret).update(`${ts}\n${nonce}\n${bodySha}`).digest('base64');
await fetch(endpoint, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'X-Timestamp': ts, 'X-Nonce': nonce, 'X-Signature': sig },
  body
});

说明

  • SDK 做签名、重试、批量;服务端做去重、防重放、鉴权与限流
  • 服务端 Traces/Metrics 建议使用 OTel SDK,业务事件用 Analytics SDK
在 GitHub 上编辑此页
最后更新: 2026/1/8 22:42