用户、好友与在线状态
用户资料、好友关系、黑名单、在线状态和登录设备属于不同模块。实际访问权限由运行策略控制。
本人和其他用户资料
val me = im.users.refreshMe()
im.users.updateMe(nickname = "小明")
val profiles = im.users.fetch(listOf("bob"), force = true)
println(profiles["bob"]?.nickname)users.me 是本人资料 StateFlow;get(username) 同步读取缓存,无资料时可返回 null。fetch 返回用户名到资料的 Map,默认遵循缓存有效期,force 强制刷新。
updateMe 支持 nickname、avatarUrl、attributes、clearAttributes、version。attributes 中某个值为 null 用于删除该项;clearAttributes 清空属性。头像先用 USER_AVATAR 上传,再提交文件 URL。myMute 提供本人禁言信息,不能靠 UI 隐藏按钮代替服务端检查。
好友和申请
im.friends.requests.send("bob", message = "你好,我是小明")
im.friends.requests.accept("bob", remark = "同事")
im.friends.update("bob", remark = "项目同事")friends.list / listFlow 提供好友列表;get 读取本地好友,check 批量检查关系,remove 删除好友。listInfo 包含列表信息,见数据类型。
received / sent 分页查询申请;decline 拒绝,markRead 推进申请已读位置,unreadCount 是 StateFlow。不同加好友模式下 send 的结果可能直接建好友关系,也可能建立申请,按返回值和最新列表展示。
黑名单与加好友方式
im.friends.blacklist.add("bob")
val blocked = im.friends.blacklist.has("bob")
im.friends.blacklist.remove("bob")blacklist.list / listFlow 订阅黑名单。friends.settings.get() 查询本人加好友设置,set(mode) 更新;mode 为 null 时使用应用默认值。拉黑对消息和通话的影响以服务端策略为准。
在线状态
val subscription = im.presence.subscribe(listOf("bob"))
try {
val known = im.presence.get("bob")
val queried = im.presence.query(listOf("bob"))
println(known)
println(queried)
} finally {
subscription.close()
}subscribe 建立持续订阅,页面离开时关闭;变化用 PresenceChanged 事件接收。query 为主动查询,get 为内存快照。查询不到、订阅失败或权限不足不能一概显示“离线”,应区分未知、不可见和实际离线,观察 PresenceSubscribeFailed。
登录设备
devices.online() 读取当前在线设备;sessions() 查询登录会话;kick(sessionId) 踢掉指定会话。设备数上限、同类平台替换与凭证规则见多端登录。DevicesChanged、DevicesNewLogin 通知变化。
