Android

查询历史消息

更新时间: 2024/06/21 10:13:00

云信 IM SDK 支持查询圈组历史消息功能。

实现方法

查询历史消息

调用 getMessageHistory方法查询圈组历史消息。

其中 QChatGetMessageHistoryParam 必须传入需要查询消息所属的 ServerIdchannelId,查询范围由 fromTimetoTimelimit 共同决定,以先到为准。

同时可以设置排除查询的消息id,用于排除查询时起始时间锚点的消息。

  • 如果 fromTime 上有多条消息,可以通过 setExcludeMessageId(Long excludeMsgId) 来指定实际的起始时间为 excludeMsgId 对应的消息的下一条消息时间。
  • 如果fromTime到 toTime 之间消息大于 limit 条,返回 limit 条记录;如果小于 limit 条,返回实际条数;当已经查询到头时,返回的结果列表的 size 可能会比 limit 小。

toTime 如果设置为0则为当前时间。

默认返回逆序列表,可以通过 setReverse 设置是否反向。

如果17:00:00(fromTime )到18:00:00(toTime)的消息总共有200条,查询时最多返回100条。

  • 如果isReverse() ==false(即默认方式),则返回后100条,时间逆序排列,时间从新到旧。
  • 如果isReverse() ==true(反向方式),则前100条,时间正序排列,时间从旧到新。

当进行首次查询时,如果要查最新的100条,则fromTime=0, toTime=0, limit=0。

SDK 支持将发送失败的圈组消息缓存到本地数据库,可以通过 isIncludeLocalMessages() 指定查询结果是否包含发送失败的本地消息,默认不包含(false)。

java//默认查询指定Channel下最新的100条消息
NIMClient.getService(QChatMessageService.class).getMessageHistory(new QChatGetMessageHistoryParam(943445L,885305L)).setCallback(
        new RequestCallback<QChatGetMessageHistoryResult>() {
            @Override
            public void onSuccess(QChatGetMessageHistoryResult param) {
                //查询成功
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

根据消息 ID 批量查询历史消息

调用getMessageHistoryByIds,可根据消息的msgIdServer查询历史消息。查询结果不分页,一次最多查询 100 条。

该方法的入参结构QChatGetMessageHistoryByIdsParam中需要传入需要查询的serverIdchannelId和消息列表QChatMessageRefer。该方法的回参结构QChatGetMessageHistoryResult中返回查询到的消息列表。

示例代码

List<QChatMessageRefer> messageReferList = getMessageRefersList();
QChatGetMessageHistoryByIdsParam param = new QChatGetMessageHistoryByIdsParam(1607312,1492446,messageReferList);
NIMClient.getService(QChatMessageService.class).getMessageHistoryByIds(param).setCallback(
        new RequestCallback<QChatGetMessageHistoryResult>() {
            @Override
            public void onSuccess(QChatGetMessageHistoryResult param) {
                //查询成功,返回查询到的消息列表
                List<QChatMessage> messages = param.getMessages();
            }

            @Override
            public void onFailed(int code) {
                //查询失败,返回错误code
            }

            @Override
            public void onException(Throwable exception) {
                //查询异常
            }
        });

常见问题

当某用户查询圈组历史消息时,若返回 403 错误码。可能的原因包括但不限于:

403 都是没有权限的情况,因此可能是用户不在频道对应的圈组服务器中,或者该用户在圈组服务器中,但不在该私密频道中。

此外,若该频道的类型为 RTC,查询历史消息也会返回 403 错误码。

此文档是否对你有帮助?
有帮助
去反馈
  • 实现方法
  • 查询历史消息
  • 根据消息 ID 批量查询历史消息
  • 常见问题