注册与注销
所有会议事件都通过SMeetingDelegate 上报:
delegates是弱引用多播,可以注册多个观察者,SDK 不会因为注册而延长你的对象生命周期- 协议里所有方法都有默认空实现,只实现关心的事件即可
- 不再需要时调用
meeting.delegates.remove(delegate:) - 回调统一在主线程派发,可以直接更新 UI
@MainActor 类型,协议方法需要声明为 nonisolated,再在里面回到主 actor 上下文:
连接事件
DisconnectEventData 的 reason 是 DisconnectReason,可据此区分是自己走的还是被动断开;error 在异常断开时携带底层错误。
成员事件
媒体状态事件里的
byAdmin 为 true 时表示这次变化是主持人操作导致的,opUid 是操作者。你可以据此给用户一个「已被主持人关闭麦克风」这类提示。
UserHandupEventData.step 区分是哪一步:.request 举手、.cancel 取消、.confirmOpen 同意邀请、.rejectOpen 拒绝邀请。
房间状态事件
屏幕共享的
roomShareDidStart 会在共享广播和远端画面两个条件都满足后才上报,收到时可以直接渲染共享画面。
当主持人开启「全体静音」或「全体禁画」时,非主持人成员的本地设备会被 SDK 自动关闭,并额外上报一次对应的成员媒体状态事件。
消息事件
两者都有
isPrivate 标记是否为私聊,uid 是发送者。
主持人指令事件
处理方式见 举手与开启请求。
等候室事件
分组讨论事件
这三个事件都需要你自行完成「退出当前会议、进入目标会议」的切换。
签到与点名事件
外设事件
外设事件不依赖会议状态,SDK 实例创建后就开始上报,可用于入会前的设备检测页面。
会议外消息事件
需要先调用enableIm(),见 会议外消息。
这几个连接事件与前面的会议连接事件是两条独立通道,不要混用。
事件标识枚举
SDK 另外公开了两个枚举,列出各事件的字符串标识:RoomEventType—— 会议内事件标识,例如user_enter、room_share_startImEventType—— 会议外消息事件标识,例如call_calling
SMeetingDelegate 方法,这两个枚举在正常接入中用不到,只在你需要做日志埋点或与其它端对齐事件命名时才有用。