跳到主要内容

插入消息

SDK 支持在本地数据库中插入消息。本地插入的消息不会实际发送给服务器和对方。

提示

所有插入消息的 MessageTag 必须设置为 MessageTag.ISPERSISTED,否则报参数错误异常。

插入单条发送消息

在本地会话中插入一条消息,方向为发送。消息进入本地数据库,但不会发送给服务器和对方。不支持聊天室会话类型。以下示例使用 ChannelClient 下的 insertOutgoingMessage 方法。

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 可以选择合适的时机为消息设置扩展数据。详见消息扩展

参数类型说明
typeConversationType会话类型。
targetIdString会话 ID。
channelIdString超级群频道 ID。会话类型为单聊、群聊时传空字符串即可。
canIncludeExpansionboolean是否支持消息扩展。true 表示可扩展;false 表示不可扩展。
sentStatusMessage.SentStatus发送状态。
contentMessageContent消息内容。
sentTimelong消息的发送时间,Unix 时间戳(毫秒)。传 0 会按照本地时间插入。
callbackIRongCoreCallback.ResultCallback<Message>回调接口。

插入单条接收消息

本地会话中插入一条消息,方向为接收。消息不会实际发送给服务器和对方。不支持聊天室会话类型。

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) {

}
});
参数类型说明
conversationTypeConversationType会话类型。
targetIdStringTarget ID 用于标识会话,称为目标 ID 或会话 ID。注意,因为单聊业务中始终使用对端用户 ID 作为标识本端会话的 Target ID,因此在单聊会话中插入本端接收的消息时,Target ID 始终是单聊对端用户 ID。群聊、超级群的会话 ID 分别为群组 ID、超级群 ID。详见消息介绍中关于 Target ID 的说明。
senderUserIdString发送方的用户 ID。
receivedStatusMessage.ReceivedStatus接收状态。
contentMessageContent消息内容。
sentTimelong消息的发送时间,Unix 时间戳(毫秒)。传 0 会按照本地时间插入。
callbackIRongCoreCallback.ResultCallback<Message)>回调接口。

批量插入消息

在本地数据库批量插入消息。由于批量插入失败会导致整体插入失败,建议分批插入。该接口不支持聊天室会话类型,不支持超级群会话类型。

Message 的下列属性会被入库,其余属性会被抛弃:

  • UId:消息全局唯一 ID,消息成功收发后会带有由服务端生成的全局唯一 ID。SDK 从 5.3.5 开始支持入库该属性,该字段一般用于迁移数据。
  • conversationType:会话类型。
  • targetId:会话 ID。
  • messageDirection:消息方向。
  • senderUserId:发送者 ID。
  • receivedStatus:接收状态;如果消息方向为接收方且未调用 message.getReceivedStatus().setRead(),该条消息为未读消息。未读消息数会累加到会话的未读消息数上。
  • sentStatus:发送状态。
  • content:消息的内容。
  • sentTime:消息发送的 Unix 时间戳,单位为毫秒,会影响消息排序。
  • extra:消息的附加信息
RongCoreClient.getInstance().batchInsertMessage(messages, new IRongCoreCallback.ResultCallback<Message>() {
/**
* 成功回调
*/
@Override
public void onSuccess(Boolean success) {


}

/**
* 失败回调
* @param errorCode 错误码
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {

}
});
参数类型说明
messagesList<Message>要插入的消息数组。单次操作最多插入 500 条消息,建议单次插入 10 条。 注意,message 中必须包含正确有效的 sentTime(消息发送的 Unix 时间戳,单位为毫秒),否则无法通过获取历史消息接口从数据库中获取该消息。
callbackIRongCoreCallback.ResultCallback<Boolean>回调接口

批量插入消息提供以下重载方法,设置 enableChecktrue 后,SDK 会在插入时检查当前 UID 是否与数据库中 UID 重复,并移除重复项。注意,App 应自行保证插入的消息数组内部无重复的 UID。

    public abstract void batchInsertMessage(
final List<Message> messages,
boolean enableCheck,
final IRongCoreCallback.ResultCallback<Boolean> callback);