WuKongIM Docs

运行官方示例

用固定 WuKongIM revision 跑通 Web、Android、iOS 与 Flutter 的源码 example 和正式发布包。

编辑此页报告文档问题

本页记录两类可复现凭据。2026 年 8 月 31 日,四个官方仓库的源码 example 都已连接 WuKongIM 5676700d2dc966fa6fc9b2f0620a6ae429adad5a,服务端进程级 JSON-RPC E2E 也在该 revision 通过。9 月 1 日,从 npm、Maven Central、CocoaPods 与 pub.dev 解析的四个正式包连接 PR 最终 HEAD 1c9430f15fc8844e7025df07d54ab6e80e026414 的测试合并服务端 35f314cc2512f3f0f5d55d9677e817cb64129985,完成 Alice → Bob、Bob → Alice 与断开清理。

源码 example 与正式发布包是两类证据

源码运行证明精确仓库 revision,正式包运行证明 Registry 实际提供的归档。Web v2.0.4、Android v1.0.5 与 iOS v1.1.1 已包含先前验证的 example 和连接生命周期修复,Flutter 继续使用 v1.1.0;记录结果时仍要同时保留两类凭据。

已验证结果

正式发布包(2026-09-01)

平台正式包与发布源码构建与运行环境实际结果
Webeasyjssdk@2.0.4 · 9c03c98c725982fac224cd1d3b52456eae983975Chrome 151;托管 Node.js 对端浏览器与正式包对端的双向消息、SENDACK 和断开通过
Androidcom.githubim:easysdk-android:1.0.5 · 61ae6dc6d0077b15e47cda1fd530296b97a06a7aJDK 17、Android 14 / API 34 托管模拟器Maven 解析、instrumentation 双向消息和断开通过
iOSWuKongEasySDK 1.1.1 · ca688fcac2c4cd8d6f8e8163faf165376b520ba9CocoaPods 1.16.2、iOS SimulatorPod 解析、双向消息和断开通过
Flutterwukong_easy_sdk 1.1.0 · 98ab8f3d9a1ad53f40c32caef0979845a37ae9a6Flutter 3.41.4、iOS Simulatorhosted 依赖解析、双向消息和断开通过

Android、iOS 与 Flutter 的托管任务以及每项共用的 npm 2.0.4 对端见最终 HEAD 正式包验收运行

官方源码 example(2026-08-31)

平台官方 example 源码构建与运行环境实际结果
Weba055b3667247333b6b3183249f5d5929673dfd53Node.js 22.12、Chrome 151、macOS61 个测试通过,ESM/CJS 构建通过,浏览器双向消息、断开与重连通过
Android7134bbd0263fd01d9e7f71b7bd05b226f75b2292JDK 17、Gradle 8.4、Android 14 / API 34 模拟器Gradle 测试与 Debug 构建通过,双向消息、手动断开和心跳超时语义通过
iOS40014c16c0becd390c105098d359048901f4d87cXcode 16.2、iPhone 16 / iOS 18.3 Simulator30 个测试与 Release 构建通过,macOS/iOS 脚本通过,双向消息正文与时间显示正确
Flutter98ab8f3d9a1ad53f40c32caef0979845a37ae9a6 (v1.1.0)Flutter 3.41.4、Dart 3.11.1、iOS Simulator25 个测试与静态分析通过,官方 example 双向消息通过

服务端还通过了固定的进程级回归测试:

GOWORK=off go test -tags=e2e ./test/e2e/message/easy_sdk_jsonrpc \
  -count=1 -timeout 2m -p=1 -v

这份结果覆盖单节点集群、默认 256 个 Hash Slot、JSON-RPC CONNECT、Ping、SEND/SENDACK、RECV/RECVACK、在线双向消息和客户端清理。它不覆盖物理真机、WSS 代理、生产 Token 拒绝、离线同步、推送、多设备、容量或长期稳定性。

1. 启动同一版 WuKongIM

在一个终端中启动开发用单节点集群:

git clone https://github.com/WuKongIM/WuKongIM.git
cd WuKongIM
git checkout 5676700d2dc966fa6fc9b2f0620a6ae429adad5a
cp wukongim.toml.example wukongim.toml
go run ./cmd/wukongim -config ./wukongim.toml

另开终端检查就绪状态:

curl -fsS http://127.0.0.1:5001/readyz

默认开发入口是 Product HTTP http://127.0.0.1:5001 与 EasySDK WebSocket ws://127.0.0.1:5200。生产环境必须改用受保护的 HTTPS/WSS 入口。

2. 准备 Alice 与 Bob

由受信业务后端为两个用户准备各自的 uidtoken 和 WebSocket 地址。只在本机回环开发环境中,可以由受信终端调用 POST /user/token 建立测试身份。以下以两个原生客户端为例;如果某个用户由 Web example 登录,把该用户的 device_flag 改为 1

curl -fsS -X POST http://127.0.0.1:5001/user/token \
  -H 'Content-Type: application/json' \
  -d '{"uid":"alice","token":"alice-token","device_flag":0,"device_level":1}'

curl -fsS -X POST http://127.0.0.1:5001/user/token \
  -H 'Content-Type: application/json' \
  -d '{"uid":"bob","token":"bob-token","device_flag":0,"device_level":1}'

原生移动端使用 APP 0,Web 使用 WEB 1,桌面端使用 PC 2。当前默认产品装配不会因为这个接口返回成功就自动获得生产级 CONNECT Token 校验;无效、过期和撤销 Token 的拒绝必须由部署接入可信验证器后单独证明。

根据客户端运行位置填写 WebSocket 地址:

客户端本机开发地址
浏览器、Node.js、macOS App、iOS Simulatorws://127.0.0.1:5200
Android Emulatorws://10.0.2.2:5200
物理手机ws://<开发机局域网 IP>:5200,并确认防火墙与路由可达

3. 运行平台 example

Web

git clone https://github.com/WuKongIM/WuKongEasySDK-JS.git
cd WuKongEasySDK-JS
git checkout 9c03c98c725982fac224cd1d3b52456eae983975
npm ci
npm test
npm run build
python3 -m http.server 8080

打开 http://127.0.0.1:8080/example/。用两个隔离的浏览器上下文分别填写 Alice 与 Bob;不要在 Console 中打印 Token 或完整 Payload。

Android

git clone https://github.com/WuKongIM/WuKongEasySDK-Android.git
cd WuKongEasySDK-Android
git checkout 61ae6dc6d0077b15e47cda1fd530296b97a06a7a
./gradlew test :example:assembleDebug
./gradlew :example:installDebug

在 API 21+ 设备或模拟器中启动 example。Android Emulator 连接宿主机时使用 ws://10.0.2.2:5200,不是 localhost。需要两个原生身份时使用两台设备或两个独立模拟器;也可以让浏览器 example 作为另一端。

iOS 与 macOS

git clone https://github.com/WuKongIM/WuKongEasySDK-iOS.git
cd WuKongEasySDK-iOS
git checkout ca688fcac2c4cd8d6f8e8163faf165376b520ba9
swift test
swift build -c release
cd Examples/WuKongIMExample-Unified
./build.sh macos
./build.sh ios

先启动一个 iOS Simulator,再运行:

./build.sh ios --run

也可以用 ./build.sh macos --run 启动 macOS 版本。示例中的 iOS ATS 明文例外只用于本地 ws:// 开发,不能复制到生产 App。

Flutter

git clone https://github.com/WuKongIM/WuKongEasySDK-Flutter.git
cd WuKongEasySDK-Flutter
git checkout 98ab8f3d9a1ad53f40c32caef0979845a37ae9a6
flutter pub get
flutter analyze
flutter test
cd example
flutter pub get
flutter devices
flutter run -d <device-id>

为每个实际发布目标分别运行,不要用 iOS Simulator 结果替代 Android、Web 或桌面端验收。

当前 Web、Android 与 iOS 发布提交只在已验证源码之上修改版本、变更日志或发布说明,example 行为源码保持不变;Flutter 发布源码与先前验证 revision 相同。若要核对 8 月 31 日的精确源码凭据,使用上方“官方源码 example”表中的 revision。

4. 重跑正式包自动验收

仓库中的 Safety Automation - EasySDK Released Package Acceptance 会从四个 Registry 解析精确版本,构建当前 WuKongIM,再用正式 npm 包作为 Bob,分别在 Android API 34 与两个 iOS Simulator 任务中完成双向消息。需要重跑时可手动触发:

gh workflow run easysdk-release-acceptance.yml --ref main

工作流会检查 Gradle、Podfile.lock 与 Dart package config 的实际来源,避免本地源码依赖冒充正式包。真实浏览器仍应按 Web 教程单独验收。

5. 完成双向验收

  1. 两端都观察到连接成功,再启用发送按钮;
  2. Alice 向个人 Channel bob 发送 {"type":1,"content":"hello bob"}
  3. Alice 看到 SEND 完成,Bob 核对 fromUidchannelIdmessageId、正文和时间;
  4. Bob 向个人 Channel alice 回发,完成反向链路;
  5. 主动断开再连接,确认每次只发出一个连接/断开事件,消息监听没有重复;
  6. 停止服务端或断开网络,确认客户端在有界时间内进入失败或重连状态,而不是永久停在 Connecting;
  7. 退出页面或账号,移除监听器并执行平台对应的 disconnectdisposedestroy

发送成功、对端实时收到、对端展示和业务处理是四个不同状态。消息恢复和去重还要按消息收发单独设计。

常见问题

  • Android 模拟器连接失败:把 localhost 改为 10.0.2.2;真机改用开发机局域网地址。
  • 检出 tag 后现象与上表不同:先确认 git rev-parse HEAD 与包管理器锁文件都对应当前固定版本;不要让本地 pathproject(':') 或缓存依赖替代 Registry 产物。
  • SEND 成功但另一端没有消息:确认目标 Channel ID 就是对方 UID、两端都在线,且接收端没有因重复 listener 或错误去重丢弃 RECV。
  • iOS 或 Android 构建要求接受 License:先按本机 Xcode、Android SDK Manager 的提示接受对应 License 并下载目标 runtime,再重跑原命令。
  • 本地 Token 能连接:这不是生产鉴权凭据。继续验证错误、过期、撤销和重放 Token 都被可信验证器拒绝。

下一步

根据目标平台继续阅读 iOSAndroidFlutterWeb 快速接入,再用上线验收补齐 WSS、真机、离线、容量与回滚证据。

本页内容