--- 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); ```