跳到主要内容

版本:5.X

获取历史消息(Electron)

提示

开通服务

从远端获取单群聊历史消息是指从融云服务端获取历史消息,该功能要求 App Key 已启用融云提供的单群聊消息云端存储服务。您可以在控制台 IM 服务管理页面为当前使用的 App Key 开启服务。如果使用生产环境的 App Key,请注意仅 IM 旗舰版IM 尊享版可开通该服务。具体功能与费用以融云官方价格说明页面及计费说明文档为准。

提示:请注意区分历史消息记录与离线消息?。融云针对单聊、群聊、系统消息默认提供最多 7 天(可调整)的离线消息缓存服务。客户端上线时 SDK 会自动收取离线期间的消息,无需 App 层调用 API。详见管理离线消息存储配置

从本地数据库中获取消息

获取单条本地消息

通过调用 electronExtension.getLocalMessage 接口,可根据消息的 messageIdmessageUId 从本地数据库中查询并返回完整的消息数据。

提示
  • SDK ≥ 5.16.0 版本支持。
  • 该接口支持两种类型的参数:numberstring
    • 如果参数为 number 类型,则会将其视为 messageId,并根据 messageId 从本地数据库中查询消息。
    • 如果参数为 string 类型,则会将其视为 messageUId,并根据 messageUId 从本地数据库中查询消息。

接口

JavaScript
RongIMLib.electronExtension.getLocalMessage(messageUId);

参数说明

注意

该方法支持两种参数类型:

  • 当参数为 number 类型时,将视为 messageId,按消息 ID 查询本地消息。
  • 当参数为 string 类型时,将视为 messageUId,按消息唯一 ID 查询本地消息。
参数类型必填说明
messageUIdstring 或 number消息标识

示例代码

JavaScript

const messageUId = 'BS4O-P5AO-D1O6-9GPP';
const res = await RongIMLib.electronExtension.getLocalMessage(messageUId);
console.info('获取消息结果:', res);

获取会话中所有类型的消息

调用 getHistoryMessages 可拉取指定会话内的历史消息记录。

接口

JavaScript
RongIMLib.getHistoryMessages(conversation, option)

参数说明

参数类型必填说明
conversationIConversationOption目标会话
optionGetHistoryMessageOption配置参数
  • GetHistoryMessageOption 说明
    参数类型说明
    timestampnumber(可选)分页查询的时间边界。根据 order 决定查询早于或晚于该时间戳的消息,传 0 表示从当前时间开始。
    countnumber( 可选)每次获取的消息数量。SDK < 5.7.4 范围为 [1-20],SDK ≥ 5.7.4 范围为 [1-100],默认值为 20
    ordernumber(可选)查询方向:0 表示降序(从 timestamp 向前查找消息),1 表示升序(从 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)
}
})

获取会话中指定类型的消息

调用 electronExtension.getHistoryMessagesByMessageTypes 方法,可拉取某个会话中指定类型的历史消息。

接口

JavaScript
RongIMLib.electronExtension.getHistoryMessagesByMessageTypes(conversation, option)

参数说明

参数类型必填说明
conversationIConversationOption目标会话
optionGetHistoryMessageOption配置参数

示例代码

JavaScript
const conversation = {
conversationType: RongIMLib.ConversationType.PRIVATE,
targetId: "<目标用户Id>"
}

// 从当前时间开始向前查询
const options = {
timestamp: 0,
count: 20,
order: 0,
messageTypes: ['RC:TxtMsg']
}

RongIMLib.electronExtension.getHistoryMessagesByMessageTypes(conversation, option).then(res => {
if (res.code === 0) {
// res.data.messages 从 5.6.1 开始废弃,5.6.1 及之后版本请使用 res.data.list
console.log(res.data.list)
console.log(res.data.hasMore)
} else {
console.log(res.code, res.msg)
}
})

获取远端历史消息

调用 getRemoteHistoryMessages 方法,可拉取指定会话中的远端历史消息记录。

接口

JavaScript
RongIMLib.getRemoteHistoryMessages(conversation, option)

参数说明

参数类型必填说明
conversationIConversationOption目标会话
optionGetHistoryMessageOption配置参数

示例代码

JavaScript
const conversation = {
conversationType: RongIMLib.ConversationType.PRIVATE,
targetId: "<目标用户Id>"
}

// 从当前时间开始向前查询
const option = {
timestamp: 0,
count: 20,
order: 0
}

RongIMLib.getRemoteHistoryMessages(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)
}
})

获取本地与远端历史消息

调用 getContinuousMessages 方法,可拉取指定会话中的连续的消息记录(包含本地消息和远端消息)。

提示

getContinuousMessages 方法与 getRemoteHistoryMessages 的不同之处在于:

  • 优先查询本地数据库中的消息;
  • 若本地消息不足以满足查询条件,将继续从远端查询,确保返回一组连续、相邻的消息列表。

接口

JavaScript
RongIMLib.getContinuousMessages(conversation, option)

参数说明

参数类型必填说明
conversationIConversationOption目标会话
optionGetHistoryMessageOption配置参数
注意

如果您想继续查询更多历史消息,建议使用 res.data.timestamp 作为下次调用的 option.timestamp

示例代码

JavaScript
const conversation = {
conversationType: RongIMLib.ConversationType.PRIVATE,
targetId: "<目标用户Id>"
}

// 从当前时间开始向前查询
const option = {
timestamp: 0,
count: 20,
order: 0
}

RongIMLib.electronExtension.getContinuousMessages(conversation, option).then(res => {
if (res.code === 0) {
console.log(res.data.list)
console.log(res.data.hasMore)
// 如果您想继续查询更多历史消息,建议使用 res.data.timestamp 作为下次调用的 option.timestamp
console.log(res.data.timestamp)
} else {
console.log(res.code, res.msg)
}
})