获取历史消息
获取历史消息可以仅从本地数据中获取,仅从远端获取,和同时从本地与远端获取。
开通服务
从远端获取单群聊历史消息是指从融云服务端获取历史消息,该功能要求 App Key 已启用融云提供的单群聊消息云端存储服务。您可以在控制台 IM 服务管理页面为当前使用的 App Key 开启服务。如果使用生产环境的 App Key,请注意仅 IM 旗舰版或 IM 尊享版可开通该服务。具体功能与费用以融云官方价格说明页面及计费说明文档为准。
提示:请注意区分历史消息记录与离线消息?。融云针对单聊、群聊、系统消息默认提供最多 7 天(可调整)的离线消息缓存服务。客户端上线时 SDK 会自动收取离线期间的消息,无需 App 层调用 API。详见管理离线消息存储配置。
从本地数据库中获取消息
使用 getHistoryMessages
方法可分页查询指定会话存储在本地数据库中的历史消息,并返回消息对象列表。列表中的消息按发送时间从新到旧排列。
获取会话中所有类型的消息
RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, oldestMessageId, count,callback);
count
参数表示返回列表中应包含多少消息。oldestMessageId
参数用于控制分页的边界。每次调用 getHistoryMessages
方法时,SDK 会以 oldestMessageId
参数指向的消息为界,继续在下一页返回指定数量的消息。如果需要获取会话中最新的 count
条消息,可以将 oldestMessageId
设置为 -1。
建议获取返回结果中最早一条消息 的 ID,并在下一次调用时作为 oldestMessageId
传入,以便遍历整个会话的消息历史记录。
参数 | 类型 | 说明 |
---|---|---|
conversationType | ConversationType | 会话类型 |
targetId | String | 会话 ID |
oldestMessageId | long | 最后一条消息的 ID。如需查询本地数据库中最新的消息,设置为 -1 。 |
count | int | 每页消息的数量。 |
callback | ResultCallback<List<Message>> | 获取历史消息的回调,按照时间顺序从新到旧排列 |
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
String targetId = "会话 Id";
int oldestMessageId = -1;
int count = 10;
RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, oldestMessageId, count,
new RongIMClient.ResultCallback<List<Message>>() {
/**
* 成功时回调
* @param messages 获取的消息列表
*/
@Override
public void onSuccess(List<Message> messages) {
}
/**
* 错误时回调。
* @param e 错误码
*/
@Override
public void onError(RongIMClient.ErrorCode e) {
}
});
获取会话中指定类型的消息
RongIMClient.getInstance().getHistoryMessages(conversationType, targetId, objectName, oldestMessageId, count, callback);
count
参数表示返回列表中应包含多少消息。oldestMessageId
参数用于控制分页的边界。每次调用 getHistoryMessages
方法时,SDK 会以 oldestMessageId
参数指向的消息为界,继续在下一页返回指定数量的消息。如果需要获取会话中最新的 count
条消息,可以将 oldestMessageId
设置为 -1。objectName
参数指定需要获取的消息类型。
建议获取返回结果中最早一条消息的 ID,并在下一次调用时作为 oldestMessageId
传入,以便遍历整个会话的消息历史记录。
参数 | 类型 | 说明 |
---|---|---|
conversationType | ConversationType | 会话类型。 |
targetId | String | 会话 ID。 |
objectName | String | 消息类型标识。内置消息类型的标识可参见消息类型概述。 |
oldestMessageId | long | 最后一条消息的 ID。如需查询本地数据库中最新的消息,设置为 -1 。 |
count | int | 每页消息的数量。 |
callback | ResultCallback<List<Message>> | 获取历史消息的回调,按照时间顺序从新到旧排列。 |
通过消息 UID 获取消息
- SDK 从 5.2.5.2 版本开始支持通过 UID 批量获取消息的接口。仅在 ChannelClient 类中提供。支持的会话类型包括单聊、群聊、聊天室、超级群。
- 如果 SDK 版本低于 5.2.5.2,可以使用 RongCoreClient 类中的
getMessageByUId
方法,该方法一次仅支持传入一个 UID。
消息的 UID 是由融云服务端生成的全局唯一 ID。消息存入本地数据库后,App 可能需要再次提取特定消息。例如,您的用户希望收藏聊天记录中的部分消息,App 可以先记录消息的 UID,在需要展示时调用 getBatchLocalMessages
,传入收藏消息的 UID,从本地数据库中提取消息。
ChannelClient.getInstance().getBatchLocalMessages(conversationType, targetId, channelId, messageUIDs, callback);
只要持有消息 UID(messageUIDs
),并且本地数据库中已存有消息,即可以使用该方法从本地数据库提取消息。单次仅可从一个会话(targetId