监听会议状态与处理错误
BIMMeetingListener 同时提供 Session 状态、会议邀请消息、会议状态消息和错误回调。监听器使用弱引用保存,应用需要强持有监听对象。
注册会议监听
objc
[[BIMManager sharedInstance] addMeetingListener:self];
- (void)onMeetingSession:(BIMMeetingSession *)session
snapshotChanged:(BIMMeetingSnapshot *)snapshot {
self.muteButton.selected = snapshot.localMediaState.isMicrophoneMuted;
self.cameraButton.selected = snapshot.localMediaState.isCameraEnabled;
if (snapshot.state == BIMMeetingSessionStateEnded) {
[session detachRenderView];
self.meetingSession = nil;
}
}
- (void)onMeetingSession:(BIMMeetingSession *)session
didFailWithCode:(BIMCallErrorCode)code
desc:(NSString *)desc {
NSLog(@"meeting error: %ld %@", (long)code, desc);
}页面或应用级监听器销毁时移除监听:
objc
[[BIMManager sharedInstance] removeMeetingListener:self];处理会议消息
objc
- (void)onMeetingInviteMessage:(BIMMeetingInviteMessage *)message {
NSLog(@"invite: %@ %@", message.meetingNumber, message.meetingName);
// 查询最新 BIMMeeting 后再决定是否展示加入入口。
}
- (void)onMeetingStatusMessage:(BIMMeetingStatusMessage *)message {
NSLog(@"status: %ld", (long)message.eventType);
}| 消息类型 | 来源 | 可用字段 |
|---|---|---|
BIMMeetingInviteMessage | TemplateBody / WORKPLUS_MEET | 名称、会议号、预约时间、入会链接 |
BIMMeetingStatusMessage | 音视频 Membership 消息 | WAITING、STARTED、CANCELED、ENDED、操作者和成员 |
两类消息仍会进入普通 BIMMsgListener 和消息存储。会议列表、通知和聊天 Cell 可以消费这些消息,但 Session UI 必须以 Snapshot 为准。
使用 Session 状态
| Session 状态 | UI 建议 |
|---|---|
Connecting | 保持加载,等待媒体连接 |
Connected | 开放媒体控制和会议计时 |
Reconnecting | 保留页面和 Session,显示重连 |
Ending | 禁用控制按钮 |
Ended | 卸载画面并释放业务引用 |
媒体参数获取或入会失败会以 1、2、4 秒退避自动重试最多 3 次。每次重试前 SDK 会重新查询会议详情并获取新的媒体参数;接入方不要缓存 token 或创建新的 Session。
处理常见错误
| 错误 | 场景 | 处理 |
|---|---|---|
BIMCallErrorInvalidArgument | 会议号、主题或预约时间无效 | 修正输入后重试 |
BIMCallErrorAlreadyActive | 已有 Call 或 Meeting Session | 返回现有音视频页面 |
BIMCallErrorInvalidState | Session 已结束仍控制媒体 | 禁用按钮并退出页面 |
BIMCallErrorMediaUnavailable | 只集成 Core 或运行时未加载 | 检查 BIMSdk/Call 集成 |
BIMCallErrorJoinRoomFailed | 媒体房间连接失败 | 展示 Reconnecting,等待自动重试 |
BIMCallErrorSignalingFailed | 创建、查询或操作请求失败 | 记录 desc,允许用户重试 |
完整错误码见音视频接入总览。
公共头文件不暴露 Jitsi 类型。宿主负责业务 UI、铃声,以及需要时的 PushKit/CallKit 集成。
