docs(deploy): 添加部署文档和安全设计规范

- 新增 XuqmGroup 部署文档,包含部署方案、架构建议和部署步骤
- 添加安全设计规范,涵盖密码安全、AppSecret验证和服务端API认证
- 补充平台REST API规范,定义Server-to-Server调用接口和错误码
- 创建Java IM服务端SDK计划文档,规划Maven包发布和接口实现
这个提交包含在:
XuqmGroup 2026-05-08 18:32:00 +08:00
父节点 663c0eeb10
当前提交 d318f7e8ad
共有 2 个文件被更改,包括 5 次插入5 次删除

查看文件

@ -25,8 +25,8 @@
| 字段 | 内容 | | 字段 | 内容 |
|------|------| |------|------|
| **测试目的** | 验证 SDK 初始化及模块配置 | | **测试目的** | 验证 SDK 初始化及模块配置 |
| **测试步骤** | 1. 在 `AppDelegate` 中调用 `XuqmSDK.shared.initialize(config: SDKConfig(appId:appSecret:))` <br> 2. 确认 `XuqmSDK.shared.requireConfig()` 返回有效配置 <br> 3. 确认 `ApiClient.shared` 已配置 baseURL 与拦截器 | | **测试步骤** | 1. 在 `AppDelegate` 中调用 `XuqmSDK.shared.initialize(config: SDKConfig(appKey:appSecret:))` <br> 2. 确认 `XuqmSDK.shared.requireConfig()` 返回有效配置 <br> 3. 确认 `ApiClient.shared` 已配置 baseURL 与拦截器 |
| **预期结果** | 1. 初始化成功,无 fatalError <br> 2. `config.appId` 与传入值一致 <br> 3. `TokenStore` 已实例化 | | **预期结果** | 1. 初始化成功,无 fatalError <br> 2. `config.appKey` 与传入值一致 <br> 3. `TokenStore` 已实例化 |
| **实际结果** | 待测试 | | **实际结果** | 待测试 |
| **通过状态** | ⬜ | | **通过状态** | ⬜ |

查看文件

@ -224,7 +224,7 @@ platform :ios do
tenant_url = options[:tenant_url].to_s.strip tenant_url = options[:tenant_url].to_s.strip
return {} if tenant_url.empty? return {} if tenant_url.empty?
uri = URI("#{tenant_url}/api/sdk/config?appId=#{options[:app_key]}&platform=#{options[:platform]}") uri = URI("#{tenant_url}/api/sdk/config?appKey=#{options[:app_key]}&platform=#{options[:platform]}")
req = Net::HTTP::Get.new(uri) req = Net::HTTP::Get.new(uri)
resp = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |h| h.request(req) } resp = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |h| h.request(req) }
body = JSON.parse(resp.body) body = JSON.parse(resp.body)
@ -235,7 +235,7 @@ platform :ios do
end end
private_lane :xuqm_get_latest_version_code do |options| private_lane :xuqm_get_latest_version_code do |options|
uri = URI("#{options[:server_url]}/api/v1/updates/app/list?appId=#{options[:app_key]}&platform=#{options[:platform]}") uri = URI("#{options[:server_url]}/api/v1/updates/app/list?appKey=#{options[:app_key]}&platform=#{options[:platform]}")
req = Net::HTTP::Get.new(uri) req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{options[:api_token]}" req["Authorization"] = "Bearer #{options[:api_token]}"
resp = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |h| h.request(req) } resp = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |h| h.request(req) }
@ -249,7 +249,7 @@ platform :ios do
uri = URI("#{options[:server_url]}/api/v1/updates/app/upload") uri = URI("#{options[:server_url]}/api/v1/updates/app/upload")
request = Net::HTTP::Post::Multipart.new(uri.path, request = Net::HTTP::Post::Multipart.new(uri.path,
"appId" => options[:app_key], "appKey" => options[:app_key],
"platform" => "IOS", "platform" => "IOS",
"versionName" => options[:version_name], "versionName" => options[:version_name],
"versionCode" => options[:version_code].to_s, "versionCode" => options[:version_code].to_s,