事件监听
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);
});
参数
名称 | 类型 | 是否必需 | 说明 |
---|---|---|---|
eventType | String | 是 | 事件类型,可通过 RCKitEvents 常量获取 |
listener | Function | 是 | 事件监听器,接收一个 RCKitEvent 对象作为参数 |
thisObj | Object | 否 | 事件监听器 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);
参数说明
名称 | 类型 | 是否必需 | 说明 |
---|---|---|---|
eventType | String | 是 | 事件类型,可通过 RCKitEvents 常量获取 |
listener | Function | 是 | 事件监听器,接收一个 RCKitEvent 对象作为参数 |
thisObj | Object | 否 | 事件监听器 this 指向 |
事件列表
RCKitEvents
常量中定义了 Global IM UIKit 对外提供的所有事件类型,您可以通过该常量获取事件类型。
派发模式介绍:
- 0: (default)优先向业务层派发,业务层弱拦截后,将停止向 SDK 内部继续传递
- 1: 向业务派发,同时向 SDK 内部派发,不受业务拦截影响,同时也不接收业务层的事件处理结果
- 2: 仅向业务层派发,SDK 内部不处理
事件 | 事件携带数据类型 | 派发模式 | 说明 |
---|---|---|---|
ALERT_EVENT | String | 0 | SDK 提示信息 |
CONFIRM_EVENT | String | 0 | SDK 确认提示弹窗事件, 注意:该监听可接收业务层返回结果,接收结果类型: Boolean |
DELETE_MESSAGE_MODAL_EVENT | IRCKitModalDeleteMessage | 0 | 消息撤回或删除确认弹窗, 注意:该监听可接收业务层返回结果,接收结果类型: IRCKitModalDeleteMessageResult |
MEDIA_MESSAGE_MODAL_EVENT | IRCKitCachedMessage | 0 | 媒体消息弹框事件 |
COMBINE_MESSAGE_MODAL_EVENT | IRCKitCachedMessage | 0 | 合并转发消息弹框事件 |
FORWARDING_EVENT | RCKitModalForwardingType | 0 | 消息转发弹框事件 注意:该监听可接收业务层返回结果,接收结果类型: IRCKitModalForwardingResult |
UNSCHEDULED_MESSAGES | IAReceivedMessage | 0 | 接收到 SDK 内部无法处理的消息,业务层可通过监听该事件获取消息 |
CONVERSATION_EXTENSION_CLICK | IRCKitConversationExtensionClick | 0 | 会话面板业务拓展功能按钮点击事件 |
BEFORE_SYSTEM_CONVERSATION_OPEN | IRCKitCachedConversation | 2 | 系统会话打开前的事件,业务层可通过监听该事件拦截系统会话打开,以自定义系统会话的打开方式 |
CONVERSATION_MENU_ITEM_CLICK | IRCKitConversationMenuItemClick | 0 | 会话菜单项点击事件 |
INPUT_MENU_ITEM_CLICK | IRCKitInputMenuItemClick | 2 | 输入框菜单点击事件 |
CONVERSATION_SELECTED | IRCKitCachedConversation | 1 | 选中会话变更事件 |
CONVERSATION_ICON_CLICK | IRCKitConversationIconClick | 2 | 消息列表头像点击事件 |
MESSAGES_DELETED | IRCKitDeleteMessageData | 1 | 消息删除事件 |
MESSAGE_MENU_ITEM_CLICK | IRCKitMessageMenuItemClick | 0 | 消息菜单点击事件 |
MESSAGE_LINK_CLICK | IRCKitMessageLinckClick | 0 | 文本消息中链接点击事件 |
DOWNLOAD_LINK_EVENT | IRCKitCachedMessage | 0 | 媒体消息点击下载事件 |
FILE_SEND_FAILED_EVENT | File[] | 0 | 文件发送失败事件,一般是由于文件超出尺寸限制或为空文件导致 |