You've already forked CC-Framework.BriskGameServer
6.9 KiB
6.9 KiB
Brisk Unity SDK接入文档
1. 这份文档适合做什么
这份文档用于说明当前 Brisk Unity SDK 的接入结构与推荐调用方式。
当前 SDK 已采用静态总入口:
Brisk.InitializeAsync(...)Brisk.Auth.xxxBrisk.Player.xxxBrisk.Config.xxxBrisk.Announcements.xxxBrisk.Leaderboard.xxxBrisk.Archive.xxxBrisk.Space.xxx
2. 初始化模型
Unity 客户端初始化建议持有:
baseUrlgameKey(必填)clientVersion(推荐传入;服务端接口当前可选,但会影响版本命中)deviceId(推荐传入;bootstrap接口当前可选)
不再需要项目级 channel / platform。
示例:
var options = new BriskOptions {
BaseUrl = "https://brisk.lightyears.ltd",
GameKey = "demo-game",
ClientVersion = Application.version,
DeviceId = SystemInfo.deviceUniqueIdentifier
};
3. 登录模型
登录属于独立模块,不属于初始化参数。
Unity 登录接口建议统一成:
Task<LoginResult> LoginAsync(
string loginProvider,
string loginUserId = null,
string code = null,
string nickname = null,
string avatarUrl = null,
Dictionary<string, object> profileJson = null
)
说明:
loginProvider:如taploginUserId:平台返回的稳定唯一用户 IDcode:如果平台走 code 兑换模式则传这个loginUserId和code二选一nickname / avatarUrl / profileJson为可选同步资料
4. 推荐接入顺序
BootstrapAsync()- 从第三方 SDK 获取:
loginProviderloginUserId或code- 可选昵称、头像、扩展资料
LoginAsync(...)- 保存
accessToken - 拉取:
GetMeAsync()GetCurrentConfigAsync()ListAnnouncementsAsync()
- 进入业务模块
5. 身份模型建议
Unity SDK 内建议同时保存两套身份:
- 外部身份:
LoginProviderLoginUserId
- 内部身份:
PlayerIdProjectAccountId
原因:
- 跨系统跳转、和第三方 SDK 共存时,外部身份更方便
- 游戏内高频接口仍以内部
player_id为主更自然
6. 空间跳转建议
如果排行榜头像点击来自第三方平台,推荐直接支持:
Task<SpaceInfo> GetSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
Task<SpaceStats> GetSpaceStatsByLoginIdentityAsync(string loginProvider, string loginUserId)
Task LikeSpaceByLoginIdentityAsync(string loginProvider, string loginUserId)
这样可以避免 Unity 侧先做一次平台 ID 到 Brisk player_id 的映射查询。
7. 排行榜模块建议
客户端侧建议封装:
GetRankTopAsync(rankKey, limit)GetRankMeAsync(rankKey)GetRankAroundMeAsync(rankKey, range)SubmitScoreAsync(rankKey, score)GetCurrentSeasonAsync(rankKey)GetSeasonHistoryAsync(rankKey, limit)GetSeasonHistoryDetailAsync(rankKey, seasonId, limit)
榜单项需要暴露:
RankPlayerIdProjectAccountIdLoginProviderLoginUserIdScoreNicknameAvatarUrl
8. 云存档模块建议
云存档适合承载真实游戏数据。
原因:
- 上传下载是二进制流
- 天然适配 bytes
- 可直接存:
- JSON bytes
- protobuf bytes
- msgpack bytes
- 压缩后的存档二进制
当前 SDK 已提供:
GetArchiveSlotsAsync()GetArchiveMetaAsync(slotNo)UploadAsync(slotNo, byte[], baseVersion, checksum)UploadTextAsync(slotNo, text, baseVersion, checksum)UploadJsonAsync(slotNo, payload, baseVersion, checksum)DownloadArchiveAsync(slotNo)DownloadTextAsync(slotNo)DownloadJsonAsync(slotNo)
推荐上层使用策略:
- 文本存档:优先直接用
UploadTextAsync / DownloadTextAsync - JSON 存档:优先直接用
UploadJsonAsync / DownloadJsonAsync - 二进制存档:继续用
UploadAsync / DownloadAsync
其中:
- SDK 会自动计算上传用
checksum - 手动传
checksum时也可以带sha256:前缀,SDK 会自动归一化
9. 玩家空间模块建议
玩家空间适合承载公开展示数据或空间自定义内容,不再限制为 JSON。
推荐放:
- 简介文本
- 头像展示字段
- 成就展示摘要
- 公开资料卡
- 小型二进制空间内容
- 文本、JSON、protobuf、msgpack 等自定义格式
当前 SDK / 接口核心是:
UploadMySpaceContentAsync(baseVersion, contentType, checksum, byte[])DownloadSpaceContentByPlayerIdAsync(playerId)DownloadSpaceContentByLoginIdentityAsync(loginProvider, loginUserId)GetSpaceByPlayerIdAsync(playerId)GetSpaceByLoginIdentityAsync(loginProvider, loginUserId)LikeSpaceAsync(playerId)LikeSpaceByLoginIdentityAsync(loginProvider, loginUserId)GetMyVisitsAsync(limit)
当前 SDK 额外提供了一个极简便捷入口:
Brisk.Space.UpdateMyAsync(payload, baseVersion, contentType, checksum)
它的行为是:
payload为string时,自动按text/plain上传payload为byte[]时,自动按application/octet-stream上传payload为其他对象时,自动序列化为 JSON 并按application/json上传
建议 SDK 暴露两层模型:
- 空间主信息:
ContentExistsContentVersionContentTypeContentSizeBytesContentChecksumLikeCountVisitCount
- 空间内容本体:
- 原始
byte[] - 下载响应头中的
X-Space-Version - 下载响应头中的
X-Space-Checksum
- 原始
如果上层业务追求最省事,可以直接用 UpdateMyAsync(string) 或 UpdateMyAsync(object);
如果业务自己管理编码、压缩、protobuf、msgpack 等格式,则继续走 byte[] 上传下载接口。
10. 动态配置建议
动态配置拆为两层:
feature_flags- 适合直接做开关或 key-value 判断
dynamic_config- 适合结构化配置对象
Unity SDK 可以考虑:
- 把
feature_flags映射成Dictionary<string, object> - 把
dynamic_config保留原始 JSON,并允许上层自行反序列化
11. 错误与登录态处理
SDK 需要统一处理:
- HTTP 非 2xx
- 业务码非 0
- 401 / 登录态失效
- 维护模式
- 玩家被封禁
- 存档版本冲突
建议统一抛出:
public sealed class BriskApiException : Exception {
public int HttpStatus { get; }
public int Code { get; }
public string ServerMessage { get; }
}
12. Unity 侧最小落地清单
第一版 SDK 至少要覆盖:
- 初始化
- 登录换票
- 登录态保存
- 玩家信息读取
- 动态配置读取
- 公告读取与已读
- 排行榜提交与读取
- 云存档上传下载
- 玩家空间读取、写入、点赞
- 按
login_provider + login_user_id访问空间
13. 配套文件
- API 总文档:
- OpenAPI: