目录

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

更新日期:2022-7-25

环信即时通讯 IM SDK 在消息服务器上存储历史消息。当聊天用户从其他设备登录或加入群组后,您可以从服务器检索历史消息,以便用户也可以在新设备上浏览这些消息。

本文介绍如何实现用户从消息服务器获取会话和消息。

技术原理

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

前提条件

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

实现方法

从服务器获取会话列表

对于单聊或群聊,用户发消息时,会自动将对方添加到用户的会话列表。用户可通过调用 getSessionListgetConversationlist 方法查询会话列表。

getConversationlist 可从服务器获取会话列表及每个会话中的最新一条消息,为新接口,推荐使用。

注意 登录用户的 ID 大小写混用会导致拉取会话列表时提示会话列表为空,因此避免大小写混用。

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

从服务器获取指定会话的历史消息

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

你可以调用 fetchHistoryMessagesgetHistoryMessages 方法从服务器获取指定会话的消息。

getHistoryMessages 可按消息创建时间顺序获取服务器上保存的指定会话中的消息,为新接口,推荐使用。

/**
 * 获取指定会话的历史消息。
 * @param {Object} options
 * @param {String} options.queue   - 对方用户 ID(用户 ID 只能包含小写字母)、群组 ID 或聊天室 ID。
 * @param {Number} options.count   - 每次期望获取的消息条数。
 * @param {Boolean} options.isGroup - 是否是群聊:`true`:群聊;(默认)`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 = []” 方法重置

/**
 * 按服务器接收消息的时间顺序获取会话的历史消息。
 * @param {Object} options
 * @param {String} options.targetId   - 对方的用户 ID 或者群组 ID 或聊天室 ID。
 * @param {Number} options.pageSize  - (可选)每页期望获取的消息条数。取值范围为 [1,50],默认值为 20。
 * @param {Number} options.cursor   - (可选)查询的起始位置。若该参数设置为 `-1`、`null` 或空字符串,从最新消息开始。
 * @param {Boolean} options.chatType - (可选)会话类型(SDK V4.0):(默认) `singleChat`:单聊;`groupChat`:群聊;`chatRoom`:聊天室聊天。
 * @param {String} options.searchDirection - 消息搜索方向:(默认)`up`:按服务器收到消息的时间的逆序获取;`down`:按服务器收到消息的时间的正序获取。
 */
var options = {
    targetId:'user1',
    pageSize: 20,
    cursor: -1,
    chatType:'groupChat',
    searchDirection: 'up',
}
WebIM.conn.getHistoryMessages(options).then((res)=>{
    // 成功获取的历史消息。
    console.log(res) 
}).catch((e)=>{
    // 获取失败。
})