更新文档

This commit is contained in:
2026-04-11 15:51:08 +08:00
parent 7a8dd4cea0
commit a257a8a912
6 changed files with 121 additions and 56 deletions

View File

@@ -259,7 +259,7 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
BaseUrl: https://brisk.lightyears.ltd BaseUrl: https://brisk.lightyears.ltd
GameKey: briskh5verify GameKey: game_a1faf5ee93d0
ClientVersion: 1.0.0 ClientVersion: 1.0.0
DeviceId: editor-device DeviceId: editor-device
ValidateSessionOnInitialize: 1 ValidateSessionOnInitialize: 1
@@ -268,7 +268,7 @@ MonoBehaviour:
LoginCode: LoginCode:
Nickname: "Unity\u793A\u4F8B\u73A9\u5BB6" Nickname: "Unity\u793A\u4F8B\u73A9\u5BB6"
AvatarUrl: AvatarUrl:
RankKey: h5-verify-rank-20260410034312-5cdd RankKey: rank-20260411062004-2bce
SubmitScoreValue: 128 SubmitScoreValue: 128
LeaderboardLimit: 10 LeaderboardLimit: 10
AroundMeRange: 5 AroundMeRange: 5

View File

@@ -19,17 +19,41 @@
## 2. 客户端主流程 ## 2. 客户端主流程
1. `GET /api/client/bootstrap` 1. 可选:`GET /api/client/time`
2. `POST /api/auth/login/exchange` 2. `GET /api/client/bootstrap`
3. `Bearer access_token` 调用: 3. `POST /api/auth/login/exchange`
4.`Bearer access_token` 调用:
- `GET /api/player/me` - `GET /api/player/me`
- `GET /api/announcements` - `GET /api/announcements`
- 排行榜、存档、空间等业务接口 - 排行榜、存档、空间等业务接口
4. `GET /api/config/current` 为公开接口,登录前后都可调用 5. `GET /api/config/current` 为公开接口,登录前后都可调用
## 3. 初始化 ## 3. 初始化
### 3.1 获取初始化信息 ### 3.1 获取平台时间
`GET /api/client/time`
说明:
- 平台级匿名授时接口
- 不需要 `game_key`
- 不依赖任何项目配置
- 返回 UTC 时间,适合客户端启动时做统一对时
示例:
```bash
curl "https://brisk.lightyears.ltd/api/client/time"
```
返回重点:
- `server_time`
- `server_unix`
- `server_unix_ms`
### 3.2 获取初始化信息
`GET /api/client/bootstrap` `GET /api/client/bootstrap`

View File

@@ -2,18 +2,18 @@
## 1. 这份文档适合做什么 ## 1. 这份文档适合做什么
这份文档用于说明当前 Brisk Unity SDK 的接入结构与推荐调用方式 这份文档用于在 Unity 侧封装 Brisk SDK
当前 SDK 已采用静态总入口 建议把 SDK 拆成以下层次
- `Brisk.InitializeAsync(...)` - `BriskTime`
- `Brisk.Auth.xxx` - `BriskClient`
- `Brisk.Player.xxx` - `BriskAuth`
- `Brisk.Config.xxx` - `BriskConfig`
- `Brisk.Announcements.xxx` - `BriskAnnouncements`
- `Brisk.Leaderboard.xxx` - `BriskRanks`
- `Brisk.Archive.xxx` - `BriskArchives`
- `Brisk.Space.xxx` - `BriskSpaces`
## 2. 初始化模型 ## 2. 初始化模型
@@ -26,6 +26,8 @@ Unity 客户端初始化建议持有:
不再需要项目级 `channel / platform` 不再需要项目级 `channel / platform`
如果只是做平台授时,不需要传 `gameKey`,可以单独调用时间接口。
示例: 示例:
```csharp ```csharp
@@ -64,18 +66,31 @@ Task<LoginResult> LoginAsync(
## 4. 推荐接入顺序 ## 4. 推荐接入顺序
1. `BootstrapAsync()` 1. 可选:`SyncServerTimeAsync()`
2. 从第三方 SDK 获取: 2. `BootstrapAsync()`
3. 从第三方 SDK 获取:
- `loginProvider` - `loginProvider`
- `loginUserId``code` - `loginUserId``code`
- 可选昵称、头像、扩展资料 - 可选昵称、头像、扩展资料
3. `LoginAsync(...)` 4. `LoginAsync(...)`
4. 保存 `accessToken` 5. 保存 `accessToken`
5. 拉取: 6. 拉取:
- `GetMeAsync()` - `GetMeAsync()`
- `GetCurrentConfigAsync()` - `GetCurrentConfigAsync()`
- `ListAnnouncementsAsync()` - `ListAnnouncementsAsync()`
6. 进入业务模块 7. 进入业务模块
平台授时接口建议封装:
```csharp
Task<ServerTimeResult> SyncServerTimeAsync()
```
建议返回:
- `ServerTime`
- `ServerUnix`
- `ServerUnixMs`
## 5. 身份模型建议 ## 5. 身份模型建议
@@ -142,27 +157,12 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
- msgpack bytes - msgpack bytes
- 压缩后的存档二进制 - 压缩后的存档二进制
当前 SDK 提供: Unity SDK 建议提供:
- `GetArchiveSlotsAsync()` - `GetArchiveSlotsAsync()`
- `GetArchiveMetaAsync(slotNo)` - `GetArchiveMetaAsync(slotNo)`
- `UploadAsync(slotNo, byte[], baseVersion, checksum)` - `UploadArchiveAsync(slotNo, baseVersion, checksum, byte[])`
- `UploadTextAsync(slotNo, text, baseVersion, checksum)`
- `UploadJsonAsync(slotNo, payload, baseVersion, checksum)`
- `DownloadArchiveAsync(slotNo)` - `DownloadArchiveAsync(slotNo)`
- `DownloadTextAsync(slotNo)`
- `DownloadJsonAsync(slotNo)`
推荐上层使用策略:
- 文本存档:优先直接用 `UploadTextAsync / DownloadTextAsync`
- JSON 存档:优先直接用 `UploadJsonAsync / DownloadJsonAsync`
- 二进制存档:继续用 `UploadAsync / DownloadAsync`
其中:
- SDK 会自动计算上传用 `checksum`
- 手动传 `checksum` 时也可以带 `sha256:` 前缀SDK 会自动归一化
## 9. 玩家空间模块建议 ## 9. 玩家空间模块建议
@@ -177,7 +177,7 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
- 小型二进制空间内容 - 小型二进制空间内容
- 文本、JSON、protobuf、msgpack 等自定义格式 - 文本、JSON、protobuf、msgpack 等自定义格式
当前 SDK / 接口核心是: 当前接口核心是:
- `UploadMySpaceContentAsync(baseVersion, contentType, checksum, byte[])` - `UploadMySpaceContentAsync(baseVersion, contentType, checksum, byte[])`
- `DownloadSpaceContentByPlayerIdAsync(playerId)` - `DownloadSpaceContentByPlayerIdAsync(playerId)`
@@ -188,16 +188,6 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
- `LikeSpaceByLoginIdentityAsync(loginProvider, loginUserId)` - `LikeSpaceByLoginIdentityAsync(loginProvider, loginUserId)`
- `GetMyVisitsAsync(limit)` - `GetMyVisitsAsync(limit)`
当前 SDK 额外提供了一个极简便捷入口:
- `Brisk.Space.UpdateMyAsync(payload, baseVersion, contentType, checksum)`
它的行为是:
- `payload``string` 时,自动按 `text/plain` 上传
- `payload``byte[]` 时,自动按 `application/octet-stream` 上传
- `payload` 为其他对象时,自动序列化为 JSON 并按 `application/json` 上传
建议 SDK 暴露两层模型: 建议 SDK 暴露两层模型:
- 空间主信息: - 空间主信息:
@@ -213,8 +203,7 @@ Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
- 下载响应头中的 `X-Space-Version` - 下载响应头中的 `X-Space-Version`
- 下载响应头中的 `X-Space-Checksum` - 下载响应头中的 `X-Space-Checksum`
如果上层业务追求最省事,可以直接用 `UpdateMyAsync(string)``UpdateMyAsync(object)` 如果上层业务实际保存的是文本或 JSON建议仍按 `byte[]` 统一收发,再由业务层自己决定如何编码和反序列化。
如果业务自己管理编码、压缩、protobuf、msgpack 等格式,则继续走 `byte[]` 上传下载接口。
## 10. 动态配置建议 ## 10. 动态配置建议

View File

@@ -1,7 +1,7 @@
# Brisk 错误码文档(内部实施版) # Brisk 错误码文档(内部实施版)
**版本**v0.1 **版本**v0.2
**日期**2026-04-08 **日期**2026-04-11
**说明**:当前工程内已使用的错误码分组与含义。 **说明**:当前工程内已使用的错误码分组与含义。
--- ---
@@ -45,6 +45,13 @@
## 3. 当前已使用错误码 ## 3. 当前已使用错误码
补充说明:
- `GET /api/client/time` 为平台匿名授时接口
- 该接口当前没有新增专属业务错误码
- 触发限流时仍使用通用限流错误码 `80001`
- 限流组件不可用时仍使用通用错误码 `80002`
| 错误码 | 接口/模块 | 含义 | | 错误码 | 接口/模块 | 含义 |
|---|---|---| |---|---|---|
| `10001` | 客户端鉴权 | 缺少 token | | `10001` | 客户端鉴权 | 缺少 token |

View File

@@ -4,6 +4,7 @@ Brisk 游戏服务端工程。
当前已实现模块: 当前已实现模块:
- 平台授时 `time`
- 客户端初始化 `bootstrap` - 客户端初始化 `bootstrap`
- 登录换票 `auth` - 登录换票 `auth`
- 玩家信息 `player` - 玩家信息 `player`
@@ -20,6 +21,7 @@ Brisk 游戏服务端工程。
- 项目唯一标识只有 `game_key` - 项目唯一标识只有 `game_key`
- 项目级 `channel / platform` 已移除 - 项目级 `channel / platform` 已移除
- 初始化和动态配置只依赖 `game_key`,配置筛选只看 `client_version` - 初始化和动态配置只依赖 `game_key`,配置筛选只看 `client_version`
- 平台授时接口不依赖 `game_key`,可直接匿名获取 UTC 服务器时间
- 登录模块单独处理第三方身份: - 登录模块单独处理第三方身份:
- `login_provider`:如 `tap` - `login_provider`:如 `tap`
- `login_user_id`:该登录平台返回的稳定唯一用户 ID - `login_user_id`:该登录平台返回的稳定唯一用户 ID
@@ -43,6 +45,7 @@ docker compose up --build
- `GET /health` - `GET /health`
- `GET /api/ping` - `GET /api/ping`
- `GET /api/client/time`
- `GET /openapi.yaml` - `GET /openapi.yaml`
开发环境默认账号: 开发环境默认账号:
@@ -54,6 +57,10 @@ docker compose up --build
## 接入说明 ## 接入说明
- 平台授时:
- 匿名接口 `GET /api/client/time`
- 无需传 `game_key`
- 返回 `server_time``server_unix``server_unix_ms`
- 客户端初始化: - 客户端初始化:
- 必填 `game_key` - 必填 `game_key`
- 可选 `client_version` - 可选 `client_version`

View File

@@ -1,11 +1,12 @@
openapi: 3.0.3 openapi: 3.0.3
info: info:
title: Brisk Game Service API title: Brisk Game Service API
version: 0.1.0 version: 0.2.0
description: Current implemented Brisk server API for internal integration. description: Current implemented Brisk server API for internal integration.
servers: servers:
- url: /api - url: /api
tags: tags:
- name: time
- name: bootstrap - name: bootstrap
- name: auth - name: auth
- name: player - name: player
@@ -51,6 +52,21 @@ components:
type: string type: string
data: data:
nullable: true nullable: true
ClientTimePayload:
type: object
properties:
server_time:
type: string
format: date-time
example: 2026-04-11T08:12:30Z
server_unix:
type: integer
format: int64
example: 1775895150
server_unix_ms:
type: integer
format: int64
example: 1775895150123
ExchangeRequest: ExchangeRequest:
type: object type: object
required: [game_key, login_provider] required: [game_key, login_provider]
@@ -494,6 +510,28 @@ components:
type: string type: string
format: date-time format: date-time
paths: paths:
/client/time:
get:
tags: [time]
summary: Get platform server time
responses:
'200':
description: Current platform UTC time
content:
application/json:
schema:
type: object
properties:
code:
type: integer
example: 0
message:
type: string
example: ok
data:
$ref: '#/components/schemas/ClientTimePayload'
'429': { description: Rate limited }
'500': { description: Rate limit unavailable }
/client/bootstrap: /client/bootstrap:
get: get:
tags: [bootstrap] tags: [bootstrap]