跳到主要内容

事件监听

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

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

import { RCKitEvents } from '@rongcloud/global-im-uikit';

添加事件监听

代码示例

// 以 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 类或其子类对象作为参数,该对象包含了事件的类型、数据等信息。

preventDefault

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

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

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

kitApp.addEventListener(RCKitEvents.ALERT_EVENT, listener);

sendResult

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

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

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

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 仅接受第一次调用时传入的参数作为处理结果,后续调用将被忽略。

移除事件监听

示例

kitApp.removeEventListener(RCKitEvents.ALERT_EVENT, listener);

参数说明

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

事件列表

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

派发模式介绍:

  • 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
UNSCHEDULED_MESSAGESIAReceivedMessage0接收到 SDK 内部无法处理的消息,业务层可通过监听该事件获取消息
CONVERSATION_EXTENSION_CLICKIRCKitConversationExtensionClick0会话面板业务拓展功能按钮点击事件
BEFORE_SYSTEM_CONVERSATION_OPENIRCKitCachedConversation2系统会话打开前的事件,业务层可通过监听该事件拦截系统会话打开,以自定义系统会话的打开方式
CONVERSATION_MENU_ITEM_CLICKIRCKitConversationMenuItemClick0会话菜单项点击事件
INPUT_MENU_ITEM_CLICKIRCKitInputMenuItemClick2输入框菜单点击事件
CONVERSATION_SELECTEDIRCKitCachedConversation1选中会话变更事件
CONVERSATION_ICON_CLICKIRCKitConversationIconClick2消息列表头像点击事件
MESSAGES_DELETEDIRCKitDeleteMessageData1消息删除事件
MESSAGE_MENU_ITEM_CLICKIRCKitMessageMenuItemClick0消息菜单点击事件
MESSAGE_LINK_CLICKIRCKitMessageLinckClick0文本消息中链接点击事件
DOWNLOAD_LINK_EVENTIRCKitCachedMessage0媒体消息点击下载事件
FILE_SEND_FAILED_EVENTFile[]0文件发送失败事件,一般是由于文件超出尺寸限制或为空文件导致