IM 即时通讯
Android
开发指南

查询历史消息

更新时间: 2024/03/01 15:25:12

SDK 提供了查询消息历史的接口,可查询 fromTime 到 toTime 之间的最多 limit 条消息。这里 limit 指上限。

调用说明

API 原型

/**
 * 查询历史消息
 * @param param
 * @return InvocationFuture 可设置回调函数,监听操作结果。回调返回查询到的历史消息
 */
InvocationFuture<QChatGetMessageHistoryResult> getMessageHistory(@NonNull QChatGetMessageHistoryParam param);

其中 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)。

示例代码

//默认查询指定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) {
                //查询异常
            }
        });

常见问题

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

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

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

此文档是否对你有帮助?
有帮助
去反馈
  • 调用说明
  • 示例代码
  • 常见问题