消息管理–从服务器获取消息
更新时间: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 = []” 方法重置