聊天室成员管理

更新时间: 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 禁言状态。
  • 示例代码:

    Android
    javaV2NIMChatroomClient 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);
    
    iOS
    objective-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/Windows
    cppV2NIMChatroomListener 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/小程序
    typescriptchatroom.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/Electron
    typescriptchatroom.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){})
    
    HarmonyOS
    typescriptchatroom.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:获取指定类型的聊天室成员
  • onlyChatBannedtrue:获取被加入黑名单的聊天室成员
  • onlyChatBannedtrue:获取被禁言的聊天室成员
  • onlyOnlinetrue:获取在线的聊天室固定成员(创建者、管理员、普通成员)

该方法该操作从服务器同步数据,耗时可能较长。SDK 不缓存数据,您需要根据需要自行做好缓存。

示例代码如下:

Android
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) {
        // 查询失败
    }
});
iOS
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)
                       {
                           // 查询失败
                       }];
macOS/Windows
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
    });
Web/uni-app/小程序
typescriptawait chatroom.V2NIMChatroomService.getMemberListByOption({
    // 普通成员
    memberRoles: [V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_NORMAL],
    onlyBlocked: false,
    onlyChatBanned: false,
    onlyOnline: false,
    limit: 100
})
Node.js/Electron
typescriptconst result = await chatroomService.getMemberListByOption({
    limit: 10
})
console.log(result)
HarmonyOS
typescriptawait this.chatroomClient.chatroomService.getMemberListByOption({
    // 普通成员
    memberRoles: [V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_NORMAL],
    onlyBlocked: false,
    onlyChatBanned: false,
    onlyOnline: false,
    limit: 100
})

批量获取指定聊天室成员

通过调用 getMemberByIds 方法批量获取指定聊天室成员信息。

  • 单次查询数量上限为 200。
  • 返回聊天室成员信息按照输入 accountIds 顺序排序。

示例代码如下:

Android
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) {
        // 查询失败
    }
});
iOS
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) {
                    // 获取失败
                }];
macOS/Windows
cppchatroomService.getMemberByIds(
    {"accountId1", "accountId2"},
    [](nstd::vector<V2NIMChatroomMember> members) {
        // get members by account ids succeeded
    },
    [](V2NIMError error) {
        // get members by account ids failed, handle error
    });
Web/uni-app/小程序
typescriptgetMemberByIds(accountIds: string[]): Promise<V2NIMChatroomMember[]>
Node.js/Electron
typescriptconst result = await chatroomService.getMemberByIds(['accountId1', 'accountId2'])
console.log(result)
HarmonyOS
typescriptconst members = await this.chatroomClient.chatroomService.getMemberByIds(['accid1', 'accid2'])

根据标签分页获取聊天室成员

通过调用 getMemberListByTag 方法根据标签分页获取聊天室成员列表。

该方法该操作从服务器同步数据,耗时可能较长。SDK 不缓存数据,您需要根据需要自行做好缓存。

示例代码如下:

Android
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) {
        // 查询失败
    }
});
iOS
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)
                    {
                        // 获取失败
                    }];
macOS/Windows
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
    });
Web/uni-app/小程序
typescriptconst result = await chatroom.V2NIMChatroom.getMemberListByTag({
    tag: 'abc', // 查询的 tag
    limit: 100
})
Node.js/Electron
typescriptconst result = await chatroomService.getMemberListByTag({
    tag: 'tag',
    limit: 10
})
HarmonyOS
typescriptconst result: V2NIMChatroomMemberListResult = await this.chatroomClient.chatroomService.getMemberListByTag({
    tag: 'abc', // 查询的 tag
    limit: 100
})

根据标签获取聊天室成员数量

通过调用 getMemberCountByTag 方法获取指定标签下的聊天室成员人数。

Android
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) {
        // 查询失败
    }
});
iOS
objective-c// 通过实例 ID 获取聊天室实例
id <V2NIMChatroomService> service = [[V2NIMChatroomClient getInstance:1] getChatroomService];

// 查询的 tag,必传字段,传 null 或者 "",会返回参数错误
NSString *tag = @"xxx";
[service getMemberCountByTag:tag
                    success:^(NSInteger memberCount)
                    {
                        // 获取成功
                    }
                    failure:^(V2NIMError *error)
                    {
                        // 获取失败
                    }];
macOS/Windows
cppchatroomService.getMemberCountByTag(
    "tag1",
    [](uint64_t count) {
        // get member count by tag succeeded
    },
    [](V2NIMError error) {
        // get member count by tag failed, handle error
    });
Web/uni-app/小程序
typescriptconst count = await chatroom.V2NIMChatroomService.getMemberCountByTag('tagName')
Node.js/Electron
typescriptconst count = await chatroomService.getMemberCountByTag('tag')
HarmonyOS
typescriptconst count = await this.chatroomClient.chatroomService.getMemberCountByTag('tagName')

修改聊天室成员自身信息

通过调用 updateSelfMemberInfo 方法更新本人的聊天室成员信息。目前支持更新昵称、头像、服务端扩展字段及反垃圾配置项。

支持设置更新后是否通知,若设置通知,聊天室内成员会收到类型为 MEMBER_INFO_UPDATED 的通知消息。

更新成功后,聊天室内成员会收到 onChatroomMemberInfoUpdated 回调。

示例代码如下:

Android
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) {
        // 更新失败
    }
});
iOS
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) 
                      {
                          // 更新失败
                      }];
macOS/Windows
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
    });
Web/uni-app/小程序
typescriptawait chatroom.V2NIMChatroomService.updateSelfMemberInfo({
    roomNick: 'nick', // 聊天室昵称
    roomAvatar: 'https://www.xxx.com/1.jpg', // 头像
    serverExtension: 'extension', // 扩展字段
    notificationEnabled: true, // 是否通知
    persistence: true // 是否持久化。若为否,则信息在下线后失效
})
Node.js/Electron
typescriptawait chatroomService.updateSelfMemberInfo({
    roomNick: 'new room nickname'
}, {})
HarmonyOS
typescriptawait this.chatroomClient.chatroomService.updateSelfMemberInfo({
    roomNick: 'nick', // 聊天室昵称
    roomAvatar: 'https://www.xxx.com/1.jpg', // 头像
    serverExtension: 'extension', //扩展字段
    notificationEnabled: true, //是否通知
    persistence: true //是否持久化。若为否,则信息在下线后失效
})

更新聊天室成员角色

通过调用 updateMemberRole 方法更新聊天室成员角色,包括以下场景:

  • 将普通游客、普通成员设置为管理员或反之,该操作仅聊天室 创建者 有权限。

  • 将普通成员设置为普通游客或反之,该操作仅聊天室 管理员和创建者 有权限。

  • 不允许操作虚构用户和匿名游客。

更新成功后,聊天室内所有成员收到 onChatroomMemberRoleUpdated 回调,及通类型为 ROLE_UPDATE 的通知消息。

示例代码如下:

Android
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) {
        //更新失败
    }
});
iOS
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)
                 {
                     // 更新失败
                 }];
macOS/Windows
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
    });
Web/uni-app/小程序
typescriptawait chatroom.V2NIMChatroomService.updateMemberRole('accid', {
    // 设置为管理员
    memberRole: V2NIMChatroomMemberRole.V2NIM_CHATROOM_MEMBER_ROLE_MANAGER,
    // 用户登记
    memberLevel: 10,
    // 通知的扩展字段
    notificationExtension: 'ps'
})
Node.js/Electron
typescriptawait chatroomService.updateMemberRole('accountId', {
    memberRole: 2
})
HarmonyOS
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 的通知消息。
  • 从聊天室普通成员身份变为普通游客身份。
  • 该操作仅聊天室创建者和管理员有权限。
  • 如果被操作方为管理员,则仅聊天室创建者有权限。
  • 不允许操作虚构用户和匿名游客。

示例代码如下:

Android
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) {
        // 设置失败
    }
});
iOS
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)
                        {
                            // 设置失败
                        }];
macOS/Windows
cppchatroomService.setMemberBlockedStatus(
    "accountId",
    true,
    "notificationExtension",
    []() {
        // set member blocked status succeeded
    },
    [](V2NIMError error) {
        // set member blocked status failed, handle error
    });
Web/uni-app/小程序
typescriptawait chatroom.V2NIMChatroomService.setMemberBlockedStatus('accountId', true, 'extension')
Node.js/Electron
typescriptawait chatroomService.setMemberBlockedStatus('accountId', true, 'your notification extension')
HarmonyOS
typescriptawait this.chatroomClient.chatroomService.setMemberBlockedStatus('accid', true, 'extension')

设置聊天室成员禁言状态

通过调用 setMemberChatBannedStatus 方法来设置聊天室成员禁言状态,支持将成员永久禁言或解除永久禁言。

被永久禁言后:

  • 聊天室所有成员收到成员信息变更回调 onChatroomMemberInfoUpdated 和类型为 MEMBER_CHAT_BANNED_ADDED 的通知消息。
  • 聊天室禁言用户收到禁言状态变更回调 onSelfChatBannedUpdated,无法在聊天室内发送消息,但可以接收消息。

解除永久禁言后:

  • 聊天室所有成员收到成员信息变更回调 onChatroomMemberInfoUpdated 和类型为 MEMBER_CHAT_BANNED_REMOVED 的通知消息。
  • 聊天室禁言用户收到禁言状态变更回调 onSelfChatBannedUpdated,恢复在聊天室内发送消息权限。
  • 该操作仅聊天室创建者和管理员有权限。
  • 如果被操作方为管理员,则仅聊天室创建者有权限。
  • 不允许操作虚构用户和匿名游客。

示例代码如下:

Android
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) {
        // 设置失败
    }
});
iOS
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)
                        {
                            // 设置失败
                        }];
macOS/Windows
cppchatroomService.setMemberChatBannedStatus(
    "accountId",
    true,
    "notificationExtension",
    []() {
        // set member chat banned status succeeded
    },
    [](V2NIMError error) {
        // set member chat banned status failed, handle error
    });
Web/uni-app/小程序
typescriptawait chatroom.V2NIMChatroomService.setMemberChatBannedStatus('accid', true, 'extension')
Node.js/Electron
typescriptawait chatroomService.setMemberChatBannedStatus('accountId', true, 'your notification extension')
HarmonyOS
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,恢复在聊天室内发送消息权限。
  • 该操作仅聊天室创建者和管理员有权限。
  • 如果被操作方为管理员,则仅聊天室创建者有权限。
  • 不允许操作虚构用户和匿名游客。

示例代码如下:

Android
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) {
        // 设置失败
    }
});
iOS
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) 
                         {
                             // 设置失败
                         }];
macOS/Windows
cppchatroomService.setMemberTempChatBanned(
    "accountId",
    60,
    true,
    "notificationExtension",
    []() {
        // set member temp chat banned succeeded
    },
    [](V2NIMError error) {
        // set member temp chat banned failed, handle error
    });
Web/uni-app/小程序
typescriptawait chatroom.V2NIMChatroomService.setMemberTempChatBanned('accid', 60 * 1000, true, 'extension')
Node.js/Electron
typescriptawait chatroomService.setMemberTempChatBanned('accountId', 10, true, 'your notification extension')
HarmonyOS
typescriptawait this.chatroomClient.chatroomService.setMemberTempChatBanned('accid', 60 * 1000, true, 'extension')

踢出聊天室成员

通过调用 kickMember 方法将指定成员踢出聊天室。踢出的同时退出聊天室。

踢出成功后:

  • 被踢用户收到被踢出聊天室回调 onChatroomKicked,以及退出聊天室回调 onChatroomExited
  • 聊天室内所有成员收到成员退出聊天室 onChatroomMemberExit 回调,及类型为 MEMBER_KICKED 的通知消息。
  • 该操作仅聊天室创建者和管理员有权限。
  • 如果被操作方为管理员,则仅聊天室创建者有权限。
  • 不允许操作虚构用户和匿名游客。

示例代码如下:

Android
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) {
        // 踢出失败
    }
});
iOS
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) {
                // 踢出失败
            }];
macOS/Windows
cppchatroomService.kickMember(
    "accountId",
    "notificationExtension",
    []() {
        // kick member succeeded
    },
    [](V2NIMError error) {
        // kick member failed, handle error
    });
Web/uni-app/小程序
typescriptawait chatroom.V2NIMChatroomService.kickMember('account', 'notificationExtension')
Node.js/Electron
typescriptawait chatroomService.kickMember('accountId', 'your notification extension')
HarmonyOS
typescriptawait this.chatroomClient.chatroomService.kickMember('account', 'notificationExtension')

相关信息

涉及接口

Android/iOS/macOS/Windows
API 说明
V2NIMChatroomClient.getChatroomService 获取聊天室服务类
addChatroomListener 注册聊天室监听器
removeChatroomListener 取消注册聊天室监听器
V2NIMChatroomMemberRole 聊天室成员角色
V2NIMChatroomEnterParams.anonymousMode 聊天室登录参数
V2NIMChatroomMember 聊天室成员
getMemberListByOption 分页获取所有聊天室成员信息
V2NIMChatroomMemberQueryOption 分页查询选项配置
getMemberByIds 批量获取指定聊天室成员信息
getMemberListByTag 根据标签分页获取聊天室成员列表
getMemberCountByTag 获取指定标签下的聊天室成员人数
updateSelfMemberInfo 更新本人的聊天室成员信息
updateMemberRole 更新聊天室成员角色
setMemberBlockedStatus 设置聊天室成员黑名单状态
setMemberChatBannedStatus 设置聊天室成员禁言状态
setMemberTempChatBanned 设置聊天室成员临时禁言状态
kickMember 将指定成员踢出聊天室
Web/uni-app/小程序/Node.js/Electron/HarmonyOS
API 说明
V2NIMChatroomClient.getChatroomService 获取聊天室服务类
on("EventName") 注册聊天室监听器
off("EventName") 取消注册聊天室监听器
V2NIMChatroomMemberRole 聊天室成员角色
V2NIMChatroomEnterParams.anonymousMode 聊天室登录参数
V2NIMChatroomMember 聊天室成员
getMemberListByOption 分页获取所有聊天室成员信息
V2NIMChatroomMemberQueryOption 分页查询选项配置
getMemberByIds 批量获取指定聊天室成员信息
getMemberListByTag 根据标签分页获取聊天室成员列表
getMemberCountByTag 获取指定标签下的聊天室成员人数
updateSelfMemberInfo 更新本人的聊天室成员信息
updateMemberRole 更新聊天室成员角色
setMemberBlockedStatus 设置聊天室成员黑名单状态
setMemberChatBannedStatus 设置聊天室成员禁言状态
setMemberTempChatBanned 设置聊天室成员临时禁言状态
kickMember 将指定成员踢出聊天室
此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 前提条件
  • 聊天室相关事件监听
  • 获取聊天室成员
  • 分页获取聊天室成员
  • 批量获取指定聊天室成员
  • 根据标签分页获取聊天室成员
  • 根据标签获取聊天室成员数量
  • 修改聊天室成员自身信息
  • 更新聊天室成员角色
  • 设置聊天室成员黑名单状态
  • 设置聊天室成员禁言状态
  • 设置聊天室成员临时禁言状态
  • 踢出聊天室成员
  • 相关信息
  • 涉及接口