收发消息
本文介绍了如何使用 IMLib SDK 接收跟发送超级群消息,超级群收发消息需要使用 RongCoreClient 下的方法。
前置条件
建议先阅读超级群概述和超级群私有频道概述,了解在 App 业务中如何使用频道和超级群频道功能特性。
- 通过服务端 API 创建超级群
- 通过服务端 API 创建频道,或使用默认频道 channelId
RCDefault
- 通过服务端 API 将发送方用户加入超级群
- 如不确定发送方是否在超级群中,请通过服务端 API 查询用户是否为群成员
- 如向超级群私有频道中发送消息,请确认已通过服务端 API 添加私有频道成员
当用户在当前频道聊天页面发送与接收消息时,需要同时检查超级群 targetId 和频道 channelId。如果超级群 targetId 和频道 channelId 和当前频道聊天页面对应,才能在当前频道页面进行展示处理,否则就不处理。如果消息出现在其他聊天页面,一般是因为超级群 ID 或者频道 ID 发生错误。
接收消息
超级群会话消息的接收方法跟单群聊会话的消息接口方法一致,具体如何使用请参考接收消息。
超级群会话没有离线消息,如果想获取用户离线时候的消息需要您根据超级群会话最后一条消息去获取历史消息。
构造消息对象
在发送消息前,需要构造 Message 对象,消息的 conversationType
字段必须填写超级群业务的会话类型 ConversationType.ULTRA_GROUP
。消息的 targetId
字段表示超级群 ID,channelId
表示超级群频道 ID。
IMLib SDK 定义的 Message 属性中可包含两大类消息内容:普通消息内容和媒体消息内容。
普通消息内容父类是 MessageContent
的子类,例如文本消息(TextMessage)。
String targetId = "超级群 ID";
ConversationType conversationType = Conversation.ConversationType.ULTRA_GROUP;
String channelId = "超级群频道 ID";
TextMessage messageContent = TextMessage.obtain("测试超级群");
Message message = Message.obtain(targetId, conversationType, channelId, messageContent);
媒体消息内容指 MediaMessageContent
的子类,例如图片消息(ImageMessage)、GIF 消息(GIFMessage)等。
String targetId = "超级群 ID";
ConversationType conversationType = Conversation.ConversationType.ULTRA_GROUP;
String channelId = "超级群频道 ID";
Uri localUri = Uri.parse("file://图片的路径");//图片本地路径,接收方可以通过 getThumUri 获取自动生成的缩略图 Uri
boolean mIsFull = true; //是否发送原图
ImageMessage mediaMessageContent = ImageMessage.obtain(localUri, mIsFull);
Message message = Message.obtain(targetId, conversationType, channelId, mediaMessageContent);
- 发送普通消息请使用
sendMessage
方法,发送媒体消息请使用sendMediaMessage
方法。 - 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
- 如果您的应用/环境在 2022.10.13 日及以后开通超级群服务,超级群业务中会包含一个 ID 为
RCDefault
的默认频道。如果发消息时不指定频道 ID,则该消息会发送到RCDefault
频道中。 - 如果您的应用/环境在 2022.10.13 日前已开通超级群服务, 在发送消息时如果不指定频道 ID,则该消息不属于任何频道。融云支持客户调整服务至最新行为。该行为调整将影响客户端、服务端收发消息、获取会话、清除历史消息、禁言等多个功能。如有需要,请提交工单咨询详细方案。
发送普通消息
普通消息指文本消息、引用消息等不涉及媒体文件上传的消息。普通消息的消息内容为 MessageContent
的子类的消息,例如文本消息内容(TextMessage),或自定义类型的普通消息内容。
String targetId = "目标 ID";
ConversationType conversationType = ConversationType.ULTRA_GROUP;//超级群会话类型
String channelId = "目标频道 ID";
TextMessage content = TextMessage.obtain("这是一条文本消息");
Message message = Message.obtain(targetId, conversationType, channelId, content);
发送超级群普通消息需要使用 RongCoreClient 中的提供的 sendMessage
方法。
接口
RongCoreClient.getInstance().sendMessage(message, pushContent, pushData, callback);
参数说明
参数 | 类型 | 说明 |
---|---|---|
message | Message | 要发送的消息实体,在消息实体中必须指定会话类型(conversationType ),目标 ID(targetId ),消息内容(messageContent )。详见消息介绍。 |
pushContent | String | 修改或指定远程消息推送通知栏显示的内容。您也可以在 Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见自定义消息推送通知。
|
pushData | String | 远程推送附加信息。对端收到远程推送消息时,可通过以下方法获取该字段内容:
Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见自定义消息推送通知。 |
callback | ISendMessageCallback | 发送媒体消息的回调 |
示例代码
RongCoreClient.getInstance().sendMessage(message, null, null, new IRongCoreCallback.ISendMessageCallback() {
@Override
public void onAttached(Message message) {
}
@Override
public void onSuccess(Message message) {
}
@Override
public void onError(Message message, IRongCoreEnum.CoreErrorCode errorCode) {
}
});
- 关于如何个性化配置接收方离线时收到的远程推送通知,详见下文远程推送通知。
- 自定义消息类型默认不支持离线消息转推送机制。如需支持,详见下文自定义消息如何支持远程推送。
发送媒体消息
媒体消息 Message
对象的 content
字段必须传入 MediaMessageContent 的子类对象,表示媒体消息内容。例如图片消息内容(ImageMessage)、GIF 消息内容(GIFMessage),或继承自 MediaMessageContent 的自定义媒体消息内容。
图片消息(ImageMessage)支持设置为发送原图。
String targetId = "目标 ID";
ConversationType conversationType = ConversationType.ULTRA_GROUP;//超级群会话类型
String channelId = "目标频道 ID";
Uri localUri = Uri.parse("file://图片的路径");//图片本地路径,接收方可以通过 getThumUri 获取自动生成的缩略图 Uri
boolean mIsFull = true; //是否发送原图
ImageMessage mediaMessageContent = ImageMessage.obtain(localUri, mIsFull);
Message message = Message.obtain(targetId, conversationType, channelId, mediaMessageContent);
向超级群中发送媒体消息需要使用 RongCoreClient 中的 sendMediaMessage
方法。SDK 会为图片、小视频等生成缩略图,根据默认压缩配置进行压缩,再将图片、小视频等媒体文件上传到融云默认的文件服务器(文件存储时长),上传成功之后再发送消息。图片消息如已设置为发送原图,则不会进行压缩。
接口
RongCoreClient.getInstance().sendMediaMessage(message, pushContent, pushData, callback);
参数说明
参数 | 类型 | 说明 |
---|---|---|
message | Message | 要发送的消息实体,在消息实体中必须指定会话类型(conversationType ),目标 ID(targetId ),消息内容(messageContent )。详见消息介绍。 |
pushContent | String | 修改或指定远程消息推送通知栏显示的内容。您也可以在 Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见自定义消息推送通知。
|
pushData | String | 远程推送附加信息。对端收到远程推送消息时,可通过以下方法获取该字段内容:
Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见自定义消息推送通知。 |
callback | ISendMediaMessageCallback | 发送媒体消息的回调 |