====== 会话管理 ======
环信桌面端 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);
----
上一页:[[im:pc:basics:message|消息]]
下一页:[[im:pc:basics:buddy|好友管理]]