自定义消息
IMKit 支持自定义消息类型,并通过 IMKit 发送、接收和展示自定义消息。
注册自定义消息
注册消息是发送自定义消息的关键步骤,如不注册则无法发送自定义消息。
在建立 IM 连接之前,使用 imkit
实例的 registerMessageType
方法来注册自定义消息,该方法会返回自定义消息构造函数。
// registerMessageType 中参数设置需要按照参数说明顺序传递。不可改变顺序,
// 例如:如需发送状态消息 searchProp 参数不可不设置,可设置为 []
const PersonMessage = imkit.registerMessageType('kit:person', true, true);
参数 | 类型 | 说明 | 是否必传 |
---|---|---|---|
messageType | string | 消息类型。请勿使用 RC: 开头的类型名,以免和 SDK 默认的消息名称冲突。如需多端互通(例如 Web 端与 Android、iOS 等移动端互通消息),注册的消息类型名必须保持多端一致,否则无法互通。 | 是 |
isPersited | boolean | 是否存储。 | 是 |
isCounted | boolean | 是否计数。 | 是 |
searchProp | string[] | 搜索字段,web 端无需设置,搜索字段值设置为数字时取值范围为 (-Math.pow(2, 64), Math.pow(2, 64)) 且为整数 | 否 |
isStatusMessage | boolean | 是否是状态消息。状态消息不存储、不计数,接收方在线时才能收到 | 否 |
提示
注意事项:
- 注册消息类型(
imkit.registerMessageType
)必须在connect
之前调用,必须放在发送、接收该自定义消息之前。 - 推荐将所有注册自定义消息代码放在
init
方法之后。 - 请尽量把应用中所有涉及到的自定义消息一次性统一注册,且同类型消息仅 调用一次注册。
发送自定义消息
应用程序注册自定义消息后,可获取自定义消息体构造函数。在发送自定义消息前,使用该函数构建自定义消息体,例如 new PersonMessage({})
。消息属性 key 可自定义,保持多端一致即可。
// 如已引入可忽略
import { ConversationType } from '@rongcloud/imlib-next'
// PersonMessage 中的属性需要多端保持一致,可根据用户侧需要进行定义。
const message = new PersonMessage({ key1: 'value1', key2: 'value2' })
const option = null;
const conversation = {
conversationType: ConversationType.PRIVATE,
targetId: "<targetId>",
};
imkit.sendMessage(conversation, message, option).then(res => {
console.info('发送消息结果:',res);
})
参数 | 说明 | 必传 |
---|---|---|
conversation | 消息发送目标会话信息 | 是 |
message | 待发送的消息内容,通过 new 自定义消息得到消息实例 | 是 |
options | 定义发送行为中的一些可选项,如是否可拓展,推送等 | 否 |
-
conversation
参数 类型 说明 必传 conversationType ConversationType 会话类型 是 targetId string 接收方 Id 是 -
options
提示
options 为可选项,options 中所有属性均为可选项,非必传。
参数 | 类型 | 说明 |
---|---|---|
isStatusMessage | boolean | 是否为状态消息 |
disableNotification | boolean | 是否发送静默消息 |
pushContent | string | Push 信息 |
pushData | string | Push 通知携带的附加信息 |
isMentioned | boolean | 是否为 @ 消息,只当 conversationType 值为 ConversationType.GROUP 时有效 |
directionalUserIdList | string[] | 用于发送群定向消息,只当 conversationType 值为 ConversationType.GROUP 时有效 |
isVoipPush | boolean | 当对方为 iOS 设备且未在线时,其将收到 Voip Push. 此配置对 Android 无影响 |
canIncludeExpansion | boolean | 是否允许消息被拓展 |
expansion | [key: string]: string | 消息拓展内容数据 |
isFilerWhiteBlacklist | boolean | 黑/白名单 |
pushConfig | IPushConfig | 移动端推送配置(与 Android、iOS 端的 MessagePushConfig 作用相似) |
设置自定义消息展示样式
应用程序需要在 IMKit SDK 初始化时传入 customMessage
对象实例,在该实例中设置自定义消息的样式。SDK 在会根据初始化时在 设置好的样式展示已发送或接收的自定义消息。
// 构造 IMKit 初始化参数
const customMessage = {
// 普通消息展示
userMessage: {
// key 为自定义消息的 messageType,return 的元素中暂不支持设置 class,如需设置样式可设置为行内样式。
'kit:person': (message) => {
const content = message.content;
return `<div style='padding: 0.5em 0.8333em;'>来自 ${content.name} 的好友请求</div>`;
}
},
// 通知类消息展示
notifyMessage: {
// key 为自定义消息的 messageType,return 的元素中暂不支持设置 class,如需设置样式可设置为行内样式。
'kit:notify': (message) => {
const content = message.content
const string = `<div>来自 ${content.name} 的好友请求</div>`
return string;
}
},
// 会话最后一条消息展示
lastMessage:{
// key 为自定义消息的 messageType,return 的元素中暂不支持设置 class,如需设置样式可设置为行内样式。
'kit:person': (message) => {
const content = message.content;
return `[好友请求]`;
},
'kit:notify': (message) => {
const content = message.content
const string = `[不带头像好友请求]`
return string;
}
}
};
// 特别注意:此处 init 仅为展示自定义消息设置,应用内不需要多次进行初始化
imkit.init({
customMessage:customMessage
});
提示
特别注意:
- 此处示例代码中的 init 调用仅为展示自定义消息设置,应用内不需要多次进行初始化。
- 存在自定义消息但未设置展示格式,会导致消息无法展示或展示为空。
customMessage
中传入的对象可包含以下参数:
参数 | 说明 |
---|---|
userMessage | 普通消息展示 |
notifyMessage | 通知类消息展示 |
lastMessage | 会话列表最后一条消息展示 |
上述参数所对应的展示位置可参见下图:
提示
如存在自定义消息但未设置展示格式,会导致消息无法展示或展示为空。