---
title: 获取历史消息
---
## 开通服务
从远端获取单群聊历史消息是指从融云服务端获取历史消息,该功能要求 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)。
## 获取历史消息
开发者可以通过此接口来获取某个会话的历史消息。
### 方法
```csharp
int loadMessages(
RCIMConversationType type,
string targetId,
string channelId,
int sentTime,
RCIMTimeOrder order,
RCIMMessageOperationPolicy policy,
int count
)
```
### 参数说明
| 参数名 | 类型 | 描述 |
| --------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| type | [RCIMConversationType](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/namespacecn__rongcloud__im__unity.html#a9d16c8fef2db0c4a5d6cfea2e5873aea) | 会话类型 |
| targetId | string | 会话 ID |
| channelId | string | 频道 ID,仅支持超级群使用,其他会话类型传 null 即可。 |
| sentTime | int | 当前消息时间戳 |
| order | [RCIMTimeOrder](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/namespacecn__rongcloud__im__unity.html#a03ce676bb0fb2c7b044774e74b61e6ae) | 获取消息的方向。
BEFORE:获取 sentTime 之前的消息 (时间递减),
AFTER:获取 sentTime 之后的消息 (时间递增) |
| policy | [RCIMMessageOperationPolicy](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/namespacecn__rongcloud__im__unity.html#a3770d0d2aae618d15a91521d80ea7fc6) | 消息的加载策略。
LOCAL:只加载本地,
REMOTE:只加载远端,
LOCAL_REMOTE:本地远端都加载 |
| count | int | 获取的消息数量,count 大于 0,小于等于 20。 |
### 返回值
| 返回值 | 描述 |
| ------------ | -------------------------------------------------------- |
| int | 当次接口操作状态码,并不代表最终操作结果,状态码详细信息 |
### 代码示例
```csharp
int code = engine.loadMessages(
type,
targetId,
channelId,
sentTime,
order,
policy,
count
);
```
### 回调方法
- **onMessagesLoaded**
```csharp
delegate void OnMessagesLoadedDelegate(int code,
RCIMConversationType type,
string targetId,
string channelId,
long sentTime,
RCIMTimeOrder order,
List messages);
OnMessagesLoadedDelegate onMessagesLoaded;
```
参数说明
| 参数名 | 参数类型 | 描述 |
| --------- | ------------------------------------------------------------ | ----------------------------------------------- |
| code | int | 接口回调的状态码,0 代表成功,非 0 代表出现异常 |
| type | [RCIMConversationType](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/namespacecn__rongcloud__im__unity.html#a9d16c8fef2db0c4a5d6cfea2e5873aea) | 接口调用时传入的会话类型 |
| targetId | string | 调用接口时传入的会话 ID |
| channelId | string | 调用接口时传入的频道 ID |
| sentTime | int | 调用接口时传入的消息时间戳 |
| order | [RCIMTimeOrder](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/namespacecn__rongcloud__im__unity.html#a03ce676bb0fb2c7b044774e74b61e6ae) | 调用接口时传入的获取方向 |
| messages | List\<[RCIMMessage](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/classcn__rongcloud__im__unity_1_1_r_c_i_m_message.html)> | 查询到的消息集合 |
代码示例
```csharp
engine.onMessagesLoaded = delegate(
int code,
RCIMConversationType type,
string targetId,
string channelId,
long sentTime,
RCIMTimeOrder order,
List messages
)
{
};
```
## 通过 messageId 获取消息
开发者可以通过此接口来获取某条消息。
### 方法
```csharp
RCIMMessage getMessageById(int messageId)
```
### 参数说明
| 参数名 | 类型 | 描述 |
| --------- | ---- | ------------------------------------ |
| messageId | int | 消息的 messageId,可在消息对象中获取 |
### 返回值
| 返回值 | 描述 |
| ------------------------------------------------------------ | ---------------- |
| [RCIMMessage](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/classcn__rongcloud__im__unity_1_1_r_c_i_m_message.html) | 获取到的消息对象 |
### 代码示例
```csharp
RCIMMessage message = engine.getMessageById(messageId);
```
## 通过 messageUId 获取消息
开发者可以通过此接口来获取某条消息。
### 方法
```csharp
RCIMMessage getMessageByUId( string messageUId)
```
### 参数说明
| 参数名 | 类型 | 描述 |
| ---------- | ------ | ------------------------------------------------------------ |
| messageUId | string | 消息的 messageUid,可在消息对象中获取,且只有发送成功的消息才会有值。 |
### 返回值
| 返回值 | 描述 |
| ------------------------------------------------------------ | ---------------- |
| [RCIMMessage](https://www.rongcloud.cn/docs/api/unity/imlib_v5/latest/classcn__rongcloud__im__unity_1_1_r_c_i_m_message.html) | 获取到的消息对象 |
### 代码示例
```csharp
RCIMMessage message = engine.getMessageByUId(messageUId);
```