获取历史消息
获取历史消息可以仅从本地数据 中获取,仅从远端获取,和同时从本地与远端获取。
开通服务
从远端获取单群聊历史消息是指从融云服务端获取历史消息,该功能要求 App Key 已启用融云提供的单群聊消息云端存储服务。您可以在控制台 IM 服务的服务购买页面为当前使用的 App Key 开启服务。如果使用生产环境的 App Key,请注意仅 IM 旗舰版或 IM 尊享版可开通该服务。具体功能与费用以融云官方价格说明页面及计费说明文档为准。
提示
请注意区分历史消息记录与离线消息?。融云针对单聊、群聊、系统消息默认提供最多 7 天(可调整)的离线消息缓存服务。客户 端上线时 SDK 会自动收取离线期间的消息,无需 App 层调用 API。
从本地数据库中获取消息
从本地数据库中获取单条消息:消息 messageId
您可以根据消息 messageId 从本地数据库中获取单条消息。
接口原型
TypeScript
public getMessageById(messageId: number): Promise<IAsyncResult<Message>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| messageId | number | 消息的 ID |
示例代码
TypeScript
let messageId = 123;
IMEngine.getInstance().getMessageById(messageId).then(result => {
if (EngineError.Success !== result.code) {
// 获取消息失败
return;
}
if (!result.data) {
// 消息不存在
return;
}
// 消息体
let msg = result.data as Message;
});
从本地数据库中获取单条消息:消息 msgUid
您可以根据消息 msgUid 从本地数据库中获取单条消息。
接口原型
TypeScript
public getMessageByUid(messageUid: string): Promise<IAsyncResult<Message>>;
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| msgUid | string | 消息 唯一 id,发送成功的消息才有 uid |
示例代码
TypeScript
let msgUid = "CG5U-IGFN-F6S6-CVTR";
IMEngine.getInstance().getMessageByUid(msgUid).then(result => {
if (EngineError.Success !== result.code) {
// 获取消息失败
return;
}
if (!result.data) {
// 消息不存在
return;
}
// 消息体
let msg = result.data as Message;
});
从本地数据库中分页获取批量消息:消息 meeeageId
您可以查询指定会话存储在本地数据库中的历史消息,并返回消息对象列表。
接口说明
TypeScript
public getHistoryMessagesById(conId: ConversationIdentifier, option: IGetLocalMsgByIdOption): Promise<IAsyncResult<List<Message>>>;
参数说明
| 参数名 | 类型 | 详细说明 |
|---|---|---|
| conId | ConversationIdentifier | 会话标识对象,包含会话类型和会话 targetId |
| option | IGetLocalMsgByIdOption | 消息查询配置选项 |
参数 IGetLocalMsgByIdOption 的详细描述
TypeScript
/**
* 获取本地消息的配置
*
* beforeCount afterCount 总共分为四种情况
* ```
* 1. beforeCount > 0 && afterCount > 0,将获取 beforeCount + {messageId} + afterCount 的消息
* 2. beforeCount > 0 && afterCount == 0,将获取 beforeCount + {messageId} 的消息
* 3. beforeCount == 0 && afterCount > 0,将获取 {messageId} + afterCount 的消息
* 4. beforeCount == 0 && afterCount == 0,将获取 {messageId}
* ```
* @version 1.0.0
*/
interface IGetLocalMsgByIdOption {
/**
* objectName 集合,为空的话代表获取所有类型的本地消息
*
* 有效值的话代表获取指定类型的消息
*/
objNameList?: List<string>,
/**
* 消息本地数据库 ID
*/
messageId: number,
/**
* 在 messageId 之前的消息个数,取值 ≥0
* @discussion beforeCount 如果传入 10 ,但是获取的个数不足时说明往前没有更多的消息了
*/
beforeCount: number,
/**
* 在 messageId 之后的消息个数,取值 ≥0
* @discussion afterCount 如果传入 10 ,但是获取的个数不足时说明往后没有更多的消息了
*/
afterCount: number,
}
示例代码
TypeScript
let conId = new ConversationIdentifier();
conId.conversationType = ConversationType.Private;
conId.targetId = "会话 id";
let option: IGetLocalMsgByIdOption = {
objNameList: objNameList,
messageId: messageId,
beforeCount: beforeCount,
afterCount: afterCount
}
IMEngine.getInstance().getHistoryMessagesById(conId, option).then(result => {
if (EngineError.Success !== result.code) {
// 获取消息失败
return;
}
if (!result.data) {
// 消息不存在
return;
}
// 消息体
let msg = result.data as List<Message>;
});
从本地数据库中分页获取批量消息:时间戳
您可以根据时间戳查询指定会话存储在本地数据库中的 历史消息,并返回消息对象列表。
接口原型
TypeScript
public getHistoryMessagesByTime(conId: ConversationIdentifier, option: IGetLocalMsgByTimeOption): Promise<IAsyncResult<List<Message>>>;