认证方式

所有 API 请求需要在 HTTP Header 中携带 API Key 进行鉴权:

X-API-Key: your-api-key-here
Content-Type: application/json

💡 API Key 可在控制台「系统设置」页面获取

日志上传接口

POST /api/logs
上传单条日志记录到服务器

请求参数

参数类型必填说明
device_idstring是设备唯一标识符(UUID)
categorystring是分类:Runtime / Feature / Error / Performance
namestring是事件名称
dataobject否附加数据(键值对)
timestampdatetime否事件时间(默认服务器当前时间)
app_versionstring否应用版本号
os_infostring否操作系统信息

请求示例

POST /api/logs HTTP/1.1
Host: your-domain.com
X-API-Key: abc123def456...
Content-Type: application/json

{
    "device_id": "6abf36f0-08fd-fc02-c7ed-d176e3335b28",
    "category": "Feature",
    "name": "UserLogin",
    "data": {
        "login_method": "cookie",
        "user_id": 12345,
        "success": true
    },
    "app_version": "1.2.0",
    "os_info": "Windows 11 Pro"
}

响应示例

{
    "code": 0,
    "msg": "success",
    "data": {
        "log_id": 1001
    }
}

批量日志上传

POST /api/logs/batch
批量上传多条日志(推荐,减少请求次数)

请求体格式

{
    "logs": [
        {
            "device_id": "6abf36f0-...",
            "category": "Runtime",
            "name": "Start",
            "data": { "boot_time": 120 }
        },
        {
            "device_id": "6abf36f0-...",
            "category": "Feature",
            "name": "GameLaunch",
            "data": { "game_id": "game001" }
        }
    ]
}

💡 单次批量请求建议不超过 100 条日志

心跳保活接口

POST /api/heartbeat
客户端定期上报心跳,用于在线设备统计

请求参数

参数类型必填说明
device_idstring是设备唯一标识符
statusstring否状态:running / idle / error

心跳间隔建议

建议每 5-10 秒发送一次心跳,服务器将在 30 秒内无心跳判定为离线。

错误码说明

状态码HTTP Code说明
0200请求成功
400400请求参数错误
403403API Key 无效或已禁用
429429请求过于频繁(触发限流)
500500服务器内部错误

C# 客户端示例

using System.Net.Http;
using System.Text.Json;

public class LogClient
{
    private readonly HttpClient _httpClient;
    private readonly string _apiKey;

    public LogClient(string baseUrl, string apiKey)
    {
        _httpClient = new HttpClient { BaseAddress = new Uri(baseUrl) };
        _httpClient.DefaultRequestHeaders.Add("X-API-Key", apiKey);
        _apiKey = apiKey;
    }

    public async Task TrackFeatureAsync(string deviceId, string featureName, object data = null)
    {
        var payload = new
        {
            device_id = deviceId,
            category = "Feature",
            name = featureName,
            data = data ?? new { }
        };

        var json = JsonSerializer.Serialize(payload);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        await _httpClient.PostAsync("/api/logs", content);
    }
}
返回产品文档 获取技术支持