超大群管理
更新时间: 2024/03/14 16:36:29
本文介绍如何实现超大群相关功能。
消息收发
消息收发概述
超大群聊消息收发和单聊群聊基本相同,仅在 SessionTypeEnum
上做了区分,同时消息发送服务变成了SuperTeamService
, 接收消息变成了SuperTeamServiceObserver
, 详见消息收发。
消息撤回
SuperTeamService 支持超大群消息的撤回:
java/**
* 消息撤回,并允许触发推送。
* @param message 待撤回的消息
* @param customApnsText 推送文案 不填则不推送
* @param pushPayload 推送payload, 限制json,长度2048
* @param shouldNotifyBeCount 撤回通知是否计入未读
*/
InvocationFuture<java.lang.Void> revokeMessage(IMMessage message,
java.lang.String customApnsText,
java.util.Map<java.lang.String,java.lang.Object> pushPayload,
boolean shouldNotifyBeCount);
- 示例
java//撤回消息
NIMClient.getService(SuperTeamService.class).revokeMessage(message);
创建群组
超大群需要通过服务端API创建,客户端暂时不提供接口创建。
获取群组
从本地获取所有群组
SDK 提供了获取自己加入的所有群的列表的接口
- API 原型
异步版本:
java/**
* 获取自己加入的群的列表
*
* @return InvocationFuture 可以设置回调函数,如果成功,参数为自己加入的群的列表
*/
InvocationFuture<List<SuperTeam>> queryTeamList();
同步版本
java/**
* 获取自己加入的群的列表(同步版本)
*
* @return 自己加入的群的列表
*/
public List<SuperTeam> queryTeamListBlock();
- 示例
异步请求示例:
javaNIMClient.getService(SuperTeamService).queryTeamList().setCallback(new RequestCallback<List<Team>>() {
@Override
public void onSuccess(List<SuperTeam> teams) {
// 获取成功,teams为加入的所有群组
}
@Override
public void onFailed(int i) {
// 获取失败,具体错误码见i参数
}
@Override
public void onException(Throwable throwable) {
// 获取异常
}
});
同步请求示例:
java// teams为加入的所有群组
List<SuperTeam> teams = NIMClient.getService(SuperTeamService).queryTeamListBlock();
从本地获取指定群组
异步接口:
java/**
* 查询群资料,如果本地没有群组资料,则去服务器查询。
* 如果自己不在这个群中,该接口返回的可能是过期资料,如需最新的,请调用searchTeam(String teamId)接口
* @param teamId 群id
*/
InvocationFuture<SuperTeam> queryTeam(java.lang.String teamId);
同步接口:
java/**
* 查询群资料,仅本地查询
* @param teamId 群id
*/
SuperTeam queryTeamBlock(java.lang.String teamId);
批量获取指定群组
java/**
* 根据群id列表批量查询群信息
* @param tidList 群id列表
*/
//异步接口
InvocationFuture<java.util.List<SuperTeam>> queryTeamListById(java.util.List<java.lang.String> tidList);
// 同步接口
java.util.List<SuperTeam> queryTeamListByIdBlock(java.util.List<java.lang.String> tidList);
从云端获取指定群组
java/**
* 从服务器上查询群资料信息
* @param teamId 群id
*/
InvocationFuture<SuperTeam> searchTeam(java.lang.String teamId);
解散群组
超大群需要通过服务端API解散,客户端暂时不提供接口解散。
群成员管理
入群操作
申请加入群组
申请加入一个群,直接加入或者进入等待验证状态时,返回群信息
- API原型
java/**
* 用户申请加入群。
*
* @param tid 申请加入的群ID
* @param postscript 附言,长度不得超过5000
* @return InvocationFuture 可以设置回调函数,如果成功,参数为群资料
*/
InvocationFuture<SuperTeam> applyJoinTeam(String tid, String postscript);
- 参数说明
参数 | 说明 |
---|---|
tid | 群组ID |
postcript | 附言,长度不能超过5000 |
- 示例
javaNIMClient.getService(SuperTeamService.class).applyJoinTeam(teamId, postscript).setCallback(new RequestCallback<SuperTeam>() {
@Override
public void onSuccess(SuperTeam team) {
//发送加入群组请求成功
}
@Override
public void onFailed(int code) {
//仅仅是申请成功
if(code == ResponseCode.RES_TEAM_APPLY_SUCCESS){
Toast.makeText(SuperTeamMsgActivity.this, "等待验证", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(SuperTeamMsgActivity.this, "申请失败, code=" + code, Toast.LENGTH_LONG).show();
}
}
@Override
public void onException(Throwable throwable) {
Log.e(TAG, "apply join team failed:" + throwable);
}
});
- 特殊错误码说明
错误码 | 说明 |
---|---|
808 | 申请已发出 |
809 | 已经在群里 |
验证入群申请
用户发出申请后,所有管理员都会收到一条系统通知,类型为 SystemMessageType#SuperTeamApply
,具体参数解释请参考系统通知章节。管理员可选择同意或拒绝。
- 同意入群申请
仅管理员和拥有者有此权限。如果同意入群申请,群内所有成员(包括申请者)都会收到一条消息类型为 notification
的通知消息,附件类型为 MemberChangeAttachment
。具体参数说明见消息收发章节。
- API 原型
java/**
* 通过用户的入群申请<br>
* 仅管理员和拥有者有此权限
*
* @param teamId 群ID
* @param account 申请入群的用户ID
* @return InvocationFuture 可以设置回调函数
*/
InvocationFuture<Void> passApply(String teamId, String account);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
account | 申请入群的用户ID |
- 示例
javaNIMClient.getService(SuperTeamService.class).passApply(tid, account).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
Toast.makeText(SuperTeamMsgActivity.this, "同意申请成功", Toast.LENGTH_LONG).show();
}
@Override
public void onFailed(int i) {
Toast.makeText(SuperTeamMsgActivity.this, "同意申请失败, code=" + i, Toast.LENGTH_LONG).show();
}
@Override
public void onException(Throwable throwable) {
Log.e(TAG, "pass apply failed:" + throwable);
}
});
- 拒绝入群申请
仅管理员和拥有者有此权限。如果拒绝入群申请,申请者会收到一条系统通知,类型为 SystemMessageType#RejectTeamApply
。具体参数说明见系统通知章节。
- API 原型
java/**
* 拒绝用户的入群申请 <br>
* 仅管理员和拥有者有此权限
*
* @param teamId 群ID
* @param account 申请入群的用户ID
* @param reason 拒绝理由,长度不得超过5000
* @return InvocationFuture 可以设置回调函数
*/
InvocationFuture<Void> rejectApply(String teamId, String account, String reason);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
account | 申请入群的用户ID |
reason | 拒绝理由,选填,长度不能超过5000 |
- 示例
javaNIMClient.getService(SuperTeamService.class).rejectApply(tid, account, reason).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
//拒绝成功
}
@Override
public void onFailed(int i) {
//拒绝失败
}
@Override
public void onException(Throwable throwable) {
Log.e(TAG, "reject apply failed:" + throwable);
}
});
说明:任意一管理员操作后,其他管理员再操作都会失败。
邀请加入群组
所有人都可以拉人入群,如果在被邀请成员中存在成员的群组数量已达上限,则会返回这部分失败成员的账号。
- API 原型
java/**
* 邀请成员
*
* @param teamId 群组ID
* @param accounts 待加入的群成员帐号列表
* @param postscript 附言,长度不得超过5000
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<List<String>> addMembers(String teamId, List<String> accounts, String postscript);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群组ID |
accounts | 待加入的群成员帐号列表 |
postcript | 附言,长度不能超过5000 |
- 示例
javaNIMClient.getService(SuperTeamService).addMembers(teamId, accounts, postcrip)
.setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
// 返回onSuccess,表示拉人不需要对方同意,且对方已经入群成功了
}
@Override
public void onFailed(int code) {
// 返回onFailed
}
@Override
public void onException(Throwable exception) {
...
}
});
用户入群后,在收到之后的第一条消息时,群内所有成员(包括入群者)会收到一条入群消息,附件类型为 MemberChangeAttachment。若通知类型为NotificationType#SUPER_TEAM_INVITE
,可以通过 MemberChangeAttachment#getExtension 获取服务器设置的扩展字段。
验证入群邀请
收到入群邀请后,用户可在系统通知中看到该邀请,并选择接受或拒绝。接受邀请后,用户真正入群。如果拒绝邀请,邀请该用户的管理员会收到一条系统通知,类型为 `SystemMessageType#SuperTeamApplyReject。
- 接受入群邀请
java/**
* 接受别人的入群邀请
*
* @param teamId 群ID
* @param inviter 邀请我的用户帐号
* @return InvocationFuture 可以设置回调函数
*/
InvocationFuture<Void> acceptInvite(String teamId, String inviter);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
inviter | 邀请我的用户帐号 |
- 示例
javaNIMClient.getService(SuperTeamService.class).acceptInvite(teamId, inviter).setCallback(...);
- 拒绝入群邀请
java/**
* 拒绝别人的入群邀请通知
*
* @param teamId 群ID
* @param inviter 邀请我的用户帐号
* @param reason 拒绝理由,长度不得超过5000
* @return InvocationFuture 可以设置回调函数
*/
InvocationFuture<Void> declineInvite(String teamId, String inviter, String reason);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
inviter | 邀请我的用户帐号 |
reason | 拒绝理由,选填,长度不能超过5000 |
- 示例
javaNIMClient.getService(SuperTeamService.class).declineInvite(teamId, inviter, "").setCallback(callback);
踢人出群
仅拥有者可以踢人,群内所有成员(包括被踢者)会收到一条消息类型为 notification 的 IMMessage,类型为 NotificationType#SUPER_TEAM_KICK
, 附件类型为 MemberChangeAttachment
。可以通过 MemberChangeAttachment#getExtension 获取服务器设置的扩展字段。
- API 原型
java/**
* 移除成员,只有群主有此权限
*
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> removeMember(String teamId, String member);
/**
* 批量移出群成员,只有群主有权限
*
* @param teamId 群ID
* @param members 被踢出的成员帐号列表
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> removeMembers(String teamId, List<String> members);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
member | 被踢出的成员帐号 |
- 示例
java// teamId表示群ID,account表示被踢出的成员帐号
NIMClient.getService(SuperSuperTeamService.class).removeMember(teamId, account).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
// 成功
}
@Override
public void onFailed(int code) {
// 失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
主动退群
退群后,群内所有成员(包括退出者)会收到一条消息类型为 notification 的 IMMessage,类型为 NotificationType#SUPER_TEAM_LEAVE
,附件类型为 MemberChangeAttachment
。
- API 原型
java/**
* 退出群
*
* @param teamId 群ID
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> quitTeam(String teamId);
- 示例
javaNIMClient.getService(SuperTeamService.class).quitTeam(teamId).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 查出来该群成员资料,只是 isMyTeam 将返回 false 。
- API 原型
java/**
* 获取指定群的成员信息列表. <br>
* 该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。
*
* @param teamId 群ID
* @return InvocationFuture 可以设置回调函数,如果成功,参数为群的成员信息列表
*/
InvocationFuture<List<SuperTeamMember>> queryMemberList(String teamId);
- 示例
javaNIMClient.getService(SuperTeamService.class).queryMemberList(teamId).setCallback(new RequestCallbackWrapper<List<SuperTeamMember>>() {
@Override
public void onResult(int code, final List<SuperTeamMember> members, Throwable exception) {
...
}
});
获取指定群组成员
如果本地群成员资料已过期, SDK 会去服务器获取最新的。
- API 原型
异步版本:
java/**
* 查询群成员资料。如果本地群成员资料已过期会去服务器获取最新的。
*
* @param teamId 群ID
* @param account 群成员帐号
* @return InvocationFuture 可以设置回调函数,如果成功,参数为该群成员信息
*/
InvocationFuture<SuperTeamMember> queryTeamMember(String teamId, String account);
同步版本(仅查询本地群资料):
java/**
* 查询群成员资料。(同步版本)仅查询本地群资料
*
* @param teamId 群ID
* @param account 群成员帐号
* @return 群成员信息
*/
SuperTeamMember queryTeamMemberBlock(String teamId, String account);
- 示例
异步版本示例:
javaNIMClient.getService(SuperTeamService.class).queryTeamMember(teamId, account).setCallback(new RequestCallbackWrapper<SuperTeamMember>() {
@Override
public void onResult(int code, SuperTeamMember member, Throwable exception) {
...
}
});
同步版本示例:
javaSuperTeamMember member = NIMClient.getService(SuperTeamService.class).queryTeamMemberBlock(teamId, account);
分页获取群组成员
java/**
* 分页获取指定群的成员信息列表. <br>
* 该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。
*
* @param teamId 群ID
* @param offset 偏移位置
* @param limit 获取条数,每次最多200
* @return InvocationFuture 可以设置回调函数,如果成功,参数为群的成员信息列表
*/
InvocationFuture<List<SuperTeamMember>> queryMemberListByPage(String teamId, int offset, int limit);
修改群成员资料
修改其他成员资料
仅群主和管理员拥有权限修改群内其他成员的群昵称。
群主可以修改所有人的群昵称。管理员只能修改普通成员的群昵称。
- API 原型
java/**
* 群组管理员修改群内其他成员的群昵称。<br>
* 仅群管理员和拥有者有此权限
*
* @param teamId 所在群组ID
* @param account 要修改的群成员帐号
* @param nick 新的群昵称
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> updateMemberNick(String teamId, String account, String nick);
- 示例
javaNIMClient.getService(SuperTeamService.class).updateMemberNick(teamId, account, nick).setCallback(
new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
// 修改群成员的群昵称成功
}
@Override
public void onFailed(int code) {
// 修改群成员的群昵称失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
}
);
修改自己资料
修改自己的群昵称:
- API 原型
java/**
* 修改自己的群昵称
*
* @param teamId 所在群组ID
* @param nick 新的群昵称
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> updateMyTeamNick(String teamId, String nick);
- 示例
java// test为修改后自己的群昵称
NIMClient.getService(SuperTeamService.class).updateMyTeamNick(teamId, "test")
修改自己的群成员扩展字段:
- API 原型
java/**
* 修改自己的群成员扩展字段(自定义属性, 最长32个字符)
*
* @param teamId 所在群组ID
* @param extension 新的扩展字段(自定义属性)
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> updateMyMemberExtension(String teamId, String extension);
- 示例
javaString extension = "1213";
NIMClient.getService(SuperTeamService.class).updateMyMemberExtension(teamId, extension)
监听群成员变化
由于获取群成员资料需要跨进程异步调用,开发者最好能在第三方 APP 中做好群成员资料缓存,查询群成员资料时都从本地缓存中访问。在群成员资料有变化时,SDK 会告诉注册的观察者,此时,第三方 APP 可更新缓存,并刷新界面。
监听群成员资料变化
- API 原型
java/**
* 群成员资料变化观察者通知。
* 上层APP如果管理了群成员资料的缓存,可通过此接口更新缓存。
* @param observer 观察者, 参数为有更新的群成员资料列表
* @param register true为注册,false为注销
*/
public void observeMemberUpdate(Observer<List<SuperTeamMember>> observer, boolean register);
- 示例
java// 群成员资料变化观察者通知。群组添加新成员,成员资料变化会收到该通知。
// 返回的参数为有更新的群成员资料列表。
Observer<List<SuperTeamMember>> memberUpdateObserver = new Observer<List<SuperTeamMember>>() {
@Override
public void onEvent(List<SuperTeamMember> members) {
}
};
// 注册/注销观察者
NIMClient.getService(SuperTeamServiceObserver.class).observeMemberUpdate(memberUpdateObserver, register);
监听移除群成员的变化
- API 原型
java/**
* 移除群成员的观察者通知。
* @param observer 观察者, 参数为被移除的群成员
* @param register true为注册,false为注销
*/
public void observeMemberRemove(Observer<SuperTeamMember> observer, boolean register);
- 示例
java// 移除群成员的观察者通知。
private Observer<SuperTeamMember> memberRemoveObserver = new Observer<SuperTeamMember>() {
@Override
public void onEvent(SuperTeamMember member) {
}
};
// 注册/注销观察者
NIMClient.getService(SuperTeamServiceObserver.class).observeMemberRemove(memberRemoveObserver, register);
群主转让
超大群拥有者可以将群的拥有者权限转给群内的其他成员,转移后,被转让者变为新的拥有者,原拥有者变为普通成员。原拥有者还可以选择在转让的同时,直接退出该群。
- API 原型
java/**
* 拥有者将群的拥有者权限转给另外一个人,转移后,另外一个人成为拥有者。<br>
* 原拥有者变成普通成员。若参数quit为true,原拥有者直接退出该群。
*
* @param tid 群ID
* @param account 新任拥有者的用户帐号
* @param quit 转移时是否要同时退出该群
* @return InvocationFuture 可以设置回调函数,如果成功,视参数quit值:<br>
* quit为false:参数仅包含原拥有者和当前拥有者的(即操作者和account),权限已被更新。<br>
* quit为true: 参数为空。
*/
InvocationFuture<List<SuperTeamMember>> transferTeam(String tid, String account, boolean quit);
- 参数说明
参数 | 说明 |
---|---|
tid | 群ID |
account | 新任拥有者的用户帐号 |
quit | 转移时是否要同时退出该群 |
返回值 | 说明 |
:--------------- | :----------------------------------------------------------- |
InvocationFuture | 可以设置回调函数,如果成功,视参数quit值: quit为false:参数仅包含原拥有者和当前拥有者的(即操作者和account),权限已被更新。 quit为true: 参数为空 |
- 示例
javaNIMClient.getService(SuperTeamService.class).transferTeam(teamId, account, false)
.setCallback(new RequestCallback<List<SuperTeamMember>>() {
@Override
public void onSuccess(List<SuperTeamMember> members) {
// 群转移成功
}
@Override
public void onFailed(int code) {
// 群转移失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
增加管理员
超大群中,群主可以增加管理员。操作完成后,群内所有成员都会收到一条消息类型为 notification 的 IMMessage,附件类型为 MemberChangeAttachment
。
- API 原型
java/**
* 拥有者添加管理员 <br>
* 仅拥有者有此权限
*
* @param teamId 群ID
* @param accounts 待提升为管理员的用户帐号列表
* @return InvocationFuture 可以设置回调函数,如果成功,参数为新增的群管理员列表
*/
InvocationFuture<List<SuperTeamMember>> addManagers(String teamId, List<String> accounts);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
accounts | 待提升为管理员的用户帐号列表 |
返回值 | 说明 |
:--------------- | :----------------------------------------------------------- |
InvocationFuture | 可以设置回调函数,如果成功,参数为被提升的群成员列表 (权限已被升为Manager)。 |
- 示例
javaNIMClient.getService(SuperTeamService.class).addManagers(tid, accountList).setCallback(new RequestCallback<List<SuperTeamMember>>() {
@Override
public void onSuccess(List<SuperTeamMember> param) {
// 添加群管理员成功
}
@Override
public void onFailed(int code) {
// 添加群管理员失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
移除管理员
超大群中,群主可以移除管理员。操作完成后,群内所有成员都会收到一条消息类型为 notification 的 IMMessage,附件类型为 MemberChangeAttachment
。
- API 原型
java/**
* 拥有者撤销管理员权限 <br>
* 仅拥有者有此权限
*
* @param teamId 群ID
* @param managers 待撤销的管理员的帐号列表
* @return InvocationFuture 可以设置回调函数,如果成功,参数为被撤销的群成员列表(权限已被降为Normal)。
*/
InvocationFuture<List<SuperTeamMember>> removeManagers(String teamId, List<String> managers);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
managers | 待撤销的管理员的帐号列表 |
返回值 | 说明 |
:--------------- | :----------------------------------------------------------- |
InvocationFuture | 可以设置回调函数,如果成功,参数为被撤销的群成员列表 (权限已被降为Normal)。 |
- 示例
javaNIMClient.getService(SuperTeamService.class).removeManagers(tid, accountList).setCallback(new RequestCallback<List<SuperTeamMember>>() {
@Override
public void onSuccess(List<SuperTeamMember> param) {
// 移除群管理员成功
}
@Override
public void onFailed(int code) {
// 移除群管理员失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
禁言
禁言指定成员
支持管理员和群主对普通成员的禁言、解除禁言操作。
- API 原型
java/**
* 禁言、解除禁言
*
* @param teamId 群组ID
* @param accountList 被禁言、被解除禁言的账号列表
* @param mute true表示禁言,false表示解除禁言
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> muteTeamMembers(String teamId, ArrayList<String> accountList, boolean mute);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群组ID |
accountList | 被禁言、被解除禁言的账号列表 |
mute | true表示禁言,false表示解除禁言 |
- 示例
java// 以禁言为例
NIMClient.getService(SuperTeamService.class).muteTeamMembers(tid, accountList, true).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
// 禁言成功
}
@Override
public void onFailed(int code) {
// 禁言失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
禁言群全体成员
将整个群禁言,该操作仅群主或者管理员有权限。禁言操作成功之后,会回调群更新接口,影响方法 Team#getMuteMode 和 Team#isAllMute
- API 原型
java/**
* 对整个群禁言、解除禁言,对普通成员生效,只有群组、管理员有权限
*
* @param teamId 群组 ID
* @param mute true表示禁言,false表示解除禁言
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> muteAllTeamMember(String teamId, boolean mute);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群组ID |
mute | true表示禁言,false表示解除禁言 |
- 示例
javaNIMClient.getService(SuperTeamService.class).muteAllTeamMember(tid, true).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
// 禁言成功
}
@Override
public void onFailed(int code) {
// 禁言失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
查询被禁言群成员
该操作只返回被禁言的用户,群整体禁言情况请通过 Team#getMuteMode
和 Team#isAllMute
查询。
- API 原型
java/**
* 查询被禁言群成员列表
* 该操作,只返回调用{@link SuperTeamService#muteTeamMembers(String, ArrayList, boolean)} 禁言的用户。
*
* @param teamId 群ID
* @return 群成员信息列表
*/
List<SuperTeamMember> queryMutedTeamMembers(String teamId);
- 示例
java// memberList表示被禁言的成员列表
List<SuperTeamMember> memberList = NIMClient.getService(SuperTeamService.class).queryMutedTeamMembers(teamId);
群资料管理
编辑群资料
可修改的属性查看 TeamFieldEnum
,注意: 其中的 Ext_Server_Only
群服务器扩展字段,仅限服务端修改。
更新的value值,对应的数据类型,同样查看 TeamFieldEnum
。例如:群名 Name(ITeamService.TinfoTag.NAME, String.class),表示 value 值的数据类型为 String。验证类型 VerifyType(ITeamService.TinfoTag.JOIN_MODE, VerifyTypeEnum.class),表示 value 值的数据类型为VerifyTypeEnum。
TeamFieldEnum属性 | 说明 | 数据类型 |
---|---|---|
Announcement | 群公告 | String |
Ext_Server_Only | 群扩展字段(仅服务端能够修改) | String |
Extension | 群扩展字段(客户端自定义信息) | String |
ICON | 群头像 | String |
Introduce | 群简介 | String |
Name | 群名 | String |
修改后,群内所有成员会收到一条消息类型为 notification 的 IMMessage,带有一个消息附件,类型为 SUPER_TEAM_UPDATE_T_INFO
。如果注册了群组资料变化观察者,观察者也会收到通知,见监听群组变化。
编辑单个资料
- API 原型
java/**
* 更新群组资料
*
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> updateTeam(String teamId, TeamFieldEnum field, Serializable value);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
field | 待更新的域 |
value | 待更新的域的新值 该值类型必须和field中定义的fieldType一致 |
- 示例
以群公告为例
javaString announcement = "这是更新的群公告";
NIMClient.getService(SuperTeamService.class).updateTeam(teamId, TeamFieldEnum.Announcement, announcement).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
// 成功
}
@Override
public void onFailed(int code) {
// 失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
- 群组头像若要上传到云信服务器上,则需要使用头像资源处理。
编辑多个资料
- API 原型
java/**
* 批量更新群组资料,可一次性更新多个字段的值。
*
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> updateTeamFields(String teamId, Map<TeamFieldEnum, Serializable> fields);
java/**
* 批量更新群组资料,可一次性更新多个字段的值。
*
* @param teamId 群ID
* @param fields 待更新的所有字段的新的资料,其中值类型必须和field中定义的fieldType一致
* @param antiSpamConfig 反垃圾相关配置参数
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> updateTeamFields(String teamId, Map<TeamFieldEnum, Serializable> fields,
AntiSpamConfig antiSpamConfig);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群ID |
fields | 待更新的所有字段的新的资料,其中值类型必须和field中定义的fieldType一致 |
antiSpamConfig | 反垃圾相关配置参数 |
- 示例
java// 以名字,介绍,公告为例
Map<TeamFieldEnum, Serializable> fieldsMap = new HashMap<>();
fieldsMap.put(TeamFieldEnum.Name, "新的名称");
fieldsMap.put(TeamFieldEnum.Introduce, "新的介绍");
fieldsMap.put(TeamFieldEnum.Announcement, "新的公告");
NIMClient.getService(SuperTeamService.class).updateTeamFields(teamId,
fieldsMap).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void aVoid) {
// 成功
}
@Override
public void onFailed(int i) {
// 失败
}
@Override
public void onException(Throwable throwable) {
// 错误
}
});
监听群组变化
由于获取群组资料需要跨进程异步调用,开发者最好能在第三方 APP 中做好群组资料缓存,查询群组资料时都从本地缓存中访问。在群组资料有变化时,SDK 会告诉注册的观察者,此时,第三方 APP 可更新缓存,并刷新界面。
监听群资料变化
- API 原型
java/**
* 群资料变动观察者通知。新建群和群更新的通知都通过该接口传递
* @param observer 观察者, 参数为有更新的群资料列表
* @param register true为注册,false为注销
*/
public void observeTeamUpdate(Observer<List<SuperTeam>> observer, boolean register);
- 示例
java// 创建群组资料变动观察者
Observer<List<SuperTeam>> teamUpdateObserver = new Observer<List<SuperTeam>>() {
@Override
public void onEvent(List<SuperTeam> teams) {
}
};
// 注册/注销观察者
NIMClient.getService(SuperTeamServiceObserver.class).observeTeamUpdate(teamUpdateObserver, register);
监听移除群的变化
移除成功后,Team#isMyTeam 返回 false。
- API 原型
java/**
* 移除群的观察者通知。自己退群,群被解散,自己被踢出群时,会收到该通知
* @param observer 观察者, 参数为被移除的群资料,此时群的isMyTeam接口返回false
* @param register true为注册,false为注销
*/
public void observeTeamRemove(Observer<SuperTeam> observer, boolean register);
- 示例
java// 创建群组被移除的观察者。在退群,被踢,群被解散时会收到该通知。
Observer<SuperTeam> teamRemoveObserver = new Observer<SuperTeam>() {
@Override
public void onEvent(SuperTeam team) {
// 由于界面上可能仍需要显示群组名等信息,因此参数中会返回 Team 对象。
// 该对象的 isMyTeam 接口返回为 false。
}
};
// 注册/注销观察者
NIMClient.getService(SuperTeamServiceObserver.class).observeTeamRemove(teamRemoveObserver, register);
群组通知
群组通知的消息类型是 MsgTypeEnum.notification
,用户入群成功之后,任何关于群的变动(含自己入群的动作),云信服务器都会下发一条群通知消息。
关于超大群的操作事件有:
NotificationType枚举 | 说明 |
---|---|
SUPER_TEAM_ADD_MANAGER | 超大群添加管理员 |
SUPER_TEAM_APPLY_PASS | 超大群申请成功进群 |
SUPER_TEAM_CHANGE_OWNER | 超大群移交群主 |
SUPER_TEAM_DISMISS | 超大群解散 |
SUPER_TEAM_INVITE | 超大群拉人 |
SUPER_TEAM_INVITE_ACCEPT | 超大群接受邀请进群 |
SUPER_TEAM_KICK | 超大群踢人 |
SUPER_TEAM_LEAVE | 超大群退群 |
SUPER_TEAM_MUTE_TLIST | 超大群禁言群成员 |
SUPER_TEAM_REMOVE_MANAGER | 超大群删除管理员 |
SUPER_TEAM_UPDATE_T_INFO | 超大群修改群信息 |
解析步骤可参考群组通知消息
群消息免打扰
可以对某个群设置消息通知提醒类型,群消息提醒分为全部提醒和全部不提醒两种,默认为全部提醒,不支持设置仅管理员消息提醒。
- API 原型
java/**
* 设置指定群消息通知类型,查看{@link com.netease.nimlib.sdk.team.constant.TeamMessageNotifyTypeEnum}
*
* @param teamId 群组ID
* @param notifyType 通知类型枚举
* @return InvocationFuture 可以设置回调函数,监听操作结果
*/
InvocationFuture<Void> muteTeam(String teamId, TeamMessageNotifyTypeEnum notifyType);
- 参数说明
参数 | 说明 |
---|---|
teamId | 群组ID |
TeamMessageNotifyTypeEnum | 通知类型枚举,只有全部提醒和全部不提醒为有效参数 |
- 示例
java// 以设置 “全部不提醒” 为例
TeamMessageNotifyTypeEnum type = TeamMessageNotifyTypeEnum.Mute;
NIMClient.getService(SuperTeamService.class).muteTeam(teamId, type).setCallback(new RequestCallback<Void>() {
@Override
public void onSuccess(Void param) {
// 设置成功
}
@Override
public void onFailed(int code) {
// 设置失败
}
@Override
public void onException(Throwable exception) {
// 错误
}
});
可通过 SuperTeamService
的 getMessageNotifyType
接口获取提醒配置。
群组检索
用户可以查询到具有指定群名称的群ID的列表
- API原型
java/**
* 通过群名称反查群组ID
*
* @param name 群组名称
* @return 群ID列表
*/
InvocationFuture<List<String>> searchTeamIdByName(String name);
- 示例
javaNIMClient.getService(SuperTeamService.class).searchTeamIdByName("超大群").setCallback(new RequestCallbackWrapper<List<String>>() {
@Override
public void onResult(int code, List<String> result, Throwable exception) {
if (code == ResponseCode.RES_SUCCESS) {
// 成功
} else {
// 失败,错误码见code
}
if (exception != null) {
// error
}
}
});
用户在客户端本地可以搜索与关键字匹配的所有群:
java/**
* 通过群名称反查群组ID
*
* @param name 群组名称
* @return 群ID列表
*/
InvocationFuture<java.util.List<Team>> searchTeamsByKeyword(java.lang.String keyword);