docs(deploy): 添加部署文档并更新SDK API设计规范

- 新增完整的XuqmGroup部署文档,包含服务器配置、Docker Compose部署策略
- 更新SDK API重设计规范至V2.0,统一各端SDK初始化和登录接口
- 添加安全设计规范文档,涵盖密码安全、AppSecret验证等内容
- 新增离线推送架构设计文档,定义厂商推送集成方案
- 重构SDK登录流程,统一使用userId + userSig鉴权模式
- 移除dbName等外部配置参数,实现零感知平台地址配置
- 完善部署架构图和配置示例文件
这个提交包含在:
XuqmGroup 2026-05-02 11:29:50 +08:00
父节点 27d298a622
当前提交 e5552044ae
共有 5 个文件被更改,包括 16 次插入23 次删除

查看文件

@ -52,7 +52,7 @@ XuqmSDK.initialize(
```kotlin
// 登录(协程 suspend 函数)
// 只需要 userId + userSig,不需要 nickname / avatar / expiresAt
// 只需要 userId + userSig,不需要 nickname / avatar / 过期字段
lifecycleScope.launch {
XuqmSDK.login(
userId = "user_001",
@ -160,7 +160,7 @@ XuqmSDK.logout()
// ↓ 自动触发所有模块清理
```
> **注意**`userSig` 一旦获取即永久有效,SDK 侧不做过期检查与续签。如需撤销权限,业务侧可在租户平台重置 `appSecret` 或拉黑账号。
> **注意**`userSig` 由业务服务端签发,SDK 侧不做续签。若需更新登录态,请直接重新登录;如需撤销权限,可在租户平台重置 `appSecret` 或拉黑账号。
### 8. 版本更新

查看文件

@ -62,7 +62,7 @@ XuqmSDK.shared.initialize(config: config)
import XuqmIM
// 使用 UserSig 登录(推荐生产环境)
// 只需要 userId + userSig,不需要 nickname / avatar / expiresAt
// 只需要 userId + userSig,不需要 nickname / avatar / 过期字段
try await XuqmSDK.shared.login(userId: "user_001", userSig: "your_user_sig_jwt")
// 设置事件代理
@ -203,7 +203,7 @@ try await XuqmSDK.shared.login(userId: "user_001", userSig: userSig)
XuqmSDK.shared.logout()
```
> **注意**`userSig` 一旦获取即永久有效,SDK 侧不做过期检测与续签
> **注意**`userSig` 由业务服务端签发,SDK 侧不做续签。若需更新登录态,请直接重新登录
### 10. 检查更新

查看文件

@ -252,24 +252,19 @@ interface ImGroup {
---
## 迁移指南v0.3.x → v0.4.0
## 当前接入
v0.4.0 预计改动(**Breaking Changes**
当前接入方式如下
```diff
```ts
// 初始化
- await XuqmSDK.initialize({ appKey: 'xxx', /* 平台地址参数已移除 */ })
+ await XuqmSDK.initialize({ appKey: 'xxx' }) // 平台地址内置,无需传入
await XuqmSDK.initialize({ appKey: 'xxx' }) // 平台地址内置,无需传入
// IM 登录UserSig 由业务服务端签发)
const userSig = await yourServer.getUserSig(userId)
await ImSDK.login(userId, userSig)
// IM 登录(改为 UserSig 鉴权,密码不再传入 SDK
- await ImSDK.login(userId, nickname, avatar, dbName)
+ const userSig = await yourServer.getUserSig(userId) // 您的服务端签发
+ await ImSDK.login(userId, userSig, { nickname, avatar })
// dbName 自动由 appKey + userId 派生,无需传入
// loginWithToken 废弃
- await ImSDK.loginWithToken(userId, token, dbName)
+ // 统一使用 login(userId, userSig)
```
UserSig 生成方式见 [安全设计文档](../../design/02-security-design.md)。
@ -284,7 +279,7 @@ UserSig 生成方式见[安全设计文档](../../design/02-security-design.md)
**Q: 为什么不需要传平台地址参数?**
XuqmGroup 是托管平台,服务地址统一管理,与腾讯云 IM 等平台的设计一致,开发者只需关心业务逻辑。
**Q: UserSig 是什么?v0.4.0**
**Q: UserSig 是什么?**
UserSig 是您的业务服务端用 AppSecret 为用户签发的安全凭证,有效期可配置。AppSecret 绝不下发到客户端。
**Q: 本地消息存储在哪里?**

查看文件

@ -47,10 +47,10 @@ POST /api/im/auth/login
**响应**
```json
{ "token": "eyJ...", "expiresAt": 9223372036854775807 }
{ "token": "eyJ..." }
```
> `expiresAt` 为极大值(约 100 年),表示 token 永久有效。SDK 侧不做过期检查
> SDK 侧不做续签;登录态更新由业务侧重新登录完成
---

查看文件

@ -18,8 +18,6 @@ await XuqmSDK.initialize({ appKey })
await XuqmSDK.login({
userId,
userSig,
expiresAt,
refreshUserSig,
})</pre>
</el-card>
</el-col>