跳转到主要内容
SDK 对外抛出的错误类型是 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:)

相关页面