发送消息
IMKit 内置会话页面已实现了发送各类型消息的功能和 UI(部分消息类型需要插件支持)。当您在自定义页面需要发送消息时,可使用 IMKit 核心类 RongIM
下发送消息的方法。这些方法除了提供发送消息的功能外,还会触发 IMKit 内置页面的更新。
IMKit 支持发送普通消息和媒体类消息(参考消息介绍),普通消息父类是 MessageContent
,媒体消息父类是 MediaMessageContent
。发送媒体消息和普通消息本质的区别为是否有上传数据过程。
重要
- 请务 必使用 IMKit 核心类
RongIM
下发送消息的方法,否则不会触发页面刷新。发送普通消息使用sendMessage
方法,发送媒体消息使用sendMediaMessage
方法。- 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
构造消息
参考 构造消息
发送普通消息
发送消息前需要构造 Message 消息对象。消息的 content 属性中可包含两大类消息内容:普通消息内容和媒体消息内容。普通消息内容父类是 MessageContent,媒体消息内容父类是 MediaMessageContent。
调用 RongIM
的发送消息方法时,SDK 会触发内置的会话列表和会话页面的更新。
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private
conId.targetId = "targetId"
let textMsg = new TextMessage();
textMsg.content = "内容";
RongIM.getInstance().messageService().sendMessage(new Message(conId, textMsg))
.then(result => {
if (EngineError.Success !== result.code) {
// 发送消息失败
return;
}
if (!result.data) {
// 消息数据为空
return;
}
let msg = result.data as Message;
})
通过 sendMessage 方法,融云服务器始终会通知您的消息是否已发送成功。当因任何问题导致发送失败时,可通过回调方法返回异常。
发送媒体消息
媒体消息 Message
对象的 content
字段必须传入 [MediaMessageContent] 的子类对象,表示媒体消息内容。例如图片消息(ImageMessage
)、GIF 消息(GIFMessage
)等。其他内置媒体消息类型包括文件消息(FileMessage
)、高清语音消息(HQVoiceMessage
)、小视频消息(SightMessage
),建议先集成相应的 IMKit 插件。
关于 IMKit SDK 内置媒体消息类型以及构造使用,可以参照 媒体消息
发送媒体消息需要使用 sendMediaMessage
方法。SDK 会为图片、小视频等生成缩略图,根据默认压缩配置进行压缩,再将图片、小视频等媒体文件上传到融云默认的文件服务器(文件存储时长),上传成功之后再发送消息。图片消息如已设置为发送原图,则不会进行压缩。
调用 RongIM
的发送消息方法时,SDK 会根据发送状态同步更新内置的会话列表和会话页面。
let imageMessage = new ImageMessage();
imageMessage.isFull = true;
imageMessage.name = "name";
imageMessage.remoteUrl = "图片地址";
imageMessage.thumbnailBase64 = "缩略图Base64";
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "targetId";
await RongIM.getInstance().messageService().sendMediaMessage(
new Message(conId, imageMessage),
(msg: Message, progress: number) => {
// progress 消息进度
})
.then((result: IAsyncResult<Message>) => {
if (result.code == EngineError.Success) {
// 发送成功
} else {
// 发送失败
}
})
发送多媒体消息并且上传到自己的服务器
您可以直接发送您服务器上托管的文件。将媒体文件的 URL(表示其位置)作为参数,在构建媒体消息内容时传入。在这种情况下,您的文件不会托管在融云服务器上。当您发送带有远程 URL 的文件消息时,文件大小没有限制,您可以直接使用 sendMessage
方法发送消息。