SDK 版本与兼容
契约当前为 IDL v1.0.0(冻结修订 35),兼容策略是 additive-only:v1.x 只新增可选字段/枚举值/接口/事件/错误码,不改名、不改语义、不删除、不改数值。本页说明各端交付状态、升级步骤与破坏性变更的处理方式。
兼容规则
- v1.x 仅允许新增可选字段、新增枚举值、新增接口/事件/错误码
- 禁止改名/改语义/删除/改数值;破坏性变更走 v2
- manifest 哈希与 changelog 必须随变更同步更新
| 变更类型 | v1.x 允许 | 客户端影响 |
|---|---|---|
| 新增可选字段 | 允许 | 旧客户端忽略未知字段;新客户端需容错缺省 |
| 新增枚举值 | 允许 | 旧客户端遇到未知枚举值必须降级展示,不能崩溃 |
| 新增接口/事件/错误码 | 允许 | 旧 SDK 不认识新事件时忽略;错误码按“未知码”兜底 |
| 改名/改语义/删除/改数值 | 禁止(走 v2) | 必须按 v2 迁移指南升级 |
平台交付状态
| 平台 | 包 / 模块 | 绑定状态 | 说明 |
|---|---|---|---|
| web | @ni-paas/im-web | ga(已交付) | 可用 |
| flutter | impaas_imlib / impaas_imkit | ga(已交付) | 可用 |
| native | im-sdk (crate) + libim_sdk | ga(已交付) | 可用 |
| android | io.nipaas.imlib / io.nipaas.imkit | ga(已交付) | 可用 |
| electron | @ni-paas-im/electron | ga(已交付) | 可用 |
| ios | ImpIaaSIM(Swift Package) | ga(已交付) | 已实现并验证:Swift + Objective-C 双接口,Xcode/iOS 模拟器真实构建运行,端到端连接 ni-paas-im 服务端。 |
| harmony | @ni-paas-im/harmony(预留包名,当前版本未发布) | reserved(契约预留) | 契约已备、未实现:本文件只有 ArkTS 签名映射,无源码、无构建、无运行证据。 |
| macos | @ni-paas-im/electron-macos | ga(已交付) | macOS 桌面端与融云一致以 Electron 交付:主进程 IMLib + 本地 SQLite,渲染进程 IMKit;本机真实构建、启动、连接、收发与打包 .app 验证。 |
升级步骤
- 查运行时契约
GET /api/__contract/introspect(需管理员密钥)返回运行时 operation/事件/错误码;与 SDK 版本对照。 - 升级 SDK
按各平台「导入 SDK」页更新依赖;Web/Flutter 的
RcResult与错误码常量以冻结契约为准。 - 处理破坏性变更
早期 Web SDK 1.x 的
ErrorCode数值与契约不一致(例如 3001/3003 语义互换);2.0 起已校正。升级时必须改用语义常量判断,不要依赖数字。 - 回归验证
连接/重连、收发消息、会话列表、聊天室 join、推送 token 注册、错误码分支;用契约校验器确认运行时与文档一致。
- 灰度发布
按用户/设备灰度;保留旧版本回滚包。
JavaScript
// 错误码判断:永远用语义常量,不要写数字
import { ErrorCode } from '@ni-paas/im-web';
if (error.code === ErrorCode.SDK_NETWORK_ERROR) retryLater(); // 3003
else if (error.code === ErrorCode.SDK_NOT_CONNECTED) reconnect(); // 3001
else if (error.code === ErrorCode.SDK_TIMEOUT) retryLater(); // 3002
else if (error.code === ErrorCode.INVALID_TOKEN) logout(); // 1002不要跨大版本混用
SDK 版本、服务端运行时与文档必须对应同一契约修订。混用旧 SDK + 新服务端通常仍可用(additive-only),但错误码语义与新增能力可能不一致;上线前以运行时自省结果为准。
版本信息在哪里看
| 入口 | 内容 |
|---|---|
| 更新日志 | IDL 冻结修订与文档中心变更 |
| 各平台「更新日志」页 | 平台绑定里程碑与契约修订历史 |
| 状态码与错误码 | 按契约生成的全量码表 |
GET /api/__contract/introspect | 运行时真实契约(operation/事件/错误码/服务) |