聊天室
聊天室適合直播間這類臨時線上的場景:沒有固定成員,使用者開啟頁面時進入、離開時離開,訊息只發給此刻在裡面的人,沒有離線訊息。這一點與群聊不同。人數上限、訊息保留和優先順序的規則見服務端的聊天室管理。
| 要做什麼 | 看哪裡 |
|---|---|
| 顯示聊天室列表、進入 | 列表和進入 |
| 顯示和傳送訊息、點贊 | 狀態和訊息 |
| 麥位等房間屬性、撤回、成員列表 | 屬性、撤回和成員 |
| 房管禁言、踢人、全員禁言 | 管理 |
列表和進入
kotlin
val page = im.chatrooms.list(namePrefix = "直播")
val room = im.chatrooms.enter(roomId, leaveOthers = false)
println(room.snapshot.value.state)list/get查詢聊天室,onlineCounts批次查詢線上人數,create在客戶端建立(需要應用允許)。enter可以帶一個可選的字串ext,隨進入的通知發給其他人;leaveOthers = true時同時離開已進入的其他聊天室,用於切換直播間。entered是當前已進入的聊天室,StateFlow形式的Map。
狀態和訊息
kotlin
import com.deeprespond.im.*
room.send(OutgoingContent.Text("大家好"), priority = ChatroomPriority.NORMAL)
room.like()
room.snapshot.collect { snapshot ->
println(snapshot.messages.size)
}快照包含 info、attributes、attributesVersion、messages、state、removed。messages 按到達順序最多保留 500 條。state 為:
state | 含義 |
|---|---|
entering | 正在進入 |
in | 在聊天室中 |
reentering | 斷線後 SDK 正在自動重新進入 |
removed | 被移出、封禁,或聊天室已解散;按 removed.reason 提示使用者,不要反覆重新進入 |
left | 已離開 |
事件:room.events / on 可以訂閱 MessageReceived、MessageRecalled、MemberJoined、MemberLeft、Like、Dropped、Removed。上面的收集要放在頁面生命週期的協程中。
優先順序 priority:
HIGH只有所有者和管理員能用;NORMAL為普通聊天;LOW用於點贊、特效這類丟了也無妨的訊息,不重試,訊息太多時可能被丟棄。具體的限流規則由服務端決定。- 聊天室訊息不進普通聊天的傳送佇列,斷線期間不會排隊等待傳送。
屬性、撤回和成員
setAttributes(attributes, autoDelete, force)設定屬性(如語聊房的麥位),removeAttributes刪除。部分鍵可能失敗,請逐項檢查AttributeResult.failed。autoDelete = true的屬性在設定它的人離開時自動刪除;force覆蓋別人設定的鍵,只有所有者和管理員能用。recall(messageId)撤回聊天室訊息,members分頁查詢此刻在聊天室裡的人,refresh重新獲取聊天室資訊。- 屬性和成員事件只用於顯示,許可權仍以服務端的檢查為準。
管理
透過 room.manage 呼叫:
| 功能 | 方法 |
|---|---|
| 名稱、公告、容量等資料 | update(ChatroomPatch(...), version?) |
| 全員禁言、管理員、群主 | setMuteAll、setAdmin、transferOwner |
| 禁言、封禁、踢出 | mute、unmute、ban、unban、kick |
| 白名單 | allowlist.list/add/remove |
| 名單查詢 | mutes、bans |
| 解散 | dismiss |
- 禁言、封禁、踢出等批次操作返回每個人的結果,請逐項檢查
code/ok。 - 時長引數
duration是 Kotlin 的Duration。 - 離開頁面時呼叫
room.leave()才會真正離開聊天室;只取消狀態的收集不會離開。
