客户端上报概览
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
