会话介绍

大约 3 分钟

会话介绍

会话是一个单聊、群聊或者聊天室所有消息的集合。用户需在会话中发送消息、查看或清空历史消息等操作。

环信即时通讯 IM SDK 提供 IChatManagerConversation 类以会话为单位对消息数据进行管理,如获取会话列表、置顶会话、添加会话标记、删除会话和管理未读消息等。

会话类

环信即时通讯 IM 提供会话类 Conversation。该类定义了以下内容:

类/方法描述
Id会话 ID,取决于会话类型。
- 单聊:会话 ID 为对方的用户 ID;
- 群聊:会话 ID 为群组 ID;
- 聊天室:会话 ID 为聊天室的 ID。
Type会话类型。
- Chat:单聊会话;
- Group:群聊会话;
- Room:聊天室会话。
- HelpDesk:客服会话。
IsThread判断该会话是否为子区会话。
IsPinned判断该会话是否被置顶。
PinnedTime会话置顶时间戳(毫秒)。如果 IsPinnedfalse,将返回 0
LastMessage获取指定会话的最新消息。该方法的调用不影响会话的未读消息数。 SDK 首先从内存中获取最新消息,若在内存中未找到,则从数据库中加载,然后将其存放在内存中。
LastReceivedMessage获取指定会话中收到的最新消息。
Ext获取指定会话的扩展信息。
UnReadCount获取指定会话的未读消息数。
MarkMessageAsRead设置指定消息为已读。
MarkAllMessageAsRead将指定会话的所有未读消息设置为已读。
InsertMessage在本地数据库的指定会话中插入一条消息。
AppendMessage在本地数据库中指定会话的尾部插入一条消息。
UpdateMessage更新本地数据库的指定消息。
DeleteMessage删除本地数据库中的一条指定消息。
DeleteMessages删除本地数据库中指定时间段的消息。
DeleteAllMessages删除指定会话中所有消息。
LoadMessage加载指定消息。SDK 首先在内存中查找消息,若在内存中未找到,SDK 会在本地数据库查询并加载。
LoadMessagesWithMsgType加载特定类型的多条消息。SDK 首先在内存中查询消息,若在内存中未找到,SDK 会在本地数据库查询并加载。
LoadMessages从指定消息 ID 开始加载消息。
LoadMessagesWithKeyword根据关键字加载消息。SDK 首先在内存中查找消息,若在内存中未找到,SDK 会在本地数据库查询并加载。
LoadMessagesWithTime加载指定时间段内的消息。
MessagesCount获取 SDK 本地数据库中会话的全部消息数目。

会话事件

IChatManagerDelegate 中提供会话事件的监听接口。开发者可以通过设置此监听,获取会话事件,并做出相应处理。如果不再使用该监听,需要移除。

示例代码如下:

public class ChatManagerDelegate : IChatManagerDelegate {
        // 收到会话已读的事件。该事件在以下场景中触发:
       // 1. 当消息接收方调用 `SendConversationReadAck` 方法,SDK 会执行此回调,
       // 会将本地数据库中该会话中消息的 `isAcked` 属性置为 `true`。
       // 2. 多端多设备登录时,若一端发送会话已读回执(conversation ack),
       // 服务器端会将会话的未读消息数置为 0,
       // 同时其他端会回调此方法,并将本地数据库中该会话中消息的 `isRead` 属性置为 `true`。
        public void OnConversationRead(string from, string to)
        {

        }
}

// 注册会话监听回调。
ChatManagerDelegate adelegate = new ChatManagerDelegate();
SDKClient.Instance.ChatManager.AddChatManagerDelegate(adelegate);

// 移除会话监听回调。
SDKClient.Instance.ChatManager.RemoveChatManagerDelegate(adelegate);