历史消息

更新时间: 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。
    • delLastMsgbool类型,指是否同时删除本地会话对象中的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),则在数据库中也删除对应时间段中的历史消息,否则,不处理数据库。
  • 删除历史消息后,会触发 onupdatesessionsonupdatesession 事件回调(更新会话的回调,会返回会话对象)
  • 参数解释
    • start:开始时间戳,默认为 0
    • end:结束时间戳,默认为 Infinity。结束时间必须大于开始时间,否则会报错
    • deletedone:删除历史消息完成的回调,回调中会返回删除的消息数量,可以在此回调后搜索消息
    • done:删除历史消息并更新会话完成的回调,回调中会返回删除的消息数量和涉及到的会话数量
      • 删除的消息区间不包含 startend 时间点,即删除范围为开区间。
      • 若两个参数都不传,都取默认值,即删除所有的本地消息。
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: 帐号或者群id
    • beginTime: 表示查询开始时间(默认值0表示不限制开始时间),。
    • endTime: endTime表示结束时间(默认值为服务器当前时间),可以传入13位的UTC时间戳(对应毫秒)。
    • lastMsgId: 以某条消息为起点进行查询,与beginTimeendTime时间参数搭配使用,时间参数二选一取决于reverse参数。查询时,时间参数设置为该条消息的timelastMsgId设置为该条消息的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属性。
  • 该接口用于获取一段时间内的历史消息, 由参数beginTimeendTime来控制时间范围。
    • reversefalse时, 后续查询的endTime对应上次查询的最后一条消息的time字段
    • reversetrue时, 后续查询的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);
}
此文档是否对你有帮助?
有帮助
去反馈
  • 本地历史记录
  • 获取本地历史记录
  • 参数说明
  • 获取 idClient 对应的本地消息
  • 获取 idClients 对应的本地消息
  • 更新本地消息
  • 删除指定的本地消息
  • 删除某个会话的本地消息
  • 删除指定时间段的历史消息
  • 删除所有本地消息
  • 云端历史记录
  • 获取云端历史记录
  • 删除点对点云端历史记录