跳到主要内容

会话管理 (Conversation)

会话模块负责管理单聊(.single)、群聊(.superGroup / .writeGroup)及系统通知(.notification)会话列表、置顶、免打扰、阅后即焚、草稿以及未读数清零。


1. 获取会话列表与单个会话​

1.1 获取全部会话或分页获取​

// 一次性获取本地所有会话(按置顶与最新消息时间排序)
let allConversations = try await QXJIMClient.shared.getAllConversationList()

// 分页获取会话列表(适合超大数量会话场景)
let pageConversations = try await QXJIMClient.shared.getConversationListSplit(offset: 0, count: 50)

1.2 获取或创建指定聊天对象的会话​

进入与某个好友或某个群的聊天页时,调用 getOneConversation(若本地尚无该会话,SDK 会自动组装并返回会话对象):

// 获取单聊会话
let singleConv = try await QXJIMClient.shared.getOneConversation(
sessionType: .single,
sourceID: "u_10002"
)

// 获取工作群会话
let groupConv = try await QXJIMClient.shared.getOneConversation(
sessionType: .superGroup,
sourceID: "group_8888"
)

// 直接读取解码后的最后一条消息对象
if let lastMsg = singleConv.decodedLatestMessage {
print("最后一条消息内容: \(lastMsg.textElem?.content ?? "")")
}

1.3 批量获取与计算会话 ID​

// 根据 sourceID 与会话类型同步计算会话 ID(例如 "si_u1_u2" 或 "sg_groupID")
let convID = QXJIMClient.shared.getConversationIDBySessionType(
sourceID: "u_10002",
sessionType: .single
)

// 批量获取多个会话
let convs = try await QXJIMClient.shared.getMultipleConversation(conversationIDs: [convID])

2. 修改会话设置(置顶 / 免打扰 / 阅后即焚 / 草稿)​

// 1. 置顶 / 取消置顶
try await QXJIMClient.shared.setConversationPinned(
conversationID: convID,
isPinned: true
)

// 2. 设置消息免打扰(.receive 正常接收 | .notReceive 屏蔽 | .receiveNotNotify 接收但不通知)
try await QXJIMClient.shared.setConversationRecvMessageOpt(
conversationID: convID,
opt: .receiveNotNotify
)

// 3. 开启/关闭阅后即焚(私聊模式)并设置销毁秒数
try await QXJIMClient.shared.setConversationPrivateChat(
conversationID: convID,
isPrivate: true,
burnDuration: 30
)

// 4. 一次性组合修改多个会话属性
try await QXJIMClient.shared.setConversation(
conversationID: convID,
request: IMConversationSetRequest(
recvMsgOpt: .receive,
isPinned: true,
groupAtType: .normal,
ex: "{\"customKey\":\"value\"}"
)
)

// 5. 保存或清空输入框草稿(draftText 传 "" 即清空)
try await QXJIMClient.shared.setConversationDraft(
conversationID: convID,
draftText: "未写完的消息..."
)

3. 未读数统计与标记已读​

// 获取全局总未读消息数
let totalUnread: Int32 = try await QXJIMClient.shared.getTotalUnreadMsgCount()

// 标记某个会话全部已读(进入聊天页或离开聊天页时调用)
try await QXJIMClient.shared.markConversationMessageAsRead(conversationID: convID)

// 标记指定消息 ID 已读
try await QXJIMClient.shared.markMessagesAsReadByMsgID(
conversationID: convID,
clientMsgIDs: ["msg_id_1", "msg_id_2"]
)

// 一键清除所有会话未读数
try await QXJIMClient.shared.markAllConversationMessageAsRead()

4. 隐藏、清空与删除会话​

// 仅从会话列表中隐藏会话(保留本地历史消息记录)
try await QXJIMClient.shared.hideConversation(conversationID: convID)

// 清空某会话的本地与服务端消息记录(保留会话条目本身)
try await QXJIMClient.shared.clearConversationAndDeleteAllMsg(conversationID: convID)

// 彻底删除会话并清空其所有消息
try await QXJIMClient.shared.deleteConversationAndDeleteAllMsg(conversationID: convID)