历史消息
更新时间: 2024/03/14 18:45:30
本地历史记录
- 在支持数据库的时候, SDK 会将消息存储于数据库中
- 当开发者发现会话的未读数大于消息数量时, 说明有未读消息存储于数据库里面, 需要调用获取本地历史记录接口
getLocalMsgs
来获取更多消息
获取本地历史记录
- 仅从数据库查询本地消息。
- 如果不支持数据库,算成功,返回 null
参数说明
sessionId
如果提供该参数, 那么只查询该会话的消息。sessionIds
如果提供该参数, 那么将查询该部分会话的消息总和中的limit条消息,而非每个session均返回符合条件的limit条消息。start
表示查询开始时间(默认值0,表示不限制开始时间)。end
表示结束时间(默认值为Infinity,表示不限制结束时间),可以传入13位的UTC时间戳(对应毫秒)。desc
表示查询方向,默认值为true表示从end开始查(查询结果按时间戳从大到小排列),设置为false表示从start开始查(查询结果按照时间戳从小到大排列)。limit
表示可获取的历史消息的数量限制type
消息类型, 如果提供该参数, 那么查询该类型的消息types
如果提供该参数, 那么查询这几种类型的消息keyword
如果提供参数, 那么查询匹配该关键词的消息
javascriptnim.getLocalMsgs({
sessionId: 'p2p-account',//表示单聊场景(p2p),对方账号为account。
limit: 100,
done: getLocalMsgsDone
})
function getLocalMsgsDone(error, obj) {
console.log('获取本地消息' + (!error?'成功':'失败'), error, obj)
}
获取 idClient 对应的本地消息
- 从数据库查询指定的消息
- 如果不支持数据库,算成功,返回 null
- 参数解释
- idClient:用户 ID
javascriptnim.getLocalMsgByIdClient({
idClient: 'd7a1b2c63066e1038e9aa01321652370',
done: getLocalMsgByIdClientDone
});
function getLocalMsgByIdClientDone(error, obj) {
console.log(error);
console.log(obj);
console.log('获取本地消息' + (!error?'成功':'失败'));
if (!error) {
console.log(obj.msg);
}
}
获取 idClients 对应的本地消息
- 如果不支持数据库, 算成功, 返回空数组
javascriptnim.getLocalMsgsByIdClients({
idClients: [
'd7a1b2c63066e1038e9aa01321652370',
'22e604c7811c23586355f63f24658525'
],
done: getLocalMsgsByIdClientsDone
});
function getLocalMsgsByIdClientsDone(error, obj) {
console.log(error);
console.log(obj);
console.log('获取本地消息' + (!error?'成功':'失败'));
if (!error) {
console.log(obj.msgs);
}
}
更新本地消息
- 在数据库更新
idClient
对应的本地消息 - 如果不支持数据库, 算成功
- 如果对应的消息不存在, 算成功, 返回 null
- 这些字段只会被更新到本地数据库, 不会被更新到服务器上
- 参数解释
- localCustom:本地可扩展字段
javascript nim.updateLocalMsg({
idClient: 'p2p-idClient',
localCustom: '{"key","value"}',
done: updateLocalMsgDone
});
function updateLocalMsgDone(error, obj) {
console.log(error);
console.log(obj);
console.log('更新本地消息' + (!error?'成功':'失败'));
}
删除指定的本地消息
- 在内存(提前同步)中删除指定消息
- 若支持数据库,在数据库中也删除指定消息
- 如果对应的消息不存在, 算成功
javascriptnim.deleteLocalMsg({
msg: msg,
done: deleteLocalMsgDone
});
function deleteLocalMsgDone(error, obj) {
console.log('删除本地消息' + (!error?'成功':'失败'), error, obj);
}
删除某个会话的本地消息
- 在内存中删除指定会话的消息
- 若支持数据库,则在数据库中也删除指定会话的消息
- 参数解释
scene
场景,'p2p'
或'team'
。to
聊天对象, 账号或者群id。delLastMsg
为bool
类型,指是否同时删除本地会话对象中的lastMsg,默认false
javascriptnim.deleteLocalMsgsBySession({
scene: 'p2p',
to: 'account',
delLastMsg: true,
done: deleteLocalMsgsBySessionDone
});
function deleteLocalMsgsBySessionDone(error, obj) {
console.log(error);
console.log(obj);
console.log('删除会话本地消息' + (!error?'成功':'失败'));
}
删除指定时间段的历史消息
若需要清理某个时间段内本地的历史消息,可以调用 deleteLocalMsgsByTime
接口删除指定时间段的历史消息。
- 若支持数据库(开启 db),则在数据库中也删除对应时间段中的历史消息,否则,不处理数据库。
- 删除历史消息后,会触发
onupdatesessions
或onupdatesession
事件回调(更新会话的回调,会返回会话对象) - 参数解释
start
:开始时间戳,默认为 0end
:结束时间戳,默认为 Infinity。结束时间必须大于开始时间,否则会报错deletedone
:删除历史消息完成的回调,回调中会返回删除的消息数量,可以在此回调后搜索消息done
:删除历史消息并更新会话完成的回调,回调中会返回删除的消息数量和涉及到的会话数量- 删除的消息区间不包含
start
和end
时间点,即删除范围为开区间。 - 若两个参数都不传,都取默认值,即删除所有的本地消息。
- 删除的消息区间不包含
javascriptnim.deleteLocalMsgsByTime({
start: 0,
end: 1687770082220,
done: deleteLocalMsgsByTimeDone
});
function deleteLocalMsgsByTimeDone(error, obj) {
console.log(error);
console.log(obj);
console.log('删除指定时间段的历史消息' + (!error?'成功':'失败'));
}
删除所有本地消息
-删除内存和数据库中的所有消息
javascriptnim.deleteAllLocalMsgs({
done: deleteAllLocalMsgsDone
});
function deleteAllLocalMsgsDone(error, obj) {
console.log(error);
console.log(obj);
console.log('删除所有本地消息' + (!error?'成功':'失败'));
}
云端历史记录
获取云端历史记录
- 获取某个会话的历史记录, 会在结果回调函数
done
里面接收到消息数组 - 参数解释
scene
: 请参考消息场景to
: 帐号或者群idbeginTime
: 表示查询开始时间(默认值0表示不限制开始时间),。endTime
: endTime表示结束时间(默认值为服务器当前时间),可以传入13位的UTC时间戳(对应毫秒)。lastMsgId
: 以某条消息为起点进行查询,与beginTime
或endTime
时间参数搭配使用,时间参数二选一取决于reverse
参数。查询时,时间参数设置为该条消息的time
,lastMsgId
设置为该条消息的idServer
,查询结果不包含该条消息limit
: 本次查询的消息数量限制, 最多100条, 默认100条reverse
: 默认false
表示从endTime
开始往前查找历史消息;true
表示从beginTime
开始往后查找历史消息asc
: 表示对查询结果按照时间进行排序的方式: 如果asc和reverse设置相同(都为true,或者都为false),查询结果按照时间戳从大到小;如果asc和reverse设置不同,查询结果按照时间戳从小到大。lastMsgId
表示作为查询起点的那条消息的idServer
(查询结果不会包含该消息): 如果reverse为false(默认值),那么设置lastMsgId的同时必须设置endTime参数为该消息对应的time属性。 如果reverse为true,那么设置lastMsgId的同时必须设置beginTime参数为该消息对应的time属性。
- 该接口用于获取一段时间内的历史消息, 由参数
beginTime
和endTime
来控制时间范围。- 当
reverse
为false
时, 后续查询的endTime
对应上次查询的最后一条消息的time
字段 - 当
reverse
为true
时, 后续查询的beginTime
对应上次查询的最后一条消息的time
字段
- 当
javascriptnim.getHistoryMsgs({
scene: 'p2p',
to: 'a2',
done: getHistoryMsgsDone
});
function getHistoryMsgsDone(error, obj) {
console.log('获取p2p历史消息' + (!error?'成功':'失败'));
console.log(error);
console.log(obj);
if (!error) {
console.log(obj.msgs);
}
}
删除点对点云端历史记录
- 参数解释
account
: 必填,对方帐号。删除后,自己不能再查询到和对方的聊天记录,不影响对方查询。清除时间以服务器接收请求时间为准。delRoam
: 默认true
,表示是否同时删除漫游。
javascriptnim.clearServerHistoryMsgs({
account: 'xxx',
delRoam: false,
done: clearServerHistoryMsgsDone
});
function clearServerHistoryMsgsDone(error, obj) {
console.log('删除服务器消息' + (!error?'成功':'失败'), error, obj);
}
此文档是否对你有帮助?