Skip to content
v1
文档/Android SDK/好友

黑名单管理

黑名单是独立的公开 Manager,不通过 BimFriendService 或消息接口操作。用户身份由 domainId + userId 共同确定。

获取 Manager

kotlin
fun BimImManager.getBlacklistManager(): BimBlacklistManager
kotlin
val blacklist = BimImManager.getInstance().getBlacklistManager()

查询黑名单

kotlin
suspend fun fetchBlacklist(
    options: BimBlacklistQueryOptions = BimBlacklistQueryOptions(),
): List<BimBlacklistEntry>
kotlin
val entries = blacklist.fetchBlacklist(
    BimBlacklistQueryOptions(
        skip = 0,
        limit = 50,
        refreshTime = -1L,
    ),
)
entries.forEach { entry ->
    println("blocked=${entry.userInfo.getUserId()} domain=${entry.userInfo.userId.domainId}")
}
参数默认值说明
skip0跳过的原始服务端记录数,负数会归一化为 0
limit200单页数量,SDK 限制在 1..200
refreshTime-1增量查询起始时间,单位为毫秒;-1 表示全量

返回值是当前仍在黑名单中的活动记录。分页结束应以原始服务端页数量小于请求 limit 为依据,不能因本地去重后的数量不足而提前结束;增量查询不会返回移除墓碑。

加入黑名单

kotlin
suspend fun addUserToBlacklist(user: BimUserInfo): BimBlacklistAddResult
kotlin
val result = blacklist.addUserToBlacklist(user)
println("blocked=${result.blocked.userInfo.getUserId()}")
println("friendDeleted=${result.friendDeleted}")

加入操作要求目标用户 ID 有效,不能将当前登录用户加入黑名单。目标缺少域时,SDK 使用当前 appId 作为域。BimBlacklistAddResult.friendDeleted 表示该操作是否同时删除了双方好友关系。

加入黑名单会使双方待处理好友申请失效;如果原本是好友,好友关系也可能被删除。移入黑名单不会向消息列表插入系统消息。

移出黑名单

kotlin
suspend fun removeUserFromBlacklist(user: BimUserInfo): BimBlacklistEntry
kotlin
val removed = blacklist.removeUserFromBlacklist(user)
println("removed=${removed.userInfo.getUserId()}")

移出黑名单不会自动恢复好友关系或历史好友申请,需要重新发起好友申请。目标缺少域时由服务端按当前登录域处理。

黑名单变化监听

kotlin
fun BimImManager.addFriendListener(listener: BimFriendListener)
fun BimImManager.removeFriendListener(listener: BimFriendListener)
fun BimImManager.removeFriendListener(key: String)
kotlin
val listener = object : BimFriendListener {
    override val key = "blacklist_listener"

    override fun onUserAddedToBlacklist(user: BimUserInfo) {
        // 当前账号的其他设备或远端操作将 user 加入黑名单。
    }

    override fun onUserRemovedFromBlacklist(user: BimUserInfo) {
        // 当前账号的其他设备或远端操作将 user 移出黑名单。
    }
}
BimImManager.getInstance().addFriendListener(listener)

当前设备主动调用加入/移出接口成功后,以接口返回值更新当前页面;监听器用于表达远端或其他设备产生的变化,避免同一操作重复处理。好友 listener 不负责展示消息气泡。

兼容 callback

三类操作同时提供现有 callback 适配重载:

kotlin
suspend fun fetchBlacklist(
    options: BimBlacklistQueryOptions,
    callback: BimResultCallback<List<BimBlacklistEntry>>,
)
suspend fun addUserToBlacklist(
    user: BimUserInfo,
    callback: BimResultCallback<BimBlacklistAddResult>,
)
suspend fun removeUserFromBlacklist(
    user: BimUserInfo,
    callback: BimResultCallback<BimBlacklistEntry>,
)

callback 成功或失败只回调一次;新代码优先使用 suspend 主路径。