获取历史消息
开通服务
从远端获取单群聊历史消息是指从融云服务端获取历史消息,该功能要求 App Key 已启用融云提供的单群聊消息云端存储服务。您可以在控制台 IM 服务的服务购买页面为当前使用的 App Key 开启服务。如果使用生产环境的 App Key,请注意仅 IM 旗舰版或 IM 尊享版可开通该服务。具体功能与费用以融云官方价格说明页面及计费说明文档为准。
提示:请注意区分历史消息记录与离线消息?。融云针对单聊、群聊、系统消息默认提供最多 7 天(可调整)的离线消息缓存服务。客户端上线时 SDK 会自动收取离线期间的消息,无需 App 层调用 API。详见管理离线消息存储配置。
获取历史消息
提示
由于 Web 端不具备本地持久化存储能力,无法在本地保存历史消息记录与会话列表,因此需要通过融云服务端获取数据。请确保已开通单群聊消息云端存储服务。
调用 getHistoryMessages 可以拉取指定会话的历史消息记录。
接口
JavaScript
RongIMLib.getHistoryMessages(conversation, option)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| conversation | IConversationOption | 是 | 目标会话 |
| option | GetHistoryMessageOption | 否 | 获取历史消息配置项 |
-
GetHistoryMessageOption 说明
参数 类型 说明 timestamp number (可选项)用于控制分页查询消息的边界。查询以此时间戳为基准,根据 order决定查询早于或晚于该时间戳的消息。timestamp传0表示从当前时间开始获取。count number (可选项)获取消息的数量。如果 SDK < 5.7.4,范围为 [1-20];如果 SDK ≧ 5.7.4,范围为 [1-100]。默认值 20。order number (可选项)查询消息的方向,值为 0或1。0表示降序,即按消息发送时间(timestamp)递减的顺序,获取发送时间早于 timestamp 的消息。1表示升序,即按消息发送时间(timestamp)递增的顺序,获取发送时间晚于 timestamp 的消息。
代码示例
JavaScript
const conversation = {
conversationType: RongIMLib.ConversationType.PRIVATE,
targetId: "<目标用户Id>"
}
// 从当前时间开始向前查询
const option = {
timestamp: 0,
count: 20,
order: 0
}
RongIMLib.getHistoryMessages(conversation, option).then(res => {
if (res.code === 0) {
console.log(res.data.list)
console.log(res.data.hasMore)
} else {
console.log(res.code, res.msg)
}
})
按消息 UID 批量查询消息
从 5.38.0 开始,SDK 支持通过 getMessagesByUIds 接口按消息 UID 批量查询消息。该接口适用于引用回复、收藏消息、跳转定位后补齐原消息等场景。
如果消息携带 quoteInfo 引用关系信息,接收端可以读取 quoteInfo.messageUId,再调用该接口查询被引用消息的原始内容数据。
接口
JavaScript
RongIMLib.getMessagesByUIds(params)
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| conversationIdentifier | IConversationOption | 是 | 消息所属会话。 |
| messageUIds | string[] | 是 | 需要查询的消息 UID 列表。 |
代码示例
JavaScript
const quoteInfo = message.quoteInfo;
if (quoteInfo) {
const res = await RongIMLib.getMessagesByUIds({
conversationIdentifier: {
conversationType: message.conversationType,
targetId: message.targetId,
},
messageUIds: [quoteInfo.messageUId],
});
if (res.code === RongIMLib.ErrorCode.SUCCESS) {
console.log(res.data);
} else {
console.log(res.code, res.msg);
}
}