发送消息
IMKit 内置会话页面已实现了发送各类型消息的功能和 UI(部分消息类型需要插件支持)。当您在自定义页面需要发送消息时,可使用 IMKit 核心类 IMCenter
或 RongIM
下发送消息的方法。这些方法除了提供发送消息的功能外,还会触发 IMKit 内置页面的更新。
IMKit 支持发送普通消息和媒体类消息(参考消息介绍),普通消息父类是 MessageContent,媒体消息父类是 MediaMessageContent。发送媒体消息和普通消息本质的区别为是否有上传数据过程。
重要
- 请务必使用 IMKit 核心类
IMCenter
或RongIM
下发送消息的方法,否则不会触发页面刷新。发送普通消息使用sendMessage
方法,发送媒体消息使用sendMediaMessage
方法。- 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
发送普通消息
发送消息前需要构造 Message
消息对象。消息的 content
字段中必须包含普通消息内容(即 MessageContent 的子类),如文本消息(TextMessage)。
调用 RongIM
或 IMCenter
的发送消息方法时,SDK 会触发内置的会话列表和会话页面的更新。
String targetId = "会话 Id";
ConversationType conversationType = ConversationType.PRIVATE;
TextMessage messageContent = TextMessage.obtain("消息内容");
Message message = Message.obtain(targetId, conversationType, messageContent);
IMCenter.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
@Override
public void onAttached(Message message) {
}
@Override
public void onSuccess(Message message) {
}
@Override
public void onError(Message message, RongIMClient.ErrorCode errorCode) {
}
});
sendMessage
中直接提供了用于控制推送通知内容(pushContent
)和推送附加信息(pushData
)的参数。不过,如果您需要更精细地控制离线推送通知,例如标题、内容、图标、或其他第三方厂商个性化配置,请使用消息推送属性进行配置,详见自定义消息推送通知。请注意,聊天室会话不支持离线消息机制,因此也不支持离线消息转推送。
- 如果发送的消息属于 SDK 内置消息类型,例如 TextMessage,这两个参数可设置为
null
。一旦消息触发离线推送通知时,融云服务端会使用各个内置消息类型默认的pushContent
值。关于各类型消息的默认推送通知内容,详见用户内容类消息格式。 - 如果消息类型为自定义消息类型,且需要支持离线推送通知,则必须向融云提供
pushContent
字段,否则用户无法收到离线推送通知。 - 如果消息类型为自定义消息类型,但不需要支持远程推送通知(例如通过自定义消息类型实现的 App 业务层操作指令),可将
pushContent
字段留空。 Message
的推送属性配置MessagePushConfig
的pushContent
和pushData
会覆盖此处配置,并提供更多配置能力,例如自定义推送通知的标题。详见自定义消息推送通知。
参数 | 类型 | 说明 |
---|---|---|
message | Message | 要发送的消息体。详见消息介绍 中对 Message 的结构说明。 |
pushContent | String | 修改或指定远程消息推送通知栏显示的内容。您也可以在 Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见下文自定义消息推送通知。
|
pushData | String | 远程推送附加信息。如果设置该字段,用户在收到远程推送消息时,能通过 io.rong.push.notification.PushNotificationMessage#getPushData() 方法获取。您也可以在 Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见下文自定义消息推送通知。 |
callback | ISendMessageCallback | 发送消息的回调 |
发送媒体消息
媒体消息 Message
对象的 content
字段必须传入 MediaMessageContent 的子类对象,表示媒体消息内容。例如图片消息(ImageMessage)、GIF 消息(GIFMessage)等。其他内置媒体消息类型包括文件消息(FileMessage)、位置消息(LocationMessage
)、高清语音消息(HQVoiceMessage)、小视频消息(SightMessage),建议先集成相应的 IMKit 插件。
图片消息内容(ImageMessage)支持设置为发送原图。
String targetId = "目标 ID";
ConversationType conversationType = ConversationType.PRIVATE;
Uri localUri = Uri.parse("file://图片的路径");//图片本地路径,接收方可以通过 getThumUri 获取自动生成的缩略图 Uri
boolean mIsFull = true; //是否发送原图
ImageMessage mediaMessageContent = ImageMessage.obtain(localUri, mIsFull);
Message message = Message.obtain(targetId, conversationType, mediaMessageContent);
发送媒体消息需要使用 sendMediaMessage
方法。SDK 会为图片、小视频等生成缩略图,根据默认压缩配置进行压缩,再将图片、小视频等媒体文件上传到融云默认的文件服务器(文件存储时长),上传成功之后再发送消息。图片消息如已设置为发送原图,则不会进行压缩。
调用 RongIM
或 IMCenter
的发送消息方法时,SDK 会根据发送状态同步更新内置的会话列表和会话页面。
IMCenter.getInstance().sendMediaMessage(message, null, null, new IRongCallback.ISendMediaMessageCallback() {
@Override
public void onProgress(Message message, int i) {
}
@Override
public void onCanceled(Message message) {
}
@Override
public void onAttached(Message message) {
}
@Override
public void onSuccess(Message message) {
}
@Override
public void onError(final Message message, final RongIMClient.ErrorCode errorCode) {
}
});
sendMediaMessage
中直接提供了用于控制推送通知内容(pushContent
)和推送附加信息(pushData
)的参数。不过,如果您需要更精细地控制离线推送通知,例如标题、内容、图标、或其他第三方厂商个性化配置,请使用消息推送属性进行配置,详见自定义消息推送通知。请注意,聊天室会话不支持离线消息机制,因此也不支持离线消息转推送。
- 如果发送的消息属于 SDK 内置的媒体消息类型,例如 ImageMessage,这两个参数可设置为
null
。一旦消息触发离线推送通知时,融 云服务端会使用各个内置消息类型默认的pushContent
值。关于各类型消息的默认推送通知内容,详见用户内容类消息格式。 - 如果消息类型为自定义消息类型,且需要支持离线推送通知,则必须向融云提供
pushContent
字段,否则用户无法收到离线推送通知。 - 如果消息类型为自定义消息类型,但不需要支持远程推送通知(例如通过自定义消息类型实现的 App 业务层操作指令),可将
pushContent
字段留空。 Message
的推送属性配置MessagePushConfig
的pushContent
和pushData
会覆盖此处配置,并提供更多配置能力,例如自定义推送通知的标题。详见自定义消息推送通知。
参数 | 类型 | 说明 |
---|---|---|
message | Message | 要发送的消息体。消息的 content 字段必须为媒体消息内容 MediaMessageContent。详见消息介绍 中对 Message 的结构说明。 |
pushContent | String | 修改或指定远程 消息推送通知栏显示的内容。您也可以在 Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见下文自定义消息推送通知。
|
pushData | String | 远程推送附加信息。如果设置该字段,用户在收到远程推送消息时,能通过 io.rong.push.notification.PushNotificationMessage#getPushData() 方法获取。您也可以在 Message 的推送属性(MessagePushConfig )中配置,会覆盖此处配置,详见下文自定义消息推送通知。 |
callback | ISendMediaMessageCallback | 发送多媒体消息的回调 |