SMeetingError,一个带语义的 Swift 枚举,同时提供跨端统一的整数错误码。
- 用
switch按语义分支处理 - 用
error.code拿到完整错误码,error.baseCode拿到低 3 位语义码,方便日志、工单与跨端对照 - 用
error.message拿到英文描述;error.localizedDescription输出"<code>: <message>" - RTC 层(采集、权限、推拉流)的错误以
SRTCError原样透传,见 SRTC 错误码
自 1.4.0 起错误码按跨端统一码表调整、报错文案改为英文。1.3.10 及以前的旧码与新码的对照见 更新日志。
错误清单
message 是给开发者和日志看的英文描述,给终端用户的提示请按 code / baseCode 自行映射,不要直接展示 message。
错误码规则
SMeetingError.code 返回的是完整错误码:
- 客户端错误:平台前缀 + 3 位低位码。iOS 前缀
203,macOS 前缀205 - 服务端透传错误(
apiError且服务端码不小于 1000)原样保留,不加前缀 - HTTP 状态码不会拼进错误码:HTTP 非 200 一律为
007(httpError),状态在httpStatus里
baseCode 是低 3 位语义码,与 Web / Android / 鸿蒙等端同义;服务端码的 baseCode 返回自身。
举例:
这样一眼就能区分「客户端自己拦下来的」和「服务端返回的」。
SMeetingError 实现了 CustomNSError:桥接成 NSError 后 domain = "cn.seastart.smeeting"、code 为完整码,ObjC / uni-app / Flutter 等走 NSError 的集成方可直接按码判断。
报错语言
meeting.language(如 "en"、"zh-CN",nil 跟随系统语言)与 meeting.srtc.language 是同一个进程级设置。会议层和 RTC 层请求后端时都带上 Accept-Language,后端业务错误(码 ≥ 1000)的文案随之返回中文或英文;SDK 自身的报错一律英文,不受影响。
unauthorized 的常见来源
这是最容易遇到的一个错误,几乎都来自房间策略:
建议在 UI 上根据
RoomInfo 提前把按钮置灰,而不是让用户点了才收到报错。
推荐的处理方式
- 除了
SMeetingError,RTC 层的SRTCError也会原样抛出,两类都要处理 - 面向最终用户的提示请按
baseCode映射成自己的文案;写日志时用error.localizedDescription,它带错误码 SMeetingError遵循Equatable,可以直接和具体 case 比较;它以库演进模式分发,后续版本可能新增 case,switch里请保留default分支
不会抛错的接口
以下接口设计成不抛错,可以放心直接调用,重复调用或状态不匹配时会被安全忽略:logout()exitRoom()closeMic()/closeCamera()/stopShare()disableIm()toggleRemoteAudioMute(_:)getRoomInfo()/getWhiteBoard()/getUsersInfo()/getUsersInfoList()/getRemoteVideoTrack(uid:desc:)/getDevices(kind:)