跳到主要内容

趣小界跨平台 IM 核心库 (qxj-im-core) 架构与开源合规文档

欢迎查阅 QXJ IM SDK 官方开发者文档。本仓库基于 Apache-2.0 协议的 openim-sdk-core v3.8.3-patch.3 构建,统一为 iOS (Pure-Swift)、Android (Kotlin/Java 16KB AAR) 与 Web (WebAssembly) 三端提供高性能、零开源传染风险的即时通讯底座。


1. 开源许可证合规基线​

1.1 OpenIM 许可证变更时间线​

  • 服务端 (open-im-server) 与协议库 (github.com/openimsdk/protocol):始终保持 Apache-2.0 协议,商业闭源使用、修改与私有化部署均无传染风险。
  • 客户端核心库 (openim-sdk-core):
    • 在 2025-04-22 的提交 cab5675c 中,上游将许可证由 Apache-2.0 变更为传染性极强的 AGPL-3.0(自 v3.8.3-patch.4 起的所有 Tag 均受 AGPL-3.0 约束)。
    • 其变更前的最后一个纯正 Apache-2.0 官方版本为 v3.8.3-patch.3(Commit 93105bfe,发布于 2025-03-07)。

1.2 本仓库 (qxj-im-core) 合规保障措施​

  1. 代码基线锁定:本仓库直接基于 v3.8.3-patch.3 (93105bfe) 创建,已彻底清理并物理 GC 掉所有 2025-04-22 之后的 AGPL-3.0 提交与标签。
  2. 自主维护关键补丁:
    • Android 16KB 页面对齐:在根目录 Makefile 中加入 -Wl,--gc-sections,--as-needed,-z,max-page-size=16384,满足 Google Play / Android 15+ 要求。
    • Web 浏览器 WebSocket 断开码修复:在 internal/interaction/ws_js.go 中使用标准 websocket.StatusNormalClosure (1000),解决浏览器端主动断开报错。
    • 用户在线状态订阅 (Presence) 增强:在 internal/interaction/subscription.go 中保留 !slices.Equal 修复,并补齐 s.sub 集合状态记录,确保查询已订阅用户在线状态 (GetSubscribeUsersStatus) 与断线重连后自动恢复订阅完整可用。
    • “对方正在输入 (Typing)” 信令支持:完整保留 internal/conversation_msg/entering.go 中的 ChangeInputStates / GetInputStates 及 10 秒自动节流与超时过期机制。

2. 跨平台整体架构​


3. 三端文档快速导航​

平台核心产物与包名文档入口
iOS (Swift 5.9+)qxj.QXJIMSDK (Swift Registry + OpenIMCore.xcframework)iOS SDK 快速集成
Android (Kotlin / Java)com.qxj.im:core-sdk (16KB Page Aligned AAR) + io.openim:android-sdkAndroid SDK 快速集成
Web (Wasm / TypeScript)@qxj/im-wasm (NPM Registry / openIM.wasm + wasm_exec.js)Web SDK 快速集成
公共字典与错误码消息类型 ContentType、会话类型、全局错误码公共参考与错误码

4. iOS QXJIMSDK 架构对比(为什么抛弃旧版 Objective-C OpenIMSDK)​

对比维度旧版官方 OpenIMSDK (Objective-C)新版自研 QXJIMSDK (Pure Swift)
编程语言Objective-C (.h / .m 约 130 个文件)100% 纯 Swift 5.9+(6 个高内聚源文件)
JSON 序列化依赖第三方 MJExtension 运行时 ObjC 反射Swift 原生编译期 Codable (JSONEncoder / JSONDecoder)
构建配置要求强制要求宿主工程配置 Other Linker Flags = -ObjC无需 -ObjC,SwiftPM 自动链接 libresolv 与系统库
异步编程模型传统 Block 回调 (onSuccess, onFailure),易陷入回调地狱原生 async throws (CheckedContinuation)
实时事件分发单点 Delegate 代理或依赖 RxSwift 第三方库原生多播 AsyncStream (IMEventBroadcaster),零第三方依赖
跨语言内存安全需业务层手动持有 Callback 对象防止 Go 回调时野指针内置线程安全 CallbackRetainer,自动在 Go 执行期间强持有、回调结束即刻释放
功能覆盖度82 个基础接口(旧版 3.8.2 缺失 changeInputStates 等新接口)100% 覆盖 OpenIMCore 3.8.3+3 全部 96 个导出函数与 7 大监听器

5. Nexus 原生制品仓库统一分发矩阵 (https://nexus.test.qxjapp.com)​

所有跨平台编译产物均按各自生态系统的原生包管理器协议发布至测试服 Nexus(https://nexus.test.qxjapp.com),各端工程直接通过原生包管理器接入:

平台 / 制品Nexus 原生仓库类型原生包管理器坐标 / 仓库地址版本
iOS Swift SDK
(qxj.QXJIMSDK)
qxj-swift (Swift Registry SE-0292)
+ qxj-raw (XCFramework)
Registry:https://nexus.test.qxjapp.com/repository/qxj-swift/
依赖:.package(id: "qxj.QXJIMSDK", from: "3.8.3")
二进制:OpenIMCore.xcframework.zip
3.8.3
(3.8.3-patch.3)
Android AAR
(core-sdk / android-sdk)
maven-public (Maven2)仓库源:https://nexus.test.qxjapp.com/repository/maven-public/
坐标:com.qxj.im:core-sdk:3.8.3-patch.3、io.openim:core-sdk:3.8.3-patch3、io.openim:android-sdk:3.8.3.5
3.8.3-patch.3
3.8.3.5
Web Wasm SDK
(@qxj/im-wasm)
qxj-npm (NPM Registry)
+ qxj-raw (Raw)
Registry:https://nexus.test.qxjapp.com/repository/qxj-npm/
安装:bun add @qxj/im-wasm@3.8.3-patch.3
3.8.3-patch.3
文档站容器镜像
(qxj/im-docs)
qxj (Docker Registry)100.105.48.87:5001/qxj/im-docs:latestlatest / 3.8.3-patch.3