监听聊天室事件
聊天室业务为客户端 App 提供三种类型的事件监听器:聊天室状态监听器、聊天室成员变化监听器、聊天室事件通知监听器。
通过 SDK 提供的以上监听 器,客户端 App 可以从融云服务端获取聊天室销毁状态、用户在当前及其他客户端加入退出聊天室的状态、聊天室中成员进出的事件通知、以及聊天室中成员禁言、封禁相关的信息。
监听器 | 名称 | 说明 |
---|---|---|
ChatroomStatusListener | 聊天室状态监听器 | 接收在当前客户端登录的用户加入、退出聊天室的事件与聊天室销毁状态的信息。 |
ChatroomMemberActionListener | 聊天室成员变化监听器 | 接收当前用户所在聊天室中其他用户加入、退出聊天室的信息。 |
ChatroomNotifyEventListener | 聊天室事件通知监听器 | 接收当前所在聊天室中成员禁言、封禁相关的信息;接收当前用户在其他端加入、退出聊天室相关的信息。 |
监听聊天室状态
应用程序可以监听当前客户端上用户加入、退出聊天室的事件与聊天室销毁状态变更。
使用 setChatroomStatusListener
来设置聊天室状态监听器。
let listener: ChatroomStatusListener = {
onChatroomJoining(roomId: string): void {
hilog.info(0x0000, 'IM-App', 'onChatroomJoining roomId:%{public}s', roomId);
},
onChatroomJoined(roomId: string, info: ChatroomJoinedInfo): void {
hilog.info(0x0000, 'IM-App', 'onChatroomJoined roomId:%{public}s info:%{public}s', roomId,
JSON.stringify(info));
},
onChatroomJoinFailed(roomId: string, code: EngineError): void {
hilog.info(0x0000, 'IM-App', 'onChatroomJoined roomId:%{public}s code:%{public}d', roomId, code);
},
onChatroomQuited(roomId: string): void {
hilog.info(0x0000, 'IM-App', 'onChatroomQuited roomId:%{public}s', roomId);
},
onChatroomDestroyed(roomId: string, type: ChatroomDestroyType): void {
hilog.info(0x0000, 'IM-App', 'onChatroomDestroyed roomId:%{public}s type:%{public}d', roomId, type);
},
}
IMEngine.getInstance().setChatroomStatusListener(listener);
监听聊天室成员变化
提示
SDK 从 1.1.0 版本开始支持监听聊天室成员变化。
从 1.1.0 版本,SDK 开始新增 ChatroomMemberActionListener,支持当前登录用户监听所在聊天室中其它成员的加入、退出行为。
开通服务
您可以在融云控制台,通过应用配置>IM 服务>免费基础功能>聊天室>聊天室成员变化监听,开启此功能。开启后,用户加入、退出聊天室后,系统会使用消息的方式向聊天室中的其他成员发送回调通知,消息量会因此增加。
设置聊天室成员变化监听器
let listener: ChatroomMemberActionListener = {
onMemberChange: (actionModel: ChatRoomMemberActionModel): void => {
hilog.info(0x0000, 'IM-App', 'onMemberChange actionModel:%{public}s', JSON.stringify(actionModel));
}
}
IMEngine.getInstance().setChatroomMemberListener(listener);
如果当前用户由于网络原因和聊天室断开连接,则无法监听到断开连接期间的其他成员的加入、退出行为。
监听聊天室事件通知
提示
SDK 从 1.1.0 开始支持监听聊天室事件通知。
应用程序可以监听当前聊天室中成员禁言、封禁相关的通知,以及当前用户在其他端加入、退出聊天室相关的通知。
let listener: ChatroomNotifyEventListener = {
onChatroomNotifyMultiLoginSync: (syncEvent: ChatroomSyncEvent): void => {
hilog.info(0x0000, 'IM-App', 'onChatroomNotifyMultiLoginSync syncEvent:%{public}s', JSON.stringify(syncEvent));
},
onChatroomNotifyBlock: (blockEvent: ChatroomMemberBlockEvent): void => {
hilog.info(0x0000, 'IM-App', 'onChatroomNotifyBlock blockEvent:%{public}s', JSON.stringify(blockEvent));
},
onChatRoomNotifyBan: (banEvent: ChatroomMemberBanEvent): void => {
hilog.info(0x0000, 'IM-App', 'onChatRoomNotifyBan banEvent:%{public}s', JSON.stringify(banEvent));
}
}
IMEngine.getInstance().setChatroomNotifyEventListener(listener);
回调方法 | 触发时机 | 说明 |
---|---|---|
onChatroomNotifyMultiLoginSync | 在用户在多端登录情况下,在其他客户端加入、退出聊天室 | 接收在当前客户端上用户加入、退出聊天室的事件 |
onChatroomNotifyBlock | 用户所在聊天室中发生了禁言、解除禁言相关的事件 | 是否接收通知取决于调用服务端封禁、解封的相关 API 时是否指定了 needNotify 为 true 。 |
onChatRoomNotifyBan | 用户所在聊天室发生了封禁用户、解除封禁相关的事件 | 是否接收通知取决于调用服务端封禁、解封的相关 API 时是否指定了 needNotify 为 true 。 |
多端登录事件通知
在用户在多端登录情况下,在其他客户端加入、退出聊天室时,触发 onChatroomNotifyMultiLoginSync
方法。
触发场景 | 通知范围 | 说明 |
---|---|---|
用户多端登录,在一台设备上加入聊天室 | 当前加入的用户 | 当前用户在一端加入聊天室时,其他端的在线设备上会接收通知,不在线的设备不会通知。返回数据包括:聊天室 ID、加入时间。 |
用户多端登录,在一台设备上退出聊天室 | 当前退出的用户 | 当前用户在一端退出聊天室时,其他端的在线设备上会接收通知,不在线的设备不会通知。 返回数据包括:聊天室 ID、退出时间。 |
用户多端登录且已在聊天室中,加入一个新的聊天室导致被踢出上一个聊天室 | 当前用户,和被踢出的聊天室所有成员 | 如果在控制台开通了单个用户加入多个聊天室,则不会通知。返回数据包括:聊天室 ID、被踢出的时间。 |
ChatRoomSyncEvent
具体属性定义 如下:
/**
* 聊天室同步事件,事件发生时,当前用户在线时能收到该事件
* @discussion 事件发生时,当前用户不在线,那么用户上线后,不会收到该事件。
* @version 1.1.0
*/
class ChatroomSyncEvent {
/**
* 聊天室 ID
*/
chatroomId: string = "";
/**
* 同步通知的变更状态
*/
status: ChatroomSyncStatus;
/**
* status 是 Quit 的情况, reason 区分离开类型: LeaveOnMyOwn,自己主动离开, OtherDeviceLogin,多端加入互踢导致离开
*
* status 是 Join 的情况,无需关心 reason 值
*/
reason: ChatroomSyncStatusReason;
/**
* 用户加入/退出/被踢的时间戳,精确到毫秒
*/
time: number;
/**
* 附加信息
*/
extra: string = "";
}