聊天室成员管理
更新时间: 2024/11/20 14:45:35
网易云信 IM 支持用户查询、添加、移除群组成员,管理成员角色等功能,拥有完善的成员权限体系及管理功能,群组内所有用户根据权限分为群主、管理员、以及普通成员。
本文内容适用的开发平台或框架如下表所示:
Android | iOS | macOS/Windows | Web/uni-app/小程序 | Node.js/Electron | HarmonyOS | Flutter |
---|---|---|---|---|---|---|
✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | ✔️️️️ | - |
技术原理
网易云信 NIM SDK 提供管理聊天室成员的相关方法,帮助您快速实现和使用聊天室的成员权限体系及管理功能。
聊天室成员角色分为固定成员和非固定成员两类:
- 固定成员:创建者、管理员、普通成员。总计上限 1000 人。
- 管理员由创建者分配和管理。管理员不能对创建者和其他管理员进行操作。
- 黑名单用户即被拉黑的聊天室成员,与聊天室断开连接且无法收发消息。
- 永久禁言用户即被执行永久禁言的聊天室成员,可接收消息但不能发送消息。解除永久禁言后,不影响临时禁言的到期时间。
- 若重复设置临时禁言,则后一次设置会覆盖前一次设置的到期时间(不累计)。
- 非固定成员无人数上限:
- 游客:普通游客、匿名游客。
- 除了创建者,其他成员刚加入聊天室时均默认是游客,根据登录参数(
anonymousMode
)判断是普通游客或匿名游客。 - 游客只有在线时才属于聊天室的非固定成员;游客进入聊天室又退出后,不属于聊天室的任何成员(和聊天室没有任何关系)。
- 除了创建者,其他成员刚加入聊天室时均默认是游客,根据登录参数(
- 虚构成员:虚构用户。仅支持通过新版服务端 API 添加聊天室虚构用户。
- 游客:普通游客、匿名游客。
前提条件
- 已 实现聊天室登录。
- 已在云信控制台开通 聊天室用户进出消息系统下发,具体请参考 开通和配置聊天室。只有开启该功能项,才会触发聊天室回调。
- 在使用聊天室服务中的 API 前,需要先调用
getChatroomService
方法获取聊天室服务类。
聊天室相关事件监听
在进行聊天室相关操作前,您可以先注册监听聊天室相关事件。监听后,在进行聊天室管理操作后,会收到对应的通知。
-
相关回调:
onChatroomMemberEnter
:成员进入聊天室回调,返回聊天室成员列表。聊天室内所有成员均会收到该回调。onChatroomMemberExit
:成员退出聊天室回调,返回accountId
。聊天室内所有成员均会收到该回调。onChatroomMemberRoleUpdated
:聊天室成员角色类型变更回调,返回聊天室成员以及变更后的成员角色。聊天室内所有成员均会收到该回调。onChatroomMemberInfoUpdated
:聊天室成员信息变更回调,返回变更的聊天室成员信息。聊天室内所有成员均会收到该回调。onSelfChatBannedUpdated
:聊天室成员本人禁言状态变更回调,返回chatBanned
禁言状态。onSelfTempChatBannedUpdated
:聊天室成员本人临时禁言状态变更回调,返回tempChatBanned
临时禁言状态和tempChatBannedDuration
临时禁言时长(秒)。onChatroomChatBannedUpdated
:聊天室整体禁言状态变更回调,返回chatBanned
禁言状态。
-
示例代码:
Androidjava
V2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId); V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService(); V2NIMChatroomListener listener = new V2NIMChatroomListener() { @Override public void onChatroomMemberEnter(V2NIMChatroomMember member) { } @Override public void onChatroomMemberExit(String accountId) { } @Override public void onChatroomMemberRoleUpdated(V2NIMChatroomMemberRole previousRole, V2NIMChatroomMember member) { } @Override public void onChatroomMemberInfoUpdated(V2NIMChatroomMember member) { } @Override public void onSelfChatBannedUpdated(boolean chatBanned) { } @Override public void onSelfTempChatBannedUpdated(boolean tempChatBanned, long tempChatBannedDuration) { } @Override public void onChatroomChatBannedUpdated(boolean chatBanned) { } }; v2ChatroomService.addChatroomListener(listener);
iOSobjective-c
@interface Listener: NSObject<V2NIMChatroomListener> - (void)addToService; @end @implementation Listener - (void)addToService { id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService]; [service addChatroomListener:self]; } - (void)onChatroomMemberEnter:(V2NIMChatroomMember *)member { } - (void)onChatroomMemberExit:(NSString *)accountId { } - (void)onChatroomMemberRoleUpdated:(V2NIMChatroomMemberRole)previousRole member:(V2NIMChatroomMember *)member { } - (void)onChatroomMemberInfoUpdated:(V2NIMChatroomMember *)member { } - (void)onSelfChatBannedUpdated:(BOOL)chatBanned { } - (void)onSelfTempChatBannedUpdated:(BOOL)tempChatBanned tempChatBannedDuration:(NSInteger)tempChatBannedDuration { } - (void)onChatroomChatBannedUpdated:(BOOL)chatBanned { } - (void)onMessageRevokedNotification:(NSString *)messageClientId messageTime:(NSTimeInterval)messageTime { } @end
macOS/Windowscpp
V2NIMChatroomListener listener; listener.onChatroomMemberEnter = [](V2NIMChatroomMember member) { // handle chatroom member enter }; listener.onChatroomMemberExit = [](nstd::string accountId) { // handle chatroom member exit }; listener.onChatroomMemberRoleUpdated = [](V2NIMChatroomMemberRole previousRole, V2NIMChatroomMember member) { // handle chatroom member role updated }; listener.onChatroomMemberInfoUpdated = [](V2NIMChatroomMember member) { // handle chatroom member info updated }; listener.onSelfChatBannedUpdated = [](bool chatBanned) { // handle self chat banned updated }; listener.onSelfTempChatBannedUpdated = [](bool tempChatBanned, uint64_t tempChatBannedDuration) { // handle self temp chat banned updated }; listener.onChatroomChatBannedUpdated = [](bool chatBanned) { // handle chatroom chat banned updated }; listener.onMessageRevokedNotification = [](nstd::string messageClientId, uint64_t messageTime) { // handle message revoked notification }; chatroomService.addChatroomListener(listener);
Web/uni-app/小程序typescript
chatroom.V2NIMChatroomService.on('onChatroomMemberEnter', function (member: V2NIMChatroomMember){}) chatroom.V2NIMChatroomService.on('onChatroomMemberExit', function (accountId: string){}) chatroom.V2NIMChatroomService.on('onChatroomMemberRoleUpdated', function (previousRole: V2NIMChatroomMemberRole, currentMember: V2NIMChatroomMember){}) chatroom.V2NIMChatroomService.on('onChatroomMemberInfoUpdated', function (member: V2NIMChatroomMember){}) chatroom.V2NIMChatroomService.on('onSelfChatBannedUpdated', function (chatBanned: boolean){}) chatroom.V2NIMChatroomService.on('onSelfTempChatBannedUpdated', function (tempChatBanned: boolean, tempChatBannedDuration: number){}) chatroom.V2NIMChatroomService.on('onChatroomChatBannedUpdated', function (chatBanned: boolean){})
Node.js/Electrontypescript
chatroom.chatroomService.on('chatroomMemberEnter', function (member: V2NIMChatroomMember){}) chatroom.chatroomService.on('chatroomMemberExit', function (accountId: string){}) chatroom.chatroomService.on('chatroomMemberRoleUpdated', function (previousRole: V2NIMChatroomMemberRole, currentMember: V2NIMChatroomMember){}) chatroom.chatroomService.on('chatroomMemberInfoUpdated', function (member: V2NIMChatroomMember){}) chatroom.chatroomService.on('selfChatBannedUpdated', function (chatBanned: boolean){}) chatroom.chatroomService.on('selfTempChatBannedUpdated', function (tempChatBanned: boolean, tempChatBannedDuration: number){}) chatroom.chatroomService.on('chatroomChatBannedUpdated', function (chatBanned: boolean){})
HarmonyOStypescript
chatroom.chatroomService.on('onChatroomMemberEnter', (member: V2NIMChatroomMember) => {}) chatroom.chatroomService.on('onChatroomMemberExit', (accountId: string) => {}) chatroom.chatroomService.on('onChatroomMemberRoleUpdated', (previousRole: V2NIMChatroomMemberRole, currentMember: V2NIMChatroomMember) => {}) chatroom.chatroomService.on('onChatroomMemberInfoUpdated', (member: V2NIMChatroomMember) => {}) chatroom.chatroomService.on('onSelfChatBannedUpdated', (chatBanned: boolean) => {}) chatroom.chatroomService.on('onSelfTempChatBannedUpdated', (tempChatBanned: boolean, tempChatBannedDuration: number) => {}) chatroom.chatroomService.on('onChatroomChatBannedUpdated', (chatBanned: boolean) => {})
获取聊天室成员
分页获取聊天室成员
通过调用 getMemberListByOption
方法分页获取所有聊天室成员信息。支持获取指定多种类型/被加入黑名单/被禁言/在线的聊天室成员:
memberRoles
:获取指定类型的聊天室成员onlyChatBanned
为true
:获取被加入黑名单的聊天室成员onlyChatBanned
为true
:获取被禁言的聊天室成员onlyOnline
为true
:获取在线的聊天室固定成员(创建者、管理员、普通成员)
该方法该操作从服务器同步数据,耗时可能较长。SDK 不缓存数据,您需要根据需要自行做好缓存。
示例代码如下:
java// 通过实例 ID 获取聊天室实例
V2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
V2NIMChatroomMemberQueryOption queryOption = new V2NIMChatroomMemberQueryOption();
// 设置需要查询的成员类型,如果列表为空,表示查询所有类型的成员
List<V2NIMChatroomMemberRole> memberRoles = getMemberRoles();
queryOption.setMemberRoles(memberRoles);
// 是否只返回黑名单成员, 默认false
queryOption.setOnlyBlocked(false);
// 是否只返回禁言用户, 默认false
queryOption.setOnlyChatBanned(false);
// 是否只返回在线成员, 默认false
queryOption.setOnlyOnline(false);
// 设置查询数量
queryOption.setLimit(100);
// 设置分页标识,首页传"",下一页传上次返回的 pageToken
queryOption.setPageToken("");
v2ChatroomService.getMemberListByOption(queryOption, new V2NIMSuccessCallback<V2NIMChatroomMemberListResult>() {
@Override
public void onSuccess(V2NIMChatroomMemberListResult v2NIMChatroomMemberListResult) {
// 查询成功
List<V2NIMChatroomMember> memberList = v2NIMChatroomMemberListResult.getMemberList();
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 查询失败
}
});
objective-c// 通过实例 ID 获取聊天室服务
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
V2NIMChatroomMemberQueryOption *queryOption = [[V2NIMChatroomMemberQueryOption alloc] init];
// 设置需要查询的成员类型,如果列表为空,表示查询所有类型的成员
queryOption.memberRoles = @[@(V2NIM_CHATROOM_MEMBER_ROLE_NORMAL_GUEST), @(V2NIM_CHATROOM_MEMBER_ROLE_ANONYMOUS_GUEST)];
// 是否只返回黑名单成员, 默认false
queryOption.onlyBlocked = NO;
// 是否只返回禁言用户, 默认false
queryOption.onlyChatBanned = NO;
// 是否只返回在线成员, 默认false
queryOption.onlyOnline = NO;
// 设置查询数量
queryOption.limit = 100;
// 设置分页标识,首页传"",下一页传上次返回的 pageToken
queryOption.pageToken = @"";
[service getMemberListByOption:queryOption
success:^(V2NIMChatroomMemberListResult *result)
{
// 查询成功
}
failure:^(V2NIMError *error)
{
// 查询失败
}];
cppV2NIMChatroomMemberQueryOption queryOption;
queryOption.pageToken = 0; // first page
queryOption.limit = 10;
chatroomService.getMemberListByOption(
queryOption,
[](V2NIMChatroomMemberListResult result) {
// get member list succeeded
},
[](V2NIMError error) {
// get member list failed, handle error
});
typescriptawait chatroom.V2NIMChatroomService.getMemberListByOption({
// 普通成员
memberRoles: [V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_NORMAL],
onlyBlocked: false,
onlyChatBanned: false,
onlyOnline: false,
limit: 100
})
typescriptconst result = await chatroomService.getMemberListByOption({
limit: 10
})
console.log(result)
typescriptawait this.chatroomClient.chatroomService.getMemberListByOption({
// 普通成员
memberRoles: [V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_NORMAL],
onlyBlocked: false,
onlyChatBanned: false,
onlyOnline: false,
limit: 100
})
批量获取指定聊天室成员
通过调用 getMemberByIds
方法批量获取指定聊天室成员信息。
- 单次查询数量上限为 200。
- 返回聊天室成员信息按照输入
accountIds
顺序排序。
示例代码如下:
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
// 待查询的账号列表,为空或者 size==0,或者 size>200,返回参数错误
List<String> accountIds = getAccountIds();
v2ChatroomService.getMemberByIds(accountIds, new V2NIMSuccessCallback<List<V2NIMChatroomMember>>() {
@Override
public void onSuccess(List<V2NIMChatroomMember> v2NIMChatroomMembers) {
// 查询成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 查询失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
// 待查询的账号列表,为空或者 size==0,或者 size>200,返回参数错误
NSArray<NSString *> *accountIds = @[@"accountId0", @"accountId1", @"accountId2"];
[service getMemberByIds:accountIds
success:^(NSArray<V2NIMChatroomMember *> *members) {
// 获取成功
}
failure:^(V2NIMError *error) {
// 获取失败
}];
cppchatroomService.getMemberByIds(
{"accountId1", "accountId2"},
[](nstd::vector<V2NIMChatroomMember> members) {
// get members by account ids succeeded
},
[](V2NIMError error) {
// get members by account ids failed, handle error
});
typescriptgetMemberByIds(accountIds: string[]): Promise<V2NIMChatroomMember[]>
typescriptconst result = await chatroomService.getMemberByIds(['accountId1', 'accountId2'])
console.log(result)
typescriptconst members = await this.chatroomClient.chatroomService.getMemberByIds(['accid1', 'accid2'])
根据标签分页获取聊天室成员
通过调用 getMemberListByTag
方法根据标签分页获取聊天室成员列表。
该方法该操作从服务器同步数据,耗时可能较长。SDK 不缓存数据,您需要根据需要自行做好缓存。
示例代码如下:
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
V2NIMChatroomTagMemberOption option = new V2NIMChatroomTagMemberOption();
// 设置查询 Tag,必传字段,如果不传,会返回参数错误
option.setTag("xxx");
// 设置查询数量
option.setLimit(100);
// 设置分页标识,首页传"",下一页传上次返回的 pageToken
option.setPageToken("");
v2ChatroomService.getMemberListByTag(option, new V2NIMSuccessCallback<V2NIMChatroomMemberListResult>() {
@Override
public void onSuccess(V2NIMChatroomMemberListResult v2NIMChatroomMemberListResult) {
// 查询成功
String pageToken = v2NIMChatroomMemberListResult.getPageToken();
List<V2NIMChatroomMember> memberList = v2NIMChatroomMemberListResult.getMemberList();
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 查询失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
V2NIMChatroomTagMemberOption *option = [[V2NIMChatroomTagMemberOption alloc] init];
// 设置查询 Tag,必传字段,如果不传,会返回参数错误
option.tag = @"xxx";
// 设置查询数量
option.limit = 100;
// 设置分页标识,首页传"",下一页传上次返回的 pageToken
option.pageToken = @"";
[service getMemberListByTag:option
success:^(V2NIMChatroomMemberListResult *result)
{
// 获取成功
}
failure:^(V2NIMError *error)
{
// 获取失败
}];
cppV2NIMChatroomTagMemberOption option;
option.tag = "tag1";
option.pageToken = "";
option.limit = 10;
chatroomService.getMemberListByTag(
option,
[](V2NIMChatroomMemberListResult result) {
// get member list by tag succeeded
},
[](V2NIMError error) {
// get member list by tag failed, handle error
});
typescriptconst result = await chatroom.V2NIMChatroom.getMemberListByTag({
tag: 'abc', // 查询的 tag
limit: 100
})
typescriptconst result = await chatroomService.getMemberListByTag({
tag: 'tag',
limit: 10
})
typescriptconst result: V2NIMChatroomMemberListResult = await this.chatroomClient.chatroomService.getMemberListByTag({
tag: 'abc', // 查询的 tag
limit: 100
})
根据标签获取聊天室成员数量
通过调用 getMemberCountByTag
方法获取指定标签下的聊天室成员人数。
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
// 查询的 tag,必传字段,传 null 或者 "",会返回参数错误
String tag = "xxx";
v2ChatroomService.getMemberCountByTag(tag, new V2NIMSuccessCallback<Long>() {
@Override
public void onSuccess(Long count) {
// 查询成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 查询失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
// 查询的 tag,必传字段,传 null 或者 "",会返回参数错误
NSString *tag = @"xxx";
[service getMemberCountByTag:tag
success:^(NSInteger memberCount)
{
// 获取成功
}
failure:^(V2NIMError *error)
{
// 获取失败
}];
cppchatroomService.getMemberCountByTag(
"tag1",
[](uint64_t count) {
// get member count by tag succeeded
},
[](V2NIMError error) {
// get member count by tag failed, handle error
});
typescriptconst count = await chatroom.V2NIMChatroomService.getMemberCountByTag('tagName')
typescriptconst count = await chatroomService.getMemberCountByTag('tag')
typescriptconst count = await this.chatroomClient.chatroomService.getMemberCountByTag('tagName')
修改聊天室成员自身信息
通过调用 updateSelfMemberInfo
方法更新本人的聊天室成员信息。目前支持更新昵称、头像、服务端扩展字段及反垃圾配置项。
支持设置更新后是否通知,若设置通知,聊天室内成员会收到类型为 MEMBER_INFO_UPDATED
的通知消息。
更新成功后,聊天室内成员会收到 onChatroomMemberInfoUpdated
回调。
示例代码如下:
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
V2NIMChatroomSelfMemberUpdateParams updateParams = new V2NIMChatroomSelfMemberUpdateParams();
// 设置聊天室中显示的昵称
updateParams.setRoomNick("xxx");
// 设置头像
updateParams.setRoomAvatar("xxx");
// 设置成员扩展字段
updateParams.setServerExtension("xxx");
// 以上三个字段至少需要设置一个,否则会返回参数错误
// 设置是否需要通知
updateParams.setNotificationEnabled(true);
// 设置本次操作生成的通知中的扩展字段
updateParams.setNotificationExtension("xxx");
// 设置更新信息持久化, 只针对固定成员身份生效
updateParams.setPersistence(true);
// 反垃圾配置,可不传
V2NIMAntispamConfig antispamConfig = new V2NIMAntispamConfig();
v2ChatroomService.updateSelfMemberInfo(updateParams, antispamConfig, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
// 更新成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 更新失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
V2NIMChatroomSelfMemberUpdateParams *updateParams = [[V2NIMChatroomSelfMemberUpdateParams alloc] init];
// 设置聊天室中显示的昵称
updateParams.roomNick = @"xxx";
// 设置头像
updateParams.roomAvatar = @"xxx";
// 设置成员扩展字段
updateParams.serverExtension = @"xxx";
// 以上三个字段至少需要设置一个,否则会返回参数错误
// 设置是否需要通知
updateParams.notificationEnabled = YES;
// 设置本次操作生成的通知中的扩展字段
updateParams.notificationExtension = @"xxx";
// 设置更新信息持久化, 只针对固定成员身份生效
updateParams.persistence = YES;
// 反垃圾配置,可不传
V2NIMAntispamConfig *antispamConfig = [[V2NIMAntispamConfig alloc] init];
[service updateSelfMemberInfo:updateParams
antispamConfig:antispamConfig
success:^()
{
// 更新成功
}
failure:^(V2NIMError *error)
{
// 更新失败
}];
cppV2NIMChatroomSelfMemberUpdateParams updateParams;
updateParams.roomNick = "roomNick";
V2NIMAntispamConfig antispamConfig;
chatroomService.updateSelfMemberInfo(
updateParams,
antispamConfig,
[]() {
// update self member info succeeded
},
[](V2NIMError error) {
// update self member info failed, handle error
});
typescriptawait chatroom.V2NIMChatroomService.updateSelfMemberInfo({
roomNick: 'nick', // 聊天室昵称
roomAvatar: 'https://www.xxx.com/1.jpg', // 头像
serverExtension: 'extension', // 扩展字段
notificationEnabled: true, // 是否通知
persistence: true // 是否持久化。若为否,则信息在下线后失效
})
typescriptawait chatroomService.updateSelfMemberInfo({
roomNick: 'new room nickname'
}, {})
typescriptawait this.chatroomClient.chatroomService.updateSelfMemberInfo({
roomNick: 'nick', // 聊天室昵称
roomAvatar: 'https://www.xxx.com/1.jpg', // 头像
serverExtension: 'extension', //扩展字段
notificationEnabled: true, //是否通知
persistence: true //是否持久化。若为否,则信息在下线后失效
})
更新聊天室成员角色
通过调用 updateMemberRole
方法更新聊天室成员角色,包括以下场景:
-
将普通游客、普通成员设置为管理员或反之,该操作仅聊天室 创建者 有权限。
-
将普通成员设置为普通游客或反之,该操作仅聊天室 管理员和创建者 有权限。
-
不允许操作虚构用户和匿名游客。
更新成功后,聊天室内所有成员收到 onChatroomMemberRoleUpdated
回调,及通类型为 ROLE_UPDATE
的通知消息。
示例代码如下:
java// 通过实例 ID 获取聊天室实例
V2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
// 被操作的账号 ID
String accountId = "test";
V2NIMChatroomMemberRoleUpdateParams updateParams = new V2NIMChatroomMemberRoleUpdateParams();
// 设置成员角色,必传字段,如果不传,会返回参数错误
// 不支持设置为
// V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_CREATOR
// V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_ANONYMOUS_GUEST
// V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_VIRTUAL
updateParams.setMemberRole(V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_MANAGER);
// 设置成员等级,可不传
updateParams.setMemberLevel(1);
// 设置通知扩展字段,可不传
updateParams.setNotificationExtension("xxx");
v2ChatroomService.updateMemberRole(accountId, updateParams, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
//更新成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
//更新失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:instanceId] getChatroomService];
// 被操作的账号 ID
NSString *accountId = @"test";
V2NIMChatroomMemberRoleUpdateParams *updateParams = [[V2NIMChatroomMemberRoleUpdateParams alloc] init];
// 设置成员角色,必传字段,如果不传,会返回参数错误
// 不支持设置为
// V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_CREATOR
// V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_ANONYMOUS_GUEST
// V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_VIRTUAL
updateParams.memberRole = V2NIM_CHATROOM_MEMBER_ROLE_MANAGER;
// 设置成员等级,可不传
updateParams.memberLevel = 1;
// 设置通知扩展字段,可不传
updateParams.notificationExtension = @"xxx";
[service updateMemberRole:accountId
updateParams:updateParams
success:^()
{
// 更新成功
}
failure:^(V2NIMError *error)
{
// 更新失败
}];
cppV2NIMChatroomMemberRoleUpdateParams updateParams;
updateParams.memberRole = V2NIM_CHATROOM_MEMBER_ROLE_MANAGER;
chatroomService.updateMemberRole(
"accountId",
updateParams,
[]() {
// update member role succeeded
},
[](V2NIMError error) {
// update member role failed, handle error
});
typescriptawait chatroom.V2NIMChatroomService.updateMemberRole('accid', {
// 设置为管理员
memberRole: V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_MANAGER,
// 用户登记
memberLevel: 10,
// 通知的扩展字段
notificationExtension: 'ps'
})
typescriptawait chatroomService.updateMemberRole('accountId', {
memberRole: 2
})
typescriptawait this.chatroomClient.chatroomService.updateMemberRole('accid', {
// 设置为管理员
memberRole: V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_MANAGER,
// 用户登记
memberLevel: 10,
// 通知的扩展字段
notificationExtension: 'ps'
})
设置聊天室成员黑名单状态
通过调用 setMemberBlockedStatus
方法来设置聊天室成员黑名单状态,支持将成员加入黑名单或从黑名单中移除。
加入黑名单后:
- 聊天室所有成员收到成员信息变更回调
onChatroomMemberInfoUpdated
和类型为MEMBER_BLOCK_ADDED
的通知消息。 - 聊天室黑名单用户收到被踢出聊天室回调
onChatroomKicked
,被踢原因为拉黑,同时与聊天室服务器断开连接,无法收发聊天室消息。
移除黑名单后:
- 聊天室所有成员收到成员信息变更回调
onChatroomMemberInfoUpdated
和类型为MEMBER_BLOCK_REMOVED
的通知消息。 - 从聊天室普通成员身份变为普通游客身份。
- 该操作仅聊天室创建者和管理员有权限。
- 如果被操作方为管理员,则仅聊天室创建者有权限。
- 不允许操作虚构用户和匿名游客。
示例代码如下:
java// 通过实例 ID 获取聊天室实例
V2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
// 被操作的账号 ID
String accountId = "test";
// 设置黑名单状态
boolean blocked = true;
// 设置通知扩展字段,可不传
String notificationExtension = "xxx";
v2ChatroomService.setMemberBlockedStatus(accountId, blocked, notificationExtension, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
// 设置成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 设置失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
// 被操作的账号 ID
NSString *accountId = @"test";
// 设置黑名单状态
BOOL blocked = YES;
// 设置通知扩展字段,可不传
NSString *notificationExtension = @"xxx";
[service setMemberBlockedStatus:accountId
blocked:blocked
notificationExtension:notificationExtension
success:^()
{
// 设置成功
}
failure:^(V2NIMError *error)
{
// 设置失败
}];
cppchatroomService.setMemberBlockedStatus(
"accountId",
true,
"notificationExtension",
[]() {
// set member blocked status succeeded
},
[](V2NIMError error) {
// set member blocked status failed, handle error
});
typescriptawait chatroom.V2NIMChatroomService.setMemberBlockedStatus('accountId', true, 'extension')
typescriptawait chatroomService.setMemberBlockedStatus('accountId', true, 'your notification extension')
typescriptawait this.chatroomClient.chatroomService.setMemberBlockedStatus('accid', true, 'extension')
设置聊天室成员禁言状态
通过调用 setMemberChatBannedStatus
方法来设置聊天室成员禁言状态,支持将成员永久禁言或解除永久禁言。
被永久禁言后:
- 聊天室所有成员收到成员信息变更回调
onChatroomMemberInfoUpdated
和类型为MEMBER_CHAT_BANNED_ADDED
的通知消息。 - 聊天室禁言用户收到禁言状态变更回调
onSelfChatBannedUpdated
,无法在聊天室内发送消息,但可以接收消息。
解除永久禁言后:
- 聊天室所有成员收到成员信息变更回调
onChatroomMemberInfoUpdated
和类型为MEMBER_CHAT_BANNED_REMOVED
的通知消息。 - 聊天室禁言用户收到禁言状态变更回调
onSelfChatBannedUpdated
,恢复在聊天室内发送消息权限。
- 该操作仅聊天室创建者和管理员有权限。
- 如果被操作方为管理员,则仅聊天室创建者有权限。
- 不允许操作虚构用户和匿名游客。
示例代码如下:
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
// 被操作的账号ID
String accountId = "test";
// 设置禁言状态
boolean chatBanned = true;
// 设置通知扩展字段,可不传
String notificationExtension = "xxx";
v2ChatroomService.setMemberChatBannedStatus(accountId, chatBanned, notificationExtension, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
// 设置成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 设置失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
// 被操作的账号 ID
NSString *accountId = @"test";
//设置禁言状态
BOOL chatBanned = YES;
// 设置通知扩展字段,可不传
NSString *notificationExtension = @"xxx";
[service setMemberChatBannedStatus:accountId
chatBanned:chatBanned
notificationExtension:notificationExtension
success:^()
{
// 设置成功
}
failure:^(V2NIMError *error)
{
// 设置失败
}];
cppchatroomService.setMemberChatBannedStatus(
"accountId",
true,
"notificationExtension",
[]() {
// set member chat banned status succeeded
},
[](V2NIMError error) {
// set member chat banned status failed, handle error
});
typescriptawait chatroom.V2NIMChatroomService.setMemberChatBannedStatus('accid', true, 'extension')
typescriptawait chatroomService.setMemberChatBannedStatus('accountId', true, 'your notification extension')
typescriptawait this.chatroomClient.chatroomService.setMemberChatBannedStatus('accid', true, 'extension')
设置聊天室成员临时禁言状态
通过调用 setMemberTempChatBanned
方法来设置聊天室成员临时禁言状态,支持将成员临时禁言或解除临时禁言。
被临时禁言后(临时禁言时长不为 0):
- 聊天室所有成员收到成员信息变更回调
onChatroomMemberInfoUpdated
和类型为MEMBER_TEMP_CHAT_BANNED_ADDED
的通知消息。 - 聊天室临时禁言用户收到临时禁言状态变更回调
onSelfTempChatBannedUpdated
,临时禁言期间内无法在聊天室内发送消息,但可以接收消息。临时禁言结束后,恢复发送消息权限。
解除永久禁言后(临时禁言时长为 0):
- 聊天室所有成员收到成员信息变更回调
onChatroomMemberInfoUpdated
和类型为MEMBER_TEMP_CHAT_BANNED_REMOVED
的通知消息。 - 聊天室临时禁言用户收到禁言状态变更回调
onSelfTempChatBannedUpdated
,恢复在聊天室内发送消息权限。
- 该操作仅聊天室创建者和管理员有权限。
- 如果被操作方为管理员,则仅聊天室创建者有权限。
- 不允许操作虚构用户和匿名游客。
示例代码如下:
java// 通过实例 ID 获取聊天室实例
V2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
// 被操作的账号 ID
String accountId = "test";
// 设置临时禁言时长,单位:秒,单次最大:30天,取消则设置为:0
long tempChatBannedDuration = 1000L;
// 是否需要发送广播通知,true:通知,false:不通知
boolean notificationEnabled = true;
// 设置通知扩展字段,可不传
String notificationExtension = "xxx";
v2ChatroomService.setMemberTempChatBanned(accountId, tempChatBannedDuration, notificationEnabled, notificationExtension, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
// 设置成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 设置失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
// 被操作的账号 ID
NSString *accountId = @"test";
// 设置临时禁言时长,单位:秒,单次最大:30天,取消则设置为:0
long tempChatBannedDuration = 1000L;
// 是否需要发送广播通知,true:通知,false:不通知
BOOL notificationEnabled = YES;
// 设置通知扩展字段,可不传
NSString *notificationExtension = @"xxx";
[service setMemberTempChatBanned:accountId
tempChatBannedDuration:tempChatBannedDuration
notificationEnabled:notificationEnabled
notificationExtension:notificationExtension
success:^()
{
// 设置成功
}
failure:^(V2NIMError *error)
{
// 设置失败
}];
cppchatroomService.setMemberTempChatBanned(
"accountId",
60,
true,
"notificationExtension",
[]() {
// set member temp chat banned succeeded
},
[](V2NIMError error) {
// set member temp chat banned failed, handle error
});
typescriptawait chatroom.V2NIMChatroomService.setMemberTempChatBanned('accid', 60 * 1000, true, 'extension')
typescriptawait chatroomService.setMemberTempChatBanned('accountId', 10, true, 'your notification extension')
typescriptawait this.chatroomClient.chatroomService.setMemberTempChatBanned('accid', 60 * 1000, true, 'extension')
踢出聊天室成员
通过调用 kickMember
方法将指定成员踢出聊天室。踢出的同时退出聊天室。
踢出成功后:
- 被踢用户收到被踢出聊天室回调
onChatroomKicked
,以及退出聊天室回调onChatroomExited
。 - 聊天室内所有成员收到成员退出聊天室
onChatroomMemberExit
回调,及类型为MEMBER_KICKED
的通知消息。
- 该操作仅聊天室创建者和管理员有权限。
- 如果被操作方为管理员,则仅聊天室创建者有权限。
- 不允许操作虚构用户和匿名游客。
示例代码如下:
javaV2NIMChatroomClient v2ChatroomClient = V2NIMChatroomClient.getInstance(instanceId);
V2NIMChatroomService v2ChatroomService = v2ChatroomClient.getChatroomService();
// 被踢的成员ID
String accountId = "test";
// 设置通知扩展字段,可不传
String notificationExtension = "xxx";
v2ChatroomService.kickMember(accountId, notificationExtension, new V2NIMSuccessCallback<Void>() {
@Override
public void onSuccess(Void unused) {
// 踢出成功
}
}, new V2NIMFailureCallback() {
@Override
public void onFailure(V2NIMError error) {
// 踢出失败
}
});
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];
// 被踢的成员 ID
NSString *accountId = @"accountId";
// 设置通知扩展字段,可不传
NSString *notificationExtension = @"xxx";
[service kickMember:accountId
notificationExtension:notificationExtension
success:^() {
// 踢出成功
}
failure:^(V2NIMError *error) {
// 踢出失败
}];
cppchatroomService.kickMember(
"accountId",
"notificationExtension",
[]() {
// kick member succeeded
},
[](V2NIMError error) {
// kick member failed, handle error
});
typescriptawait chatroom.V2NIMChatroomService.kickMember('account', 'notificationExtension')
typescriptawait chatroomService.kickMember('accountId', 'your notification extension')
typescriptawait this.chatroomClient.chatroomService.kickMember('account', 'notificationExtension')
相关信息
涉及接口
API | 说明 |
---|---|
V2NIMChatroomClient.getChatroomService |
获取聊天室服务类 |
addChatroomListener |
注册聊天室监听器 |
removeChatroomListener |
取消注册聊天室监听器 |
V2NIMChatroomMemberRole |
聊天室成员角色 |
V2NIMChatroomEnterParams.anonymousMode |
聊天室登录参数 |
V2NIMChatroomMember |
聊天室成员 |
getMemberListByOption |
分页获取所有聊天室成员信息 |
V2NIMChatroomMemberQueryOption |
分页查询选项配置 |
getMemberByIds |
批量获取指定聊天室成员信息 |
getMemberListByTag |
根据标签分页获取聊天室成员列表 |
getMemberCountByTag |
获取指定标签下的聊天室成员人数 |
updateSelfMemberInfo |
更新本人的聊天室成员信息 |
updateMemberRole |
更新聊天室成员角色 |
setMemberBlockedStatus |
设置聊天室成员黑名单状态 |
setMemberChatBannedStatus |
设置聊天室成员禁言状态 |
setMemberTempChatBanned |
设置聊天室成员临时禁言状态 |
kickMember |
将指定成员踢出聊天室 |
API | 说明 |
---|---|
V2NIMChatroomClient.getChatroomService |
获取聊天室服务类 |
on("EventName") |
注册聊天室监听器 |
off("EventName") |
取消注册聊天室监听器 |
V2NIMChatroomMemberRole |
聊天室成员角色 |
V2NIMChatroomEnterParams.anonymousMode |
聊天室登录参数 |
V2NIMChatroomMember |
聊天室成员 |
getMemberListByOption |
分页获取所有聊天室成员信息 |
V2NIMChatroomMemberQueryOption |
分页查询选项配置 |
getMemberByIds |
批量获取指定聊天室成员信息 |
getMemberListByTag |
根据标签分页获取聊天室成员列表 |
getMemberCountByTag |
获取指定标签下的聊天室成员人数 |
updateSelfMemberInfo |
更新本人的聊天室成员信息 |
updateMemberRole |
更新聊天室成员角色 |
setMemberBlockedStatus |
设置聊天室成员黑名单状态 |
setMemberChatBannedStatus |
设置聊天室成员禁言状态 |
setMemberTempChatBanned |
设置聊天室成员临时禁言状态 |
kickMember |
将指定成员踢出聊天室 |