获取历史消息
开通服务
从远端获取单群聊历史消息是指从融云服务端获取历史消息,该功能要求 App Key 已启用融云提供的单群聊消息云端存储服务。您可以在控制台 IM 服务的服务购买页面为当前使用的 App Key 开启服务。如果使用生产环境的 App Key,请注意仅 IM 旗舰版或 IM 尊享版可开通该服务。具体功能与费用以融云官方价格说明页面及计费说明文档为准。
请注意区分历史消息记录与离线消息?。融云针对单聊、群聊、系统消息默认提供最多 7 天(可调整)的离线消息缓存服务。客户端上线时 SDK 会自动收取离线期间的消息,无需 App 层调用 API。详见管理离线消息存储配置。
提示
- 用户是否可以获取在加入群组之前的群聊历史消息取决于 App 在控制台的设置。您可以在需先按控制台内嵌指南嵌入到管理后台的 IM 服务功能配置页面(page_code: im_service_config)中,进入 单群聊 > 新用户获取加入群组前历史消息,启用此选项。启用此选项后,新入群用户可以获取在他们加入群组之前发送的所有群聊消息。如不启用,新入群用户只能看到他们入群后的群聊消息。
- 默认情况下,用户不在群组中不能获取群组中的历史消息。如果您希望用户未在指定群组中时,也可以获取群组历史消息,可以在需先按控制台内嵌指南嵌入到管理后台的 IM 服务功能配置页面(page_code: im_service_config)中,进入 单群聊 > 用户不在群组时是否可以拉取历史消息,允许不在群组的用户也可以获取该群组的的历史消息。
获取历史消息
开发者可以通过此接口来获取某个会话的历史消息。
方法
TypeScript
getMessages(
type: RCIMIWConversationType,
targetId: string,
channelId: string,
sentTime: number,
order: RCIMIWTimeOrder,
policy: RCIMIWMessageOperationPolicy,
count: number,
callback: IRCIMIWGetMessagesCallback
): Promise<number>;
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | string | 会话 ID |
channelId | string | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
sentTime | number | 当前消息时间戳 |
order | RCIMIWTimeOrder | 获取消息的方向。BEFORE:获取 sentTime 之前的消息 (时间递减),AFTER:获取 sentTime 之后的消息 (时间递增) |
policy | RCIMIWMessageOperationPolicy | 消息的加载策略。LOCAL:只加载本地,REMOTE:只加载远端,LOCAL_REMOTE:本地远端都加载 |
count | number | 获取的消息数量,0 < count ≤ 20 |
callback | IRCIMIWGetMessagesCallback | 接口调用结果回调。 |
返回值
| 返回值 | 描述 |
|---|---|
number | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
TypeScript
const callback = {
onSuccess: (t: Array<RCIMIWMessage>) => {
//...
},
onError: (code: number) => {
//...
},
};
let code = await engine.getMessages(type, targetId, channelId, sentTime, order, policy, count, callback);
获取指定本地消息的前后消息
获取指定本地消息前后的消息,返回结果包含指定消息,消息按发送时间从新到旧排列。
方法
TypeScript
getMessagesAroundTime(
type: RCIMIWConversationType,
targetId: string,
channelId: string,
sentTime: number,
beforeCount: number,
afterCount: number,
callback?: IRCIMIWGetMessagesAroundTimeCallback
): Promise<number>;
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | string | 会话 ID |
channelId | string | 消息所属会话的业务标识,仅支持超级群使用,其他会话类型传 null 即可 |
sentTime | number | 指定消息的发送时间戳,单位为毫秒,不能为 0 |
beforeCount | number | 指定消息之前的消息数量 |
afterCount | number | 指定消息之后的消息数量 |
callback | IRCIMIWGetMessagesAroundTimeCallback | 获取结果回调 |
返回值
| 返回值 | 描述 |
|---|---|
number | 当次接口操作的状态码。0 代表调用成功,消息列表通过回调获取;非 0 代表调用失败,不会触发回调 |
代码示例
TypeScript
const code = await engine.getMessagesAroundTime(
type,
targetId,
channelId,
sentTime,
beforeCount,
afterCount,
{
onSuccess: (messages: Array<RCIMIWMessage>) => {
//...
},
onError: (errorCode: number) => {
//...
},
},
);
按消息类型加载本地消息
获取指定会话中指定类型的本地消息。sentTime 传 0 时从最新消息开始加载。
方法
TypeScript
getLocalMessagesByMessageTypes(
type: RCIMIWConversationType,
targetId: string,
channelId: string,
messageTypes: Array<RCIMIWMessageType>,
sentTime: number,
order: RCIMIWTimeOrder,
count: number,
callback?: IRCIMIWGetMessagesCallback
): Promise<number>;
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
type | RCIMIWConversationType | 会话类型 |
targetId | string | 会话 ID |
channelId | string | 消息所属会话的业务标识,仅支持超级群使用,其他会话类型传 null 即可 |
messageTypes | Array<RCIMIWMessageType> | 消息类型集合 |
sentTime | number | 消息发送时间戳,传 0 表示从最新消息开始加载 |
order | RCIMIWTimeOrder | 加载方向,BEFORE 表示获取 sentTime 之前的消息,AFTER 表示获取 sentTime 之后的消息 |
count | number | 获取的消息数量 |
callback | IRCIMIWGetMessagesCallback | 获取结果回调 |
返回值
| 返回值 | 描述 |
|---|---|
number | 当次接口操作的状态码。0 代表调用成功,消息列表通过回调获取;非 0 代表调用失败,不会触发回调 |
代码示例
TypeScript
const code = await engine.getLocalMessagesByMessageTypes(
type,
targetId,
channelId,
[RCIMIWMessageType.TEXT, RCIMIWMessageType.IMAGE],
0,
RCIMIWTimeOrder.BEFORE,
count,
{
onSuccess: (messages: Array<RCIMIWMessage>) => {
//...
},
onError: (errorCode: number) => {
//...
},
},
);
通过 messageId 获取消息
开发者可以通过此接口来获取某条本地数据库的消息。
方法
TypeScript
getMessageById(
messageId: number,
callback: IRCIMIWGetMessageCallback
): Promise<number>;
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
messageId | number | 消息的 messageId,可在消息对象中获取 |
callback | IRCIMIWGetMessageCallback | 接口调用结果回调。 |
返回值
| 返回值 | 描述 |
|---|---|
number | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
TypeScript
const callback = {
onSuccess: (t: RCIMIWMessage) => {
//...
},
onError: (code: number) => {
//...
},
};
let code = await engine.getMessageById(messageId, callback);
通过 messageUId 获取消息
开发者可以通过此接口来获取某条本地数据库的消息。
方法
TypeScript
getMessageByUId(
messageUId: string,
callback: IRCIMIWGetMessageCallback
): Promise<number>;
参数说明
| 参数名 | 参数类型 | 描述 |
|---|---|---|
messageUId | string | 消息的 messageUid,可在消息对象中获取,且只有发送成功的消息才会有值。 |
callback | IRCIMIWGetMessageCallback | 接口调用结果回调。 |
返回值
| 返回值 | 描述 |
|---|---|
number | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考错误码 |
代码示例
TypeScript
const callback = {
onSuccess: (t: RCIMIWMessage) => {
//...
},
onError: (code: number) => {
//...
},
};
let code = await engine.getMessageByUId(messageUId, callback);