getHistoryMessageList
功能介绍
获取历史消息高级接口
本地存储的历史消息无时间限制,但云端存储的历史消息有存储时长的限制:
体验版:免费存储 7 天,不支持延长
专业版:免费存储 7 天,支持延长
旗舰版:免费存储 30 天,支持延长
延长历史消息存储时长是增值服务,您可以登录 即时通信 IM 控制台 修改相关配置,具体计费说明请参加 增值服务资费 。
富媒体消息(图片、文件、语音等)对应的文件存储时长,与历史消息存储时长保持一致。
该接口除了支持普通拉取单聊、群聊历史消息外,还支持以下高级特性:
支持设置拉取消息的位置:从本地拉取、从云端拉取。
支持按照指定的方向拉取:往消息时间更老的方向拉取、往消息时间更新的方向拉取。
支持拉取本地指定的消息类型:文本、图片、语音、视频、文件、表情、群 tips 消息、合并消息、自定义消息等。
如果设置为拉取云端消息,当 SDK 检测到没有网络,默认会直接返回本地数据 只有会议群(Meeting)才能拉取到进群前的历史消息,直播群(AVChatRoom)消息不存漫游和本地数据库,调用这个接口无效
只有会议群(Meeting)才能拉取到进群前的历史消息,直播群(AVChatRoom)消息不存漫游和本地数据库,调用这个接口无效
参数详解
参数名称 | 参数类型 | 是否必填 | 描述 |
---|---|---|---|
getType | HistoryMsgGetTypeEnum | 否 | 拉取消息的位置及方向,可以设置拉取 本地/云端 的 更老/更新 的消息 |
userID | string | 否 | 拉取指定用户的单聊历史消息 |
groupID | string | 否 | 拉取指定群组的群聊历史消息 |
lastMsgSeq | number | 否 | 最后一条消息 seq,表示从哪条消息开始拉取历史消息,由于返回的消息列表会包含 lastMsgSeq 所对应的消息,所以在拉取群聊历史消息时,不建议使用 lastMsgSeq 来续拉。 |
count | number | 是 | 拉取消息的个数,不宜太多,会影响消息拉取的速度,这里建议一次拉取 20 个。但是,Web端不能超过15个。 |
lastMsgID | string | 否 | 获取消息的起始消息id,如果传 null,起始消息为会话的最新消息 |
messageTypeList | number[] | 否 | 用于过滤历史信息属性,若为空则拉取所有属性信息。详情见MessageElemType |
返回模板
V2TimValueCallback<V2TimMessage[]>
{
code : number
desc : string
data : V2TimMessage[]
}
返回值详解
名称 | 数值类型 | 描述 |
---|---|---|
code | number | 请求结果错误码 |
desc | string | 请求结果描述 |
data | V2TimMessage[] | 获取的历史消息 |
代码示例
// 拉取单聊历史消息
// 首次拉取,lastMsgID 设置为 null
import { TencentImSDKPlugin, HistoryMsgGetTypeEnum } from 'react-native-tim-js';
// 再次拉取时,lastMsgID 可以使用返回的消息列表中的最后一条消息的id
const getHistoryMessageListRes = await TencentImSDKPlugin.v2TIMManager
.getMessageManager()
.getHistoryMessageList(
10, // 拉取数据数量
HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, // 拉取消息的位置及方向
'userID', // 用户id 拉取单聊消息,需要指定对方的 userID,此时 groupID 传空即可。
'groupID', // 群组id 拉取群聊消息,需要指定群聊的 groupID,此时 userID 传空即可。
// 仅能在群聊中使用该字段。
// 设置 lastMsgSeq 作为拉取的起点,返回的消息列表中包含这条消息。
// 如果同时指定了 lastMsg 和 lastMsgSeq,SDK 优先使用 lastMsg。
// 如果均未指定 lastMsg 和 lastMsgSeq,拉取的起点取决于是否设置 getTimeBegin。设置了,则使用设置的范围作为起点;未设置,则使用最新消息作为起点。
-1,
undefined, // 拉取起始消息id
[] // 用于过滤历史信息属性,若为空则拉取所有属性信息。
);
if (getHistoryMessageListRes.code === 0) {
//获取成功
}