IM 即时通讯
Android
开发指南

群成员管理

更新时间: 2023/08/30 11:07:47

网易云信 NIM SDK 支持用户查询、添加、移除群组成员,管理成员角色等功能,拥有完善的成员权限体系及管理功能,群组内所有用户根据权限分为群主、管理员、以及普通成员。

技术原理

网易云信 NIM SDK 的 TeamService 提供管理群组成员的相关方法,帮助您快速实现和使用群组的成员权限体系及管理功能。

群组中有三种角色,群主(Owner),群组管理员(Manager)以及群组普通成员(Normal),具体请参见 TeamMemberType

  • 群主默认为群组创建者,后续可通过 transferTeam 转让群主身份。
  • 群组管理员由群主分配,群主通过 addManagers 添加群组管理员。
  • 用户进入群组后,默认为群组的普通成员,后续可联系群主修改角色。
  • TeamMemberType 中还包含 Apply 类型,表示待审核的申请入群用户。

前提条件

管理群组管理员

添加群组管理员

只有群主才拥有添加群组管理员的权限。

通过调用addManagers 方法添加群组管理员。

群主添加管理员后,所有群成员会收到群组通知消息(消息类型为 MsgTypeEnum.notification),触发事件为AddTeamManager

参数说明:

参数 说明
teamId 群ID
accounts 待添加的管理员账号列表

示例代码:

NIMClient.getService(TeamService.class).addManagers(teamId, accountList).setCallback(new RequestCallback<List<TeamMember>>() {
    @Override
    public void onSuccess(List<TeamMember> managers) {
        // 添加群管理员成功
    }

    @Override
    public void onFailed(int code) {
        // 添加群管理员失败
    }

    @Override
    public void onException(Throwable exception) {
        // 错误
});

撤销群组管理员

只有群主拥有撤销群组管理员的权限。

通过调用 removeManagers 方法来撤销群组管理员。

群主撤销群管理员后,其身份变为普通成员。所有群成员会收到群组通知消息(消息类型为 MsgTypeEnum.notification),触发事件为RemoveTeamManager

参数说明:

参数 说明
teamId 群ID
accounts 待撤销的管理员账号列表

示例代码:

NIMClient.getService(TeamService.class).removeManagers(teamId, accountList).setCallback(new RequestCallback<List<TeamMember>>() {
    @Override
    public void onSuccess(List<TeamMember> members) {
        // 撤销群管理员成功
    }

    @Override
    public void onFailed(int code) {
        // 撤销群管理员失败
    }

    @Override
    public void onException(Throwable exception) {
        // 错误
    }
});

修改群成员信息

修改群组成员的群昵称

只有群主才有修改群组成员的群昵称的权限。

通过调用 updateMemberNick 来修改群组成员的群昵称。

参数说明:

参数 说明
teamId 群ID
account 需要修改群昵称的用户账号
nick 群昵称

示例代码:

NIMClient.getService(TeamService.class).updateMemberNick(teamId, account, nickname).setCallback(new RequestCallback<Void>() {
    @Override
    public void onSuccess(Void param) {
        // 成功
    }

    @Override
    public void onFailed(int code) {
        // 失败
    }

    @Override
    public void onException(Throwable exception) {
        // 错误
    }
});

修改自己的群昵称

通过调用 updateMyTeamNick 方法修改自己的群昵称。

参数说明:

参数 说明
teamId 群ID
nick 新的群昵称

示例代码:

NIMClient.getService(TeamService.class).updateMyTeamNick(teamId, "test")

修改自身扩展字段

通过调用 updateMyMemberExtension 方法修改群组中自己的扩展字段。

参数说明:

参数 说明
teamId 群ID
extension 新的扩展字段(自定义属性)

示例代码:

Map<String, Object> extension = new HashMap<>();
extension.put("ext","newExt");
NIMClient.getService(TeamService.class).updateMyMemberExtension(teamId, ext)

禁言群组成员

群组全员禁言

只有群主才有禁言全体成员或取消全员禁言的权限。

通过调用 muteAllTeamMember 方法来禁言群组全体成员或解除全体成员的禁言。

群组全员禁言分为两种模式。

  • 若群组的禁言模式 TeamAllMuteModeEnumMuteALL,那么调用该接口禁言的对象是包含群主和管理员的所有成员。
  • 若群组的禁言模式 TeamAllMuteModeEnumMuteNormal,那么调用该接口禁言的对象是全体普通成员,不包括群主和管理员。

参数说明:

参数 说明
teamId 群ID
mute 是否禁言全体成员。
true:表示禁言
false:表示解除禁言

示例代码:

NIMClient.getService(TeamService.class).muteAllTeamMember(teamId, true));

禁言指定成员

只有群主才能禁言指定成员。

通过调用 muteTeamMember 来禁言指定群组成员或解除群成员的禁言。

修改群成员禁言状态后, 所有群成员会收到群组通知消息(消息类型为 MsgTypeEnum.notification),触发事件为MuteTeamMember

参数说明:

参数 说明
teamId 群ID
account 被禁言/被解除禁言的用户帐号
mute 是否禁言。
true:表示禁言
false:表示解除禁言

示例代码:

// 以禁言为例
NIMClient.getService(TeamService.class).muteTeamMember(teamId, account, true).setCallback(new RequestCallback<Void>() {
    @Override
    public void onSuccess(Void param) {
        // 成功
    }

    @Override
    public void onFailed(int code) {
        // 失败
    }

    @Override
    public void onException(Throwable exception) {
		// 错误
    }
});

查询群组成员

  • 由于群组成员数据较大,且除了进入群组成员列表界面外,其他场景不需要群组成员列表的数据,因此 SDK 不会在登录时同步群组成员数据,而是按照按需获取的原则,当上层主动调用获取指定群的群组成员列表时,才判断是否需要同步。

  • 群成员信息 SDK 本地存储说明: 当自己退群、或者被移出群时,本地数据库会继续保留这个群成员信息,只是设置了无效标记,此时依然可以通过 queryTeamMember 查询该群成员信息,只是 isInTeam 将返回 false 。

查询群组所有成员信息

通过调用 queryMemberList 方法来获取群组所有成员的信息。

该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。

示例代码:

NIMClient.getService(TeamService.class).queryMemberList(teamId).setCallback(new RequestCallbackWrapper<List<TeamMember>>() {
            @Override
            public void onResult(int code, final List<TeamMember> members, Throwable exception) {
                ...
            }
        });

查询指定群组成员信息

通过异步调用 queryTeamMember 方法或者同步调用queryTeamMemberBlock来获取群组指定成员的信息。

  • 异步调用 queryTeamMember时,如果本地群成员信息已过期,SDK 会去服务器获取最新信息。
  • 同步调用 queryTeamMemberBlock时,仅查询本地群成员信息。

参数说明:

参数 说明
teamId 群ID
account 需要查询的群成员账号

示例代码:

//异步调用
NIMClient.getService(TeamService.class).queryTeamMember(teamId, account).setCallback(new RequestCallbackWrapper<TeamMember>() {
    @Override
    public void onResult(int code, TeamMember member, Throwable exception) {
        ...
    }
});
//同步调用
TeamMember member = NIMClient.getService(TeamService.class).queryTeamMemberBlock(teamId, account);

查询群成员的邀请者

通过调用 getMemberInvitor 来查询群组成员的邀请者。

群成员入群邀请人为空表示主动入群,没有邀请人。

参数说明:

参数 说明
tid 群ID
accids 需要查询邀请者的群成员账号列表,一次最多查200个

示例代码:

NIMClient.getService(TeamService.class).getMemberInvitor(tid, accids).setCallback(
                    new RequestCallbackWrapper<Map<String, String>>() {

                        @Override
                        public void onResult(int code, Map<String, String> result, Throwable exception) {
                        // result 为对应关系
                        }
                    });

查询被禁言的群成员

通过调用 queryMutedTeamMembers 方法来查询被禁言的群成员。

  • 该接口只返回 调用 muteTeamMember 方法禁言的用户列表。
  • 若需要查询群整体禁言情况,可调用 Team#getMuteMode 来实现。
  • 查询某用户是否被 muteTeamMember 方法禁言过,可通过 TeamMember - isMute() 来获取。
  • 当被整体禁言后,但未被 muteTeamMember 方法禁言过,则 TeamMember - isMute() 仍为 false。

示例代码:

List<TeamMember> members = NIMClient.getService(TeamService.class).queryMutedTeamMembers(teamId);

API 参考

API
说明
addManagers 添加群组管理员
removeManagers 撤销群组管理员
updateMemberNick 修改群组成员的昵称
updateMyTeamNick 修改自己在群组中的信息
updateMyMemberExtension 修改群组中自己的扩展字段
muteAllTeamMember 禁言群组全体成员
muteTeamMember 禁言群组成员
queryMemberList 查询群组所有成员
queryTeamMember 查询群组指定成员的信息(异步接口)
queryTeamMemberBlock 查询群组指定成员的信息(同步接口)
getMemberInvitor 查询群组成员的邀请者
queryMutedTeamMembers 查询被禁言的群组成员
此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 前提条件
  • 管理群组管理员
  • 添加群组管理员
  • 撤销群组管理员
  • 修改群成员信息
  • 修改群组成员的群昵称
  • 修改自己的群昵称
  • 修改自身扩展字段
  • 禁言群组成员
  • 群组全员禁言
  • 禁言指定成员
  • 查询群组成员
  • 查询群组所有成员信息
  • 查询指定群组成员信息
  • 查询群成员的邀请者
  • 查询被禁言的群成员
  • API 参考