管理聊天室成员
更新时间:2022-02-28
技术原理
环信即时通讯 IM SDK 提供 EMChatRoomManager
类 和 EMChatRoom
类,支持对聊天室成员的管理,包括添加和移除聊天室成员等,主要方法如下:
fetchChatRoomMembers
获取聊天室成员列表;fetchChatRoomBlackList
获取聊天室黑名单列表;fetchChatRoomWhiteList
获取聊天室白名单列表;checkIfInChatRoomWhiteList
查看自己是否在聊天室白名单中;addToChatRoomWhiteList
添加成员至白名单;removeFromChatRoomWhiteList
将成员移除白名单;removeChatRoomMembers
将成员移出聊天室;blockChatroomMembers
添加聊天室黑名单;unblockChatRoomMembers
从聊天室黑名单中移除;fetchChatRoomMuteList
获取聊天室的禁言列表;muteChatRoomMembers
将一组成员禁言;unMuteChatRoomMembers
解除禁言;muteAllMembers
设置全员禁言;unmuteAllMembers
解除全员禁言;changeOwner
变更聊天室所有者;addChatRoomAdmin
添加聊天室管理员;removeChatRoomAdmin
移除聊天室管理员。
前提条件
开始前,请确保满足以下条件:
- 完成 SDK 初始化,详见 快速开始;
- 了解环信即时通讯 IM 的使用限制,详见 使用限制;
- 了解环信即时通讯 IM 聊天室相关限制, 详见 环信即时通讯 IM 价格。
实现方法
管理聊天室成员
获取聊天室成员列表
所有聊天室成员都可以调用该接口获取当前聊天室成员列表。
注意
聊天室所有者、管理员、普通成员都可以调用该接口。
示例代码如下:
// Asynchronous processing is required.
EMCursorResult<String> members = EMClient.getInstance().chatroomManager().fetchChatRoomMembers(chatRoomId, cursor, pageSize);
获取聊天室黑名单列表
管理员可以调用该接口获取当前聊天室黑名单成员列表。
注意
仅聊天室所有者和管理员可调用该方法。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatroom = EMClient.getInstance().chatroomManager().blockChatroomMembers(chatRoomId, members);
获取聊天室白名单列表
管理员可以调用该接口获取当前聊天室白名单成员列表。
注意
仅聊天室所有者和管理员可调用该方法。
示例代码如下:
EMClient.getInstance().chatroomManager().fetchChatRoomWhiteList(chatRoomId, new EMValueCallBack<List<String>>() {
@Override
public void onSuccess(List<String> value) {
}
@Override
public void onError(int error, String errorMsg) {
}
});
查看自己是否在聊天室白名单中
用户可调用如下 API 检查自己是否在群白名单中。
示例代码如下:
EMClient.getInstance().chatroomManager().checkIfInChatRoomWhiteList(chatRoomId, new EMValueCallBack<Boolean>() {
@Override
public void onSuccess(Boolean value) {
}
@Override
public void onError(int error, String errorMsg) {
}
});
添加白名单
管理员可调用该接口可以将成员加入到聊天室白名单。
注意
仅聊天室所有者和管理员可调用该方法。
示例代码如下:
EMClient.getInstance().chatroomManager().addToChatRoomWhiteList(chatRoomId, members, new EMValueCallBack<EMChatRoom>() {
@Override
public void onSuccess(EMChatRoom value) {
}
@Override
public void onError(int error, String errorMsg) {
}
});
移除白名单
管理员调用该接口可以将成员从聊天室白名单移除。
注意
仅聊天室所有者和管理员可调用该方法。
示例代码如下:
EMClient.getInstance().chatroomManager().removeFromChatRoomWhiteList(chatRoomId, members, new EMValueCallBack<EMChatRoom>() {
@Override
public void onSuccess(EMChatRoom value) {
}
@Override
public void onError(int error, String errorMsg) {
}
});
将成员移出聊天室
管理员调用该接口可以将成员移出聊天室。
注意
- 仅聊天室所有者和管理员可调用该方法;
- 聊天室成员会收到
onRemovedFromChatRoom
通知; - 移出原因:
EMAChatRoomManagerListener#BE_KICKED
; - 成员被移出后可重新进入聊天室。
示例代码如下:
// Asynchronous processing is required.
EMClient.getInstance().chatroomManager().removeChatRoomMembers(chatRoomId, members);
添加用户至聊天室黑名单
管理员可以调用该接口将成员加入聊天室黑名单。
注意
- 仅聊天室所有者和管理员可调用该方法;
- 聊天室成员会收到
onRemovedFromChatRoom
通知,触发其他成员的onMemberExited
回调方法; - 移除原因:
EMAChatRoomManagerListener#BE_KICKED
; - 黑名单中的成员需要聊天室所有者主动从黑名单移除后才能再次加入聊天室。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatRoom = EMClient.getInstance().chatroomManager().blockChatroomMembers(chatRoomId, members);
将成员移出聊天室黑名单
管理员可调用该接口将成员移出聊天室黑名单。
注意
仅聊天室所有者和管理员可调用该接口。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatRoom = EMClient.getInstance().chatroomManager().unblockChatRoomMembers(chatRoomId, members);
管理禁言
获取聊天室禁言列表
管理员可调用该接口获取聊天室禁言列表。
注意
- 仅聊天室所有者和管理员可调用该接口;
- 权限高者可禁言权限低者,反之不允许。
示例代码如下:
// Asynchronous processing is required.
Map<String, Long> memberMap = EMClient.getInstance().chatroomManager().fetchChatRoomMuteList(chatRoomId, pageNum, pageSize);
将成员禁言
管理员可调用该接口将成员禁言。
注意
- 仅聊天室所有者和管理员可调用该接口;
- 权限高者可禁言权限低者,反之不允许;
- 被禁言的聊天室成员和其他管理员会收到
onMuteListAdded
回调方法。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatRoom = EMClient.getInstance().chatroomManager().muteChatRoomMembers(chatRoomId, members, duration);
解除禁言
管理员可调用该接口将一组成员解除禁言。
注意
- 仅聊天室所有者和管理员可调用该接口;
- 权限高者可禁言权限低者,反之不允许;
- 被禁言的聊天室成员及其他管理员会收到
onMuteListRemoved
回调方法。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatRoom = EMClient.getInstance().chatroomManager().unMuteChatRoomMembers(chatRoomId, members);
设置全员禁言
管理员可调用该接口设置全员禁言。
注意
- 仅聊天室所有者和管理员可调用该接口;
- 设置全员禁言后,仅白名单中的成员可以发言;
- 聊天室成员会收到
onAllMemberMuteStateChanged
回调方法。
示例代码如下:
EMClient.getInstance().chatroomManager().muteAllMembers(chatRoomId, new EMValueCallBack<EMChatRoom>() {
@Override
public void onSuccess(EMChatRoom value) {
}
@Override
public void onError(int error, String errorMsg) {
}
});
解除全员禁言
管理员可调用该接口设置解除全员禁言。
注意
- 仅聊天室所有者和管理员可调用该接口;
- 解除全员禁言后,仅黑名单中的成员不可以发言;
- 聊天室成员会收到
onAllMemberMuteStateChanged
回调方法。
示例代码如下:
EMClient.getInstance().chatroomManager().unmuteAllMembers(chatRoomId, new EMValueCallBack<EMChatRoom>() {
@Override
public void onSuccess(EMChatRoom value) {
}
@Override
public void onError(int error, String errorMsg) {
}
});
管理管理员
变更聊天室所有者
聊天室所有者可调用该接口变更聊天室所有者。
注意
- 聊天室的所有者仅有一人;
- 仅聊天室所有者可调用该接口;
- 被操作成员及其他管理员会触发
onOwnerChanged
回调方法。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatRoom = EMClient.getInstance().chatroomManager().changeOwner(chatRoomId, newOwner);
添加聊天室管理员
聊天室所有者可调用该接口添加聊天室管理员。
注意
- 聊天室的所有者仅有一人;
- 仅聊天室所有者可调用该接口;
- 添加的管理员及其他管理员会触发
onAdminAdded
回调方法。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatRoom = EMClient.getInstance().chatroomManager().addChatRoomAdmin(chatRoomId, admin);
移除聊天室管理员
聊天室所有者可调用该接口移除聊天室管理员。
注意
- 聊天室的所有者仅有一人;
- 仅聊天室所有者可调用该接口;
- 被移除的管理员及其他管理员会触发
onAdminRemoved
回调方法。
示例代码如下:
// Asynchronous processing is required.
EMChatRoom chatRoom = EMClient.getInstance().chatroomManager().removeChatRoomAdmin(chatRoomId, admin);
聊天室相关回调
跳转到聊天室监听方法。