文档导航
Android
SDK 版本:  5.X
公告:融云新文档中心已上线,欢迎到新文档中心阅读 Android IMLibAndroid IMKit 的文档。

插入消息

更新时间:2024-02-06 PDF

插入消息

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

        }
    });
              
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

插入本地数据库的消息如需支持消息扩展功能,必须使用 ChannelClient 下的插入方法,否则无法打开消息的可扩展属性(canIncludeExpansion)。本地插入消息时不支持设置消息扩展信息数据。App 可以选择合适的时机为消息设置扩展数据。详见消息扩展

参数 类型 说明
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> 回调接口。

插入单条接收消息

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

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

        }
 });
              
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

参数 类型 说明
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)> 回调接口。

批量插入消息

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

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

        }
 });
              
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

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

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

    public abstract void batchInsertMessage(
            final List<Message> messages,
            boolean enableCheck,
            final IRongCoreCallback.ResultCallback<Boolean> callback);
              
已复制
1
2
3
4

文档反馈
意见反馈

您的改进建议

意见反馈

问题类型

联系我们

提交工单

技术支持|集成使用|产品方案


商务咨询

7 x 24 小时

为您解答方案与报价问题

131 6185 6839

文档反馈