跳到主要内容

监听聊天室事件通知

提示

SDK 从 5.18.0 版本开始支持监听聊天室事件通知。

应用程序可以监听当前聊天室中成员禁言、封禁相关的通知,以及当前用户在其他端加入、退出聊天室相关的通知。

聊天室事件监听器直接在 RCIMIWEngine 实例上设置。

Dart
// 获取引擎实例
RCIMIWEngine? engine = RCIMIWEngine.getInstance();

// 多端登录聊天室同步事件回调
engine?.onChatRoomNotifyMultiLoginSync = (RCIMIWChatRoomSyncEvent? event) {
// 处理多端登录同步事件
if (event != null) {
print('聊天室多端同步事件: chatroomId=${event.chatroomId}, status=${event.status}, reason=${event.reason}');
}
};

// 聊天室成员封禁/解封事件回调
engine?.onChatRoomNotifyBlock = (RCIMIWChatRoomMemberBlockEvent? event) {
// 处理聊天室成员封禁/解封事件
if (event != null) {
print('聊天室成员封禁事件: chatroomId=${event.chatroomId}, type=${event.operateType}');
}
};

// 聊天室成员禁言/解除禁言事件回调
engine?.onChatRoomNotifyBan = (RCIMIWChatRoomMemberBanEvent? event) {
// 处理聊天室成员禁言/解除禁言事件
if (event != null) {
print('聊天室成员禁言事件: chatroomId=${event.chatroomId}, banType=${event.banType}');
}
};

// 如果不再需要监听,可以将回调设置为 null
// engine?.onChatRoomNotifyMultiLoginSync = null;
// engine?.onChatRoomNotifyBlock = null;
// engine?.onChatRoomNotifyBan = null;
回调方法触发时机说明
onChatRoomNotifyMultiLoginSync(RCIMIWChatRoomSyncEvent? event)在用户多端登录的情况下,在其他客户端加入、退出聊天室接收在当前客户端上用户加入、退出聊天室的事件
onChatRoomNotifyBlock(RCIMIWChatRoomMemberBlockEvent? event)用户所在聊天室中发生了封禁、解除封禁相关的事件是否接收通知取决于调用服务端封禁、解封的相关 API 时是否指定了 needNotifytrue
onChatRoomNotifyBan(RCIMIWChatRoomMemberBanEvent? event)用户所在聊天室中发生了禁言、解除禁言相关的事件是否接收通知取决于调用服务端封禁、解封的相关 API 时是否指定了 needNotifytrue

多端登录事件通知

在用户多端登录的情况下,在其他客户端加入、退出聊天室时,触发 onChatRoomNotifyMultiLoginSync(RCIMIWChatRoomSyncEvent? event) 方法。

触发场景通知范围说明
用户多端登录,在一台设备上加入聊天室当前加入的用户当前用户在一端加入聊天室时,其他端的在线设备上会接收通知,不在线的设备不会通知。返回数据包括:聊天室 ID、加入时间。
用户多端登录,在一台设备上退出聊天室当前退出的用户当前用户在一端退出聊天室时,其他端的在线设备上会接收通知,不在线的设备不会通知。 返回数据包括:聊天室 ID、退出时间。
用户多端登录且已在聊天室中,加入一个新的聊天室导致被踢出上一个聊天室当前用户,和被踢出的聊天室所有成员如果在控制台开通了单个用户加入多个聊天室,则不会通知。返回数据包括:聊天室 ID、被踢出的时间。

RCIMIWChatRoomSyncEvent 具体属性定义如下:

属性类型说明
chatroomIdString?聊天室 ID。
statusRCIMIWChatRoomSyncStatus?变更的状态,quit(0):离开。join(1):加入。
reasonRCIMIWChatRoomSyncStatusReason?如果 statusquit 的情况,区分离开类型:leaveOnMyOwn(1) 表示自己主动离开。otherDeviceLogin(2) 表示多端加入互踢导致离开。如果 statusjoin 的情况,无需关心 reason 值。
timeint?用户加入/退出/被踢的时间戳,精确到毫秒。
extraString?附加信息。

封禁相关事件通知

用户所在聊天室发生了封禁、解封的事件,且调用相关 Server API 时指定了需要通知(指定 needNotifytrue),触发 onChatRoomNotifyBlock(RCIMIWChatRoomMemberBlockEvent? event) 方法。

触发场景通知范围说明
封禁聊天室用户聊天室中所有成员返回数据包括:聊天室 ID、被封禁用户的 ID 列表、封禁时间与持续时长、附加信息。
解除封禁聊天室用户被解除封禁的成员返回数据包括:聊天室 ID、当前用户 ID、附加信息。

RCIMIWChatRoomMemberBlockEvent 具体属性定义如下:

属性类型说明
chatroomIdString?聊天室 ID。
operateTypeRCIMIWChatRoomOperateType?封禁类型。deblock(0) :解封。blocked(1):封禁。
durationTimeint?封禁时长,单位为毫秒,最大值为 43200分钟(1个月), 最小值 1分钟。 operateTypeblocked 时,该字段有效。
operateTimeint?操作时间戳(毫秒)。
userIdListList<String>?被封禁的用户 ID 列表。解封时为当前用户 ID。
extraString?附加信息。

禁言相关事件通知

用户所在聊天室发生了禁言、解除禁言相关的事件,且调用相关 Server API 时指定了需要通知(指定 needNotifytrue),触发 onChatRoomNotifyBan(RCIMIWChatRoomMemberBanEvent? event) 方法。

触发场景通知范围说明
禁言指定聊天室用户聊天室中所有成员返回数据包括:聊天室 ID、被封禁用户的 ID 列表、禁言时间与持续时长、附加信息。
取消禁言指定聊天室用户聊天室中所有成员返回数据包括:聊天室 ID、被封禁用户的 ID 列表、解除禁言时间、附加信息。
设置聊天室全体禁言聊天室中所有成员返回数据包括:聊天室 ID、禁言时间、附加信息。
取消聊天室全体禁言聊天室中所有成员返回数据包括:聊天室 ID、解除禁言时间、附加信息。
加入聊天室全体禁言白名单聊天室中所有成员返回数据包括:聊天室 ID、被添加白名单的用户 ID 列表、设置白名单时间、附加信息。
移出聊天室全体禁言白名单聊天室中所有成员返回数据包括:聊天室 ID、被移出白名单的用户 ID 列表、移出白名单时间、附加信息。
全局禁言用户被全局禁言的用户返回数据包括:聊天室 ID、禁言时间与持续时长、附加信息。
取消全局禁言用户被解除全局禁言的用户返回数据包括:聊天室 ID、解除禁言时间、附加信息。

RCIMIWChatRoomMemberBanEvent 具体属性定义如下:

属性类型说明
chatroomIdString?聊天室 ID。
banTypeRCIMIWChatRoomMemberBanType?聊天室禁言/解除禁言操作类型枚举
durationTimeint?禁言时长,单位为毫秒:最大值为 43200 分钟(1个月),最小值1分钟。 banType 为禁言类型时,该字段有效。
operateTimeint?操作时间戳(毫秒)。
userIdListList<String>?被封禁的用户 ID 列表。解封时为当前用户 ID。
extraString?附加信息。