获取历史消息
- 如果您的应用/环境在 2022.10.13 日及以后开通超级群服务,超级群业务中会包含一个 ID 为
RCDefault
的默认频道。如果发消息时不指定频道 ID,则该消息会发送到RCDefault
频道中。在获取RCDefault
频道的历史消息时,需要传入该频道 ID。- 如果您的应用/环境在 2022.10.13 日前已开通超级群服务,在发送消息时如果不指定频道 ID,则该消息不属于任何频道。获取历史消息时,如果不传入频道 ID,可获取不属于任何频道 的消息。融云支持客户调整服务至最新行为。该行为调整将影响客户端、服务端收发消息、获取会话、清除历史消息、禁言等多个功能。如有需要,请提交工单咨询详细方案。
获取本地与远端历史消息
getMessages 方法先从本地获取历史消息,本地有缺失的情况下会从服务端同步缺失的部分。当本地没有更多消息的时候,会从服务端拉取。
interface IGetMessageCallbackEx{
void onComplete(List<Message> messageList, long syncTimestamp, boolean hasMoreMsg, IRongCoreEnum.CoreErrorCode errorCode);
void onFail(IRongCoreEnum.CoreErrorCode errorCode);
}
public void getMessages(final Conversation.ConversationType conversationType, final String targetId, final String channelId, final HistoryMessageOption historyMessageOption, final IRongCoreCallback.IGetMessageCallbackEx callback)
参数 | 类型 | 说明 |
---|---|---|
conversationType | ConversationType | 会话类型 |
targetId | String | 会话 ID |
channel | String | 超级群频道 ID |
historyMsgOption | HistoryMessageOption | 获取历史消息的配置选项。 |
callback | IRongCoreCallback.IGetMessageCallback<List<Message>> | 获取历史消息的回调。 |
-
HistoryMessageOption
说明:参数 说明 dataTime 时间戳,用于控制分页查询消息的边界。默认值为 0
。count 要获取的消息数量。如果 SDK < 5.4.1,范围为 [2-20];如果 SDK ≧ 5.4.1,范围为 [2-100];默认值为 5
。pullOrder 拉取顺序。 DESCEND
:降序,按消息发送时间递减的顺序,获取发送时间早于dataTime
的消息,返回的列表中的消息按发送时间从新到旧排列。ASCEND
: 升序,按消息发送时间递增的顺序,获取发送时间晚于dataTime
的消息,返回的列表中的消息按发送时间从旧到新排列。
从本地数据库中获取消息
使用 getHistoryMessages
方法可分页查询指定会话存储在本地数据库中的历史消息,并返回消息对象列表。列表中的消息按发送时间从新到旧排列。
获取指定消息 ID 前的消息
异步获取会话中,从指定消息之前、指定数量的最新消息实体,返回消息实体 Message
对象列表。
public abstract void getHistoryMessages(
final Conversation.ConversationType conversationType,
final String targetId,
final int oldestMessageId,
final int count,
final String channelId,
final IRongCoreCallback.ResultCallback<List<Message>> callback);
count
参数表示返回列表中应包含多少消息。oldestMessageId
参数用于控制分页的边界。每次调用 getHistoryMessages
方法时,SDK 会以 oldestMessageId
参数指向的消息为界,继续在下一页返回指定数量的消息。如果需要获取会话中最新的 count
条消息,可以将 oldestMessageId
设置为 -1。
建议获取返回结果中最早一条消息的 ID,并在下一次调用时作为 oldestMessageId
传入,以便遍历整个会话的消息历史记录。
参数 | 类型 | 说明 |
---|---|---|
conversationType | ConversationType | 会话类型。 |
targetId | String | 会话 ID。 |
oldestMessageId | long | 最后一条消息的 ID。如需查询本地数据库中最新的消息,设置为 -1 。 |
count | int | 每页消息的数量。 |
channelId | String | 超级群频道 ID。 |
callback | ResultCallback<List<Message>> | 获取历史消息的回调,按照时间顺序从新到旧排列。 |
获取指定时间戳前后的消息
提示
超级群业务从 5.4.5 开始支持该功能。
获取会话中指定时间戳之前之后、指定数量的最新消息实体,返回消息实体 Message
对象列表。
public abstract void getHistoryMessages(
final Conversation.ConversationType conversationType,
final String targetId,
final String channelId,
final long sentTime,
final int before,
final int after,
final IRongCoreCallback.ResultCallback<List<Message>> resultCallback);
参数 | 类型 | 说明 |
---|---|---|
conversationType | ConversationType | 会话类型。 |
targetId | String | 会话 ID。 |
channelId | String | 超级群频道 ID。 |
timestamp | long | 以此时间戳为界,获取早于或晚于该时间的历史消息。 |
before | int | 需要获取的发送时间早于指定时间戳的消息数量。 |
after | int | 需要获取的发送时间晚于指定时间戳的消息数量。 |
callback | ResultCallback<List<Message>> | 获取历史消息的回调,按照时间顺序从新到旧排列。 |