---
title: 获取历史消息
sidebar_position: 30
---
## 开通服务
从远端获取单群聊历史消息是指从融云服务端获取历史消息,该功能要求 App Key 已启用融云提供的**单群聊消息云端存储**服务。您可以在控制台 [IM 服务管理](https://console.rongcloud.cn/agile/formwork/advance/index)页面为当前使用的 App Key 开启服务。如果使用生产环境的 App Key,请注意仅 **IM 旗舰版**或 **IM 尊享版**可开通该服务。具体功能与费用以[融云官方价格说明](https://www.rongcloud.cn/pricing)页面及[计费说明](https://help.rongcloud.cn/t/topic/123)文档为准。
**提示**:请注意区分历史消息记录与离线消息?。融云针对单聊、群聊、系统消息默认提供最多 7 天(可调整)的离线消息缓存服务。客户端上线时 SDK 会自动收取离线期间的消息,无需 App 层调用 API。详见[管理离线消息存储配置](./manage-offline-message-duration.md)。
## 获取历史消息
开发者可以通过此接口来获取某个会话的历史消息。
### 方法
```ts
getMessages(
type: RCIMIWConversationType,
targetId: string,
channelId: string,
sentTime: number,
order: RCIMIWTimeOrder,
policy: RCIMIWMessageOperationPolicy,
count: number,
callback: IRCIMIWGetMessagesCallback
): Promise;
```
### 参数说明
| 参数名 | 参数类型 | 描述 |
|:------|:------|:------|
| type | [RCIMIWConversationType](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/enums/RCIMDefines.RCIMIWConversationType.html) | 会话类型 |
| targetId | string | 会话 ID |
| channelId | string | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
| sentTime | number | 当前消息时间戳 |
| order | [RCIMIWTimeOrder](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/enums/RCIMDefines.RCIMIWTimeOrder.html) | 获取消息的方向。BEFORE:获取 sentTime 之前的消息 (时间递减),AFTER:获取 sentTime 之后的消息 (时间递增) |
| policy | [RCIMIWMessageOperationPolicy](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/enums/RCIMDefines.RCIMIWMessageOperationPolicy.html) | 消息的加载策略。LOCAL:只加载本地,REMOTE:只加载远端,LOCAL_REMOTE:本地远端都加载 |
| count | number | 获取的消息数量,count 大于 0,小于等于 20。 |
| callback | [IRCIMIWGetMessagesCallback](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/interfaces/RCIMDefines.IRCIMIWGetMessagesCallback.html) | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 |
### 返回值
| 返回值 | 描述 |
|:------|:------|
| Promise\ | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考**状态码**文档。 |
### 代码示例
```ts
let callback = {
onSuccess:(res) => {
//...
},
onError:(res) => {
//...
}};
let code = await engine.getMessages(type, targetId, channelId, sentTime, order, policy, count, callback);
```
### 回调方法
- **setOnMessagesLoadedListener**
```ts
setOnMessagesLoadedListener(listener?: ({code, type, targetId, channelId, sentTime, order, messages}) => void): void;
```
参数说明
| 参数名 | 参数类型 | 描述 |
|:------|:------|:------|
| code | number | 接口回调的状态码,0 代表成功,非 0 代表出现异常 |
| type | [RCIMIWConversationType](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/enums/RCIMDefines.RCIMIWConversationType.html) | 会话类型 |
| targetId | string | 会话 ID |
| channelId | string | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
| sentTime | number | 当前消息时间戳 |
| order | [RCIMIWTimeOrder](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/enums/RCIMDefines.RCIMIWTimeOrder.html) | 获取消息的方向。BEFORE:获取 sentTime 之前的消息 (时间递减),AFTER:获取 sentTime 之后的消息 (时间递增) |
| messages | Array\<[RCIMIWMessage](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/interfaces/RCIMDefines.RCIMIWMessage.html)> | 获取到的消息集合 |
代码示例
```ts
engine.setOnMessagesLoadedListener((res) => {
//...
});
```
## 通过 messageId 获取消息
开发者可以通过此接口来获取某条消息。
### 方法
```ts
getMessageById(
messageId: number,
callback: IRCIMIWGetMessageCallback
): Promise;
```
### 参数说明
| 参数名 | 参数类型 | 描述 |
|:------|:------|:------|
| messageId | number | 消息的 messageId,可在消息对象中获取 |
| callback | [IRCIMIWGetMessageCallback](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/interfaces/RCIMDefines.IRCIMIWGetMessageCallback.html) | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 |
### 返回值
| 返回值 | 描述 |
|:------|:------|
| Promise\ | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考**状态码**文档。 |
### 代码示例
```ts
let callback = {
onSuccess:(res) => {
//...
},
onError:(res) => {
//...
}};
let code = await engine.getMessageById(messageId, callback);
```
## 通过 messageUId 获取消息
开发者可以通过此接口来获取某条消息。
### 方法
```ts
getMessageByUId(
messageUId: string,
callback: IRCIMIWGetMessageCallback
): Promise;
```
### 参数说明
| 参数名 | 参数类型 | 描述 |
|:------|:------|:------|
| messageUId | string | 消息的 messageUid,可在消息对象中获取,且只有发送成功的消息才会有值。 |
| callback | [IRCIMIWGetMessageCallback](https://doc.rongcloud.cn/apidoc/imlib-uniapp/latest/zh_CN/interfaces/RCIMDefines.IRCIMIWGetMessageCallback.html) | 事件回调。SDK 从 5.3.1 版本开始支持 callback 方式回调。从 5.4.0 版本废弃该接口的其他回调方式。如果传入了 callback 参数,仅触发 callback 回调。 |
### 返回值
| 返回值 | 描述 |
|:------|:------|
| Promise\ | 当次接口操作的状态码。0 代表调用成功 具体结果需要实现接口回调,非 0 代表当前接口调用操作失败,不会触发接口回调,详细错误参考**状态码**文档。 |
### 代码示例
```ts
let callback = {
onSuccess:(res) => {
//...
},
onError:(res) => {
//...
}};
let code = await engine.getMessageByUId(messageUId, callback);
```