群成员管理
更新时间: 2024/08/16 17:53:38
网易云信 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
方法来禁言群组全体成员或解除全体成员的禁言。
群组全员禁言分为两种模式。
- 若群组的禁言模式
TeamAllMuteModeEnum
为MuteALL
,那么调用该接口禁言的对象是包含群主和管理员的所有成员。 - 若群组的禁言模式
TeamAllMuteModeEnum
为MuteNormal
,那么调用该接口禁言的对象是全体普通成员,不包括群主和管理员。
参数说明:
参数 | 说明 |
---|---|
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 |
查询被禁言的群组成员 |