环信桌面端 SDK 支持会话管理的集成,集成后可以进行如下操作:
通过这些操作,可以组合帮助您完成多种场景下的 IM 需求。
会话管理模块为 EMChatManager,由 EMClient 模块加载时主动创建,可以使用 EMClient 模块的 getChatManager 方法获取,代码如下:
var chatManager = emclient.getChatManager();
会话处理包含以下处理操作:
所有处理操作的示例下面会一一说明。
接口 API 如下:
/** 
 * 获取会话列表
 * return 返回会话列表,EMConversation 数组
 */
getConversations()
调用方法如下:
var convlist = chatManager.getConversations();
根据会话 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();
获取消息包含以下处理操作:
所有处理操作的示例下面会一一说明。
接口 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 获取当前会话消息,接口 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);