会话管理

大约 5 分钟

会话管理

环信桌面端 SDK 支持会话管理的集成,集成后可以进行如下操作:

  • 会话处理

  • 获取消息

  • 消息处理

通过这些操作,可以组合帮助您完成多种场景下的 IM 需求。

会话管理模块为 EMChatManager,由 EMClient 模块加载时主动创建,可以使用 EMClient 模块的 getChatManager 方法获取,代码如下:

var chatManager = emclient.getChatManager();

会话处理

会话处理包含以下处理操作:

  • 获取会话列表

  • 根据 ID 获取会话

  • 删除会话

  • 获取会话属性

  • 会话属性扩展

所有处理操作的示例下面会一一说明。


获取会话列表

接口 API 如下:

/** 
 * 获取会话列表
 * return 返回会话列表,EMConversation 数组
 */
getConversations()

调用方法如下:

var convlist = chatManager.getConversations();

根据 ID 获取会话

根据会话 ID 获取会话,接口 API 如下:

/** 
 * 获取会话
 * param conversationId 会话 ID,输入参数,String
 * param type 会话类型,输入参数,0为单聊,1为群聊
 * return 会话,EMConversation
 */
conversationWithType(conversationId,type)

调用方法如下:

let conversationlist = chatManager.conversationWithType(conversationId,type);

删除会话

接口 API 如下:

/** 根据 ID 删除会话
 * param conversationId 会话 ID,输入参数
 * param isRemoveMessages 是否删除消息,ture 为删除
 */
removeConversation(conversationId,isRemoveMessages)

调用方法如下:

chatManager.removeConversation(conversationId,true);

获取会话属性

// 获取会话 ID
console.log("conversationId" + conversation.conversationId());
// 获取会话类型,0为单聊,1为群聊
console.log("conversationType" + conversation.conversationType());

会话扩展属性

接口 API 如下:

/** 
 * 设置会话扩展属性
 * param ext 扩展属性,String
 */
setExtField(strAttr)
/** 
 * 获取会话扩展属性
 * return 扩展属性,String
 */
extField()

调用方法如下:

conversation.setExtField(ext);
var strAttr = conversation.extField();

获取消息

获取消息包含以下处理操作:

  • 获取历史消息

  • 根据 ID 获取当前会话消息

  • 获取会话中的消息计数

  • 获取会话中的未读消息计数

  • 获取最新消息

所有处理操作的示例下面会一一说明。


获取历史消息

接口 API 如下:

/** 
 * 分页获取历史消息,从服务器获取
 * param conversationId 会话 ID,输入参数
 * param type 会话类型,1为群组,0为单聊
 * param pageSize 每页的消息计数
 * param startMsgId 起始消息 ID
 * return 返回 Promise 对象,response 参数为 MessageListResult
 */
chatManager.fetchHistoryMessages(conversationId, type, pageSize, startMsgId)

调用方法如下:

chatManager.fetchHistoryMessages(conversationId, type, pageSize, startMsgId).then((res) => {},(error) => {});

根据 ID 获取当前会话消息

根据消息 ID 获取当前会话消息,接口 API 如下:

/** 
 * 根据消息 ID 获取消息
 * param msgid 消息 ID
 * return 未读消息计数
 */
loadMessage(msgid)

调用方法如下:

var msg = conversation.loadMessage(msgid);

获取会话中的消息计数

接口 API 如下:

/** 
 * 获取会话中的消息计数
 * return 消息计数,Number
 */
messagesCount()

调用方法如下:

var msgCount = conversation.messagesCount();

获取会话中的未读消息计数

接口 API 如下:

/** 
 * 获取会话中的未读消息计数
 * return 未读消息计数,Number
 */
unreadMessagesCount()

调用方法如下:

var unreaddMsgCount = conversation.unreadMessagesCount();

获取最新一条消息

接口 API 如下:

/** 
 * 获取会话中的最新一条消息
 * return EMMessage 消息对象
 */
latestMessage()

调用方法如下:

var msg = conversation.latestMessage();

消息处理

消息处理包含以下处理操作:

  • 插入消息

  • 添加消息

  • 修改消息

  • 加载会话消息

  • 删除会话消息

  • 清空会话消息

  • 下载图片、附件

  • 设置消息已读状态

所有处理操作的示例下面会一一说明。


插入消息

接口 API 如下:

/**
  * 不发送消息,只是插入到本地,按照时间插入到本地数据库
  * param messagelist 要插入的消息列表,EMMessage 数组
  * return 返回操作结果,Bool
*/
insertMessages(messagelist);

调用方法如下:

chatManager.insertMessages(messagelist);

添加消息

接口 API 如下:

/**
  * 在末尾添加一条消息
  * param message 要插入的消息,EMMessage 对象
  * return 返回操作结果,Bool
*/
appendMessage(message);

调用方法如下:

chatManager.appendMessage(message);

修改消息

接口 API 如下:

/**
  * 修改一条消息,不能改变消息 ID
  * param message 要插入的消息,EMMessage 对象
  * return 返回操作结果,Bool
*/
updateMessage(message);

调用方法如下:

chatManager.updateMessage(message);

加载会话消息

接口 API 如下:

/** 
 * 按照 ID 加载会话消息
 * param refMsgId 起始消息 ID,输入参数,空为最新消息,String
 * param count 加载的消息数,输入参数,Number
 * param direction 消息加载方向填0
 * return 返回为 EMMessage 数组
 */
loadMoreMessagesByMsgId(refMsgId, count, direction);

/** 
 * 按照时间加载会话消息
 * param timeStamp 起始消息时间,输入参数
 * param count 加载的消息数,输入参数
 * param direction 消息加载方向,填0
 * return 返回EMMessage数组
 */
conversation.loadMoreMessagesByTime(timeStamp, count, direction);

调用方法如下:

conversation.loadMoreMessagesByMsgId("", 20,0);
conversation.loadMoreMessagesByTime(timeStamp, 20,0);

删除会话消息

接口 API 如下:

/** 
 * 按照 ID 移除会话消息,只操作缓存和本地数据库
 * param messageId 要删除的消息 ID
 * return 返回操作结果,bool 型
 */
removeMessage(messageId)

调用方法如下:

conversation.removeMessage(messageId).then((res)=>{},(error) => {});

清空会话消息

接口 API 如下:

/** 
 * 清空会话消息,只操作缓存和本地数据库
 * return 返回操作结果,bool 型
 */
clearAllMessages()

调用方法如下:

conversation.clearAllMessages();

下载图片、附件

// 下载附件消息,message 为 EMMessage 对象,可在 message 中设置回调
chatManager.downloadMessageAttachments(message);
// 下载图片缩略,message 为 EMMessage 对象,可在 message 中设置回调
chatManager.downloadMessageThumbnail(message);

设置消息已读状态

接口 API 如下:

/** 
 * 根据消息 ID 标记消息已读状态
 * param msgid,消息 ID
 * isread bool,已读状态
 * return 返回操作结果,bool 型
 */
markMessageAsRead(msgid,isread);
/** 
 * 标记会话中所有消息的已读状态
 * isread bool,已读状态
 * return 返回操作结果,bool 型
 */
markAllMessagesAsRead(isread);

调用方法如下:

conversation.markMessageAsRead(msgid,isread);
conversation.markAllMessagesAsRead(isread);