聊天室
聊天室适合直播互动等临时在线场景,成员随连接进入和离开;它与有固定成员、离线历史的群聊不同。容量、消息保留和优先级规则见聊天室。
列表和进入
val page = im.chatrooms.list(namePrefix = "直播")
val room = im.chatrooms.enter(roomId, leaveOthers = false)
println(room.snapshot.value.state)list / get 查询房间,create 创建(需要相应客户端权限),onlineCounts 批量取人数。enter 的 ext 为可选字符串;leaveOthers 控制是否离开其他房间。entered 是当前进入房间的 StateFlow Map。
状态和消息
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 为 entering、in、reentering、removed、left。断线后 SDK 恢复进入;removed 时按 removed.reason 提示,不要无限重入被封禁的房间。
room.events / on 可订阅 MessageReceived、MessageRecalled、MemberJoined、MemberLeft、Like、Dropped、Removed。此段收集需放在页面生命周期协程中。priority 可选 HIGH、NORMAL、LOW,HIGH 仅所有者和管理员可用,LOW 不重试且可能被丢弃;实际拥塞规则由服务端控制;聊天室消息不使用普通聊天的离线发送队列。
属性、撤回和成员
setAttributes(attributes, autoDelete, force) 更新属性,removeAttributes 删除;AttributeResult.failed 要逐项检查。autoDelete 表示随成员离开清除,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(),仅取消状态收集不会离开聊天室。
