消息管理–从服务器获取消息

更新时间:2022-02-28

本文介绍如何实现用户从消息服务器获取会话和消息,例如,用户登录新设备,加入群之后获取其他成员之前发送的消息,该功能也称为消息漫游。

环信即时通讯 IM 在消息服务器保存历史消息,方便用户在新设备获取历史消息。

功能 描述
从服务器获取会话 从服务端获取会话。
获取指定会话的历史消息 从服务端获取会话的历史消息。

利用环信即时通讯 IM SDK 可从服务器获取历史消息。

  • getSessionList 获取服务器上保存的会话列表;
  • fetchHistoryMessages 获取服务器上保存的指定会话中的消息。

开始前,请确保已完成 SDK 初始化并连接到服务器,详见 快速开始

会话列表

对于单聊或群聊,用户发消息时,会自动将对方添加到用户的会话列表。用户可通过调用 getSessionList 查询会话列表。建议一个页面只在初始时调用一次。 特别注意:登录用户的 ID 避免大小写混用,因为这会导致拉取会话列表时提示拉取会话列表为空。

WebIM.conn.getSessionList().then((res) => {
    console.log(res)
    /**
    返回参数说明。
    channel_infos:所有会话。
    channel_id:会话 ID。
    meta:最后一条消息。
    unread_num:当前会话的未读消息数。
    */
})

当你切换设备或新加入群时,可从服务器拉取历史消息。

从服务器获取会话

该功能需联系商务开通,开通后,用户默认可拉取 7 天内的 10 个会话(每个会话包含最新一条历史消息),如需调整会话数量或时间限制请联系环信商务经理(您可以在环信通讯云管理后台首页,扫描二维码联系您的商务经理)。

/**

 * 获取对话历史消息。
 * @param {Object} options
 * @param {String} options.queue   - 对方用户 ID(用户 ID 只能包含小写字母),群组 ID 或聊天室 ID。
 * @param {Number} options.count   - 每次拉取的消息条数。
 * @param {Boolean} options.isGroup - 是否是群聊,默认为 `false`。
 * @param {String} options.start - (可选)起始位置的消息 ID,默认从最新一条开始。
 * @param {Boolean} options.format - (可选)是否格式化返回格式, 默认为 `false` (4.0 新语法建议设置为 `true`)。
   */
   var options = {
   queue: "test1", //需特别注意:如果 queue 属性值为大小写字母混合输入或全部大写会导致拉取漫游为空数组,因此需将属性值转换为全部小写。
   isGroup: false,
   format: true,
   count: 10
   }
   WebIM.conn.fetchHistoryMessages(options).then((res)=>{
   // 获取拉取成功的历史消息。
   console.log(res) 
   }).catch((e)=>{
   // 拉取失败。
   })
   

PS:如需重置拉取历史消息接口的游标可以通过:“WebIM.conn.mr_cache = []” 方法重置