XuqmGroup-RNSDK/docs/架构总览.md
XuqmGroup 4c3019edab docs: 添加 CLAUDE.md + 各 package README + 架构总览 + 模块待开发说明
Agent 8 文档生成:
- CLAUDE.md 项目上下文
- 各 package README (common/update/push/im/xwebview/license/log)
- docs/架构总览.md
- docs/模块待开发说明.md
2026-06-16 12:14:52 +08:00

3.2 KiB

XuqmGroup RN SDK 架构总览

整体架构

宿主 AppYiwangxinApp4 等)
  └── 初始化方式A: 配置文件自动 / 方式B: 手动 initialize
        ↓
  @xuqm/rn-common (核心层 v0.4.0
    ├── XuqmSDK.initialize() → 拉取 /api/sdk/config
    ├── XuqmSDK.setUserInfo() → 通知所有子 SDK订阅者模式
    ├── api/useApi / usePageApi / apiRequest
    ├── device设备信息 / 厂商检测)
    ├── xwebviewJSBridge 桥接控制)
    ├── ui/toast / alert / confirm
    └── logApiUrl / logEnabled从平台配置获取
        ↓ peerDep / 依赖
  子 SDK各自独立
    ├── @xuqm/rn-update   → OTA 热更新 / APK 更新
    ├── @xuqm/rn-push     → 厂商推送peerDep: rn-common
    ├── @xuqm/rn-im       → IM 会话 / 消息peerDep: rn-common
    ├── @xuqm/rn-xwebview → WebView UI 组件peerDep: rn-common
    ├── @xuqm/rn-license  → 证书授权peerDep: rn-common
    └── @xuqm/rn-log      → 日志 / 追踪peerDep: rn-common

依赖关系

rn-common (核心,无 SDK 内部依赖)
  ↑ peerDep
  ├── rn-update   (直接依赖 rn-common
  ├── rn-push     peerDep rn-common
  ├── rn-im       peerDep rn-common + watermelondb
  ├── rn-xwebview peerDep rn-common + webview + navigation
  ├── rn-license  peerDep rn-common + quick-crypto
  └── rn-log      peerDep rn-common

用户状态分发机制

XuqmSDK.setUserInfo(info)
  ├── PushSDK: 检测厂商 → 获取厂商配置 → 注册 token
  ├── ImSDK:   若 userSig 存在且 imEnabled → 自动登录 WebSocket
  ├── UpdateSDK: 更新 userId用于定向更新
  └── LicenseSDK: 更新用户上下文

XuqmSDK.setUserInfo(null)
  ├── PushSDK: 解绑 token
  ├── ImSDK:   断开 WebSocket
  └── 其他子 SDK: 清理用户状态

各子 SDK 在模块加载时通过 _registerUserInfoHandler() 注册处理器,无需 App 手动协调。

初始化流程

方式 A自动

Metro alias → @xuqm/autoinit-config → encrypted .xuqmconfig
  ↓ import 时触发
autoInit.ts → require('@xuqm/autoinit-config')
  ↓ 解密PBKDF2 + AES-256-GCM
initWithConfigFile() → initialize({ appKey, platformUrl })
  ↓ HTTP GET
/api/sdk/config → 返回 { apiUrl, imWsUrl, fileServiceUrl, ... }

方式 B手动

App 代码调用 XuqmSDK.initialize({ appKey })
  ↓ HTTP GET
/api/sdk/config → 解析平台配置
  ↓
各子 SDK 就绪(等待 setUserInfo 触发具体功能)

数据流

App 代码
  ↓ 调用 API
子 SDKupdate/push/im/license/log
  ↓ 使用 apiRequest()
rn-common http.ts
  ↓ 附加 Bearer Token + 处理响应
平台服务tenant-service / im-service / push-service / update-service / log-service

包发布

所有包发布到 Nexus npm 私有仓库:https://nexus.xuqinmin.com/repository/npm-hosted/

# 发布单个包
cd packages/common && npm publish

# 发布所有包
for pkg in common update push im xwebview license log; do
  cd packages/$pkg && npm publish && cd ../..
done