插入消息
IMLib SDK 支持在本地数据库中插入消息。本地插入的消息不会实际发送给融云服务器和对方。
提示
- 所有插入消息的 MessageTag 必须设置为
MessageTag.ISPERSISTED
,否则报参数错误异常。详见了解消息存储策略。 - 插入消息的接口仅将消息插入本地数据库,所以当 App 卸载重装或者换端登录时插入的消息不会从远端同步到本地数据库。
插入单条发送消息
您可以通过 insertOutgoingMessage:
接口在本地数据库插入一条对外发送的消息。以下示例使用 ChannelClient 下的 insertOutgoingMessage
方法。
提示
- 如果 sentTime 有问题会影响消息排序,请谨慎使用!
- 此接口不支持聊天室会话类型。
接口
Java
ChannelClient.getInstance().insertOutgoingMessage(conversationType, targetId, "", true, sentStatus, content, sentTime, callback);
参数说明
参数 | 类型 | 说明 |
---|---|---|
type | ConversationType | 会话类型。 |
targetId | String | 会话 ID。 |
channelId | String | 超级群频道 ID。会话类型为单聊、群聊时传空字符串即可。 |
canIncludeExpansion | boolean | 是否支持消息扩展。true 表示可扩展;false 表示不可扩展。 |
sentStatus | Message.SentStatus | 发送状态。 |
content | MessageContent | 消息内容。 |
sentTime | long | 消息的发送时间,Unix 时间戳(毫秒)。传 0 会按照本地时间插入。 |
callback | IRongCoreCallback.ResultCallback<Message> | 回调接口。 |
示例代码
Java
ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "会话 Id";
SentStatus sentStatus = SentStatus.SENT;
TextMessage content = TextMessage.obtain("这里是消息内容");
long sentTime = System.currentTimeMillis();
ChannelClient.getInstance().insertOutgoingMessage(conversationType, targetId, "", true, sentStatus, content, sentTime, new IRongCoreCallback.ResultCallback<Message>() {
/**
* 成功回调
* @param message 插入的消息
*/
@Override
public void onSuccess(Message message) {
}
/**
* 失败回调
* @param errorCode 错误码
*/
@Override
public void onError(IRongCoreEnum.CoreErrorCode errorCode) {
}
});
插入本地数据库的消息如需支持消息扩展功能,必须使用 ChannelClient 下的插入方法,否则无法打开消息的可扩展属性(canIncludeExpansion
)。本地插入消息时不支持设置消息扩展信息数据。App 可以选择合适的时机为消息设置扩展数据。详见消息扩展。
插入单条接收消息
您可以通过 insertIncomingMessage:
接口在本地数据库被插入一条接收的消息。
接口
Java
RongCoreClient.getInstance().insertIncomingMessage(conversationType, targetId, senderUserId, receivedStatus, content, sentTime, callback);
参数说明
参数 | 类型 | 说明 |
---|---|---|
conversationType | ConversationType | 会话类型。 |
targetId | String | Target ID 用于标识会话,称为目标 ID 或会话 ID。注意,因为单聊业务中始终使用对端用户 ID 作为标识本端会话的 Target ID,因此在单聊会话中插入本端接收的消息时,Target ID 始终是单聊对端用户 ID。群聊、超级群的会话 ID 分别为群组 ID、超级群 ID。详见消息介绍中关于 Target ID 的说明。 |
senderUserId | String | 发送方的用户 ID。 |
receivedStatus | Message.ReceivedStatus | 接收状态。 |
content | MessageContent | 消息内容。 |
sentTime | long | 消息的发送时间,Unix 时间戳(毫秒)。传 0 会按照本地时间插入。 |
callback | IRongCoreCallback.ResultCallback<Message)> | 回调接口。 |
示例代码
Java
ConversationType conversationType = ConversationType.PRIVATE;
String targetId = "会话 Id";
String senderUserId = "模拟发送方的 ID";
ReceivedStatus receivedStatus = new ReceivedStatus(0x1);
TextMessage content = TextMessage.obtain("这是一条插入数据");
long sentTime = System.currentTimeMillis();
RongCoreClient.getInstance().insertIncomingMessage(conversationType, targetId, senderUserId, receivedStatus, content, sentTime, new IRongCoreCallback.ResultCallback<Message>() {
/**
* 成功回调
* @param message 插入的消息
*/
@Override
public void onSuccess(Message message) {
}
/**
* 失败回调
* @param errorCode 错误码
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
}
});
插入单条消息
本地会话中插入一条消息,消息不会实际发送给服务器和对方。不支持聊天室会话类型。
接口
Java
ChannelClient.getInstance().insertMessage(message, callback);
参数说明
参数 | 类型 | 说明 |
---|---|---|
message | [Message] | 消息。 |
callback | IRongCoreCallback.ResultCallback<Message)> | 回调接口。 |
示例代码
Java
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
String targetId = "会话 Id";
String senderUserId = "模拟发送方的 ID";
Message.SentStatus sentStatus = Message.SentStatus.SENT;
Message.ReceivedStatus receivedStatus = new Message.ReceivedStatus(0x1);
TextMessage content = TextMessage.obtain("这是一条插入数据");
Message.MessageDirection direction = Message.MessageDirection.SEND;
long sentTime = System.currentTimeMillis();
Message message = Message.obtain(targetId, conversationType, content);
message.setSentTime(sentTime);
message.setReceivedStatus(receivedStatus);
message.setSenderUserId(senderUserId);
message.setSentStatus(sentStatus);
message.setMessageDirection(direction);
ChannelClient.getInstance().insertMessage(message, new IRongCoreCallback.ResultCallback<Message>() {
/**
* 成功回调
* @param message 插入的消息
*/
@Override
public void onSuccess(Message message) {
}
/**
* 失败回调
* @param e 错误码
*/
@Override
public void onError(IRongCoreEnum.CoreErrorCode e) {
}
});