====== 会话管理 ====== 环信桌面端 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|好友管理]]