查询历史消息
更新时间: 2024/06/21 10:13:00
云信 IM SDK 支持查询圈组历史消息功能。
实现方法
查询历史消息
调用 getMessageHistory
方法查询圈组历史消息。
其中 QChatGetMessageHistoryParam
必须传入需要查询消息所属的 ServerId
和 channelId
,查询范围由 fromTime
、toTime
和 limit
共同决定,以先到为准。
同时可以设置排除查询的消息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
中需要传入需要查询的serverId
、channelId
和消息列表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 错误码。