跳到主要内容
新版 Web IMKit SDKWeb IMKit SDK 从 5.36.0 版本开始升级了 UI 和 SDK 结构。如果您集成的版本低于 5.36.0,请参考旧版 Web IMKit 文档

事件监听

Web IMKit 对外提供了事件监听能力,同时允许开发者拦截并修改部分事件的处理逻辑,以覆盖默认行为,实现业务的定制化需求。

所有的对外事件类型定义,可通过 Web IMKit 对外常量 RCKitEvents 获取。

JavaScript
import { RCKitEvents } from '@rongcloud/im-kit';

添加事件监听

代码示例

JavaScript
// 以 RCKitEvents.ALERT_EVENT 事件举例
kitApp.addEventListener(RCKitEvents.ALERT_EVENT, (evt) => {
// evt 为 RCKitEvent 对象,包含事件的类型、数据等信息
const { data } = evt;
console.log('收到警告提示信息:', data);
});

参数

名称类型是否必需说明
eventTypeString事件类型,可通过 RCKitEvents 常量获取
listenerFunction事件监听器,接收一个 RCKitEvent 对象作为参数
thisObjObject事件监听器 this 指向

RCKitEvent 对象

所有事件监听器的回调函数,均接收一个 RCKitEvent 类或其子类对象作为参数,该对象包含了事件的类型、数据等信息。

阻断默认行为

RCKitEvent 示例中提供 preventDefault 方法,用以阻断 Web IMKit 默认行为的方法。

RCKitEvents.ALERT_EVENT 事件为例,当 Web IMKit 派发此事件时,您可以通过 RCKitEvent 对象获取到警告提示信息,并通过 preventDefault 方法阻断 Web IMKit 默认 UI 警告提示行为,转为使用业务层自定义的警告弹窗 UI 提示组件进行展示。

JavaScript
const listener = (evt) => {
const { data } = evt;
// 阻断 SDK 默认行为,SDK 内部将不再弹窗告警
evt.preventDefault();
// 使用业务层自定义的警告弹窗 UI 提示组件进行展示,以使整体业务 UI 风格统一
alert(data);
};

kitApp.addEventListener(RCKitEvents.ALERT_EVENT, listener);

发送结果

部分事件需要将结果返回给 Web IMKit,以便于 Web IMKit 内部进行后续处理,此时,您可以通过 RCKitEvent 对象的 sendResult 方法,将结果返回。

RCKitEvents.CONFIRM_EVENT 事件为例,该事件在会在 Web IMKit 中弹出内置确认弹窗供用户进行操作,并接收一个布尔值作为用户的选择结果。

您可以通过拦截该事件从而实现自定义弹窗 UI 组件,并通过 sendResult 方法将用户的确认结果返回给 Web IMKit,以便于 Web IMKit 内部进行后续处理。

JavaScript
const listener = (evt) => {
const { data } = evt;
// 阻断 SDK 默认行为,避免 SDK 使用内置 UI 弹窗
evt.preventDefault();
// 使用业务层自定义的确认弹窗 UI 提示组件进行展示,以使整体业务 UI 风格统一
confirm(data, (result) => {
// 将用户的确认结果返回给 SDK
evt.sendResult(result);
});
};

kitApp.addEventListener(RCKitEvents.CONFIRM_EVENT, listener);

sendResult 仅接受第一次调用时传入的参数作为处理结果,后续调用将被忽略。

移除事件监听

示例

JavaScript
kitApp.removeEventListener(RCKitEvents.ALERT_EVENT, listener);

参数说明

名称类型是否必需说明
eventTypeString事件类型,可通过 RCKitEvents 常量获取
listenerFunction事件监听器,接收一个 RCKitEvent 对象作为参数
thisObjObject事件监听器 this 指向

事件列表

RCKitEvents 常量中定义了 Web IMKit 对外提供的所有事件类型,您可以通过该常量获取事件类型。

派发模式介绍:

  • 0: (default)优先向业务层派发,业务层弱拦截后,将停止向 SDK 内部继续传递
  • 1: 向业务派发,同时向 SDK 内部派发,不受业务拦截影响,同时也不接收业务层的事件处理结果
  • 2: 仅向业务层派发,SDK 内部不处理
事件事件携带数据类型派发模式说明
ALERT_EVENTString0SDK 提示信息
CONFIRM_EVENTString0SDK 确认提示弹窗事件, 注意:该监听可接收业务层返回结果,接收结果类型: Boolean
DELETE_MESSAGE_MODAL_EVENTIRCKitModalDeleteMessage0消息撤回或删除确认弹窗, 注意:该监听可接收业务层返回结果,接收结果类型: IRCKitModalDeleteMessageResult
MEDIA_MESSAGE_MODAL_EVENTIRCKitCachedMessage0媒体消息弹框事件
COMBINE_MESSAGE_MODAL_EVENTIRCKitCachedMessage0合并转发消息弹框事件
FORWARDING_EVENTRCKitModalForwardingType0消息转发弹框事件 注意:该监听可接收业务层返回结果,接收结果类型: IRCKitModalForwardingResult
TAKE_PHOTO_MODAL_EVENT-0拍照弹框事件
UNSCHEDULED_MESSAGESIAReceivedMessage[]0接收到 SDK 内部无法处理的消息,业务层可通过监听该事件获取消息
CONVERSATION_EXTENSION_CLICKIRCKitConversationExtensionClick0会话面板业务拓展功能按钮点击事件
BEFORE_SYSTEM_CONVERSATION_OPENIRCKitCachedConversation2系统会话打开前的事件,业务层可通过监听该事件拦截系统会话打开,以自定义系统会话的打开方式
CONVERSATION_MENU_ITEM_CLICKIRCKitConversationMenuItemClick0会话菜单项点击事件
INPUT_MENU_ITEM_CLICKIRCKitInputMenuItemClick2输入框菜单点击事件
CONVERSATION_SELECTED{ conversation: IRCKitCachedConversation | null; focusInput?: boolean }1选中会话变更事件
CONVERSATION_ICON_CLICKIRCKitConversationIconClick2消息列表头像点击事件
CONVERSATION_NAVI_CLICKIRCKitCachedConversation2会话详情标题栏头像点击事件
MESSAGES_DELETEDIRCKitDeleteMessageData1消息删除事件
MESSAGE_MENU_ITEM_CLICKIRCKitMessageMenuItemClick0消息菜单点击事件
MESSAGE_LINK_CLICKIRCKitMessageLinkClick0文本消息中链接点击事件
DOWNLOAD_LINK_EVENTIRCKitCachedMessage0媒体消息点击下载事件
FILE_SEND_FAILED_EVENTFile[]0文件发送失败事件,一般是由于文件超出尺寸限制或为空文件导致
TOAST_EVENT{ message: string; showIcon?: boolean }0提示框显示事件