Android

超大群管理

更新时间: 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#getMuteModeTeam#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) {
		// 错误
    }
});

可通过 SuperTeamServicegetMessageNotifyType 接口获取提醒配置。

群组检索

用户可以查询到具有指定群名称的群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);
此文档是否对你有帮助?
有帮助
去反馈
  • 消息收发
  • 消息收发概述
  • 消息撤回
  • 创建群组
  • 获取群组
  • 从本地获取所有群组
  • 从本地获取指定群组
  • 批量获取指定群组
  • 从云端获取指定群组
  • 解散群组
  • 群成员管理
  • 入群操作
  • 申请加入群组
  • 验证入群申请
  • 邀请加入群组
  • 验证入群邀请
  • 踢人出群
  • 主动退群
  • 获取群组成员
  • 获取群组成员列表
  • 获取指定群组成员
  • 分页获取群组成员
  • 修改群成员资料
  • 修改其他成员资料
  • 修改自己资料
  • 监听群成员变化
  • 监听群成员资料变化
  • 监听移除群成员的变化
  • 群主转让
  • 增加管理员
  • 移除管理员
  • 禁言
  • 禁言指定成员
  • 禁言群全体成员
  • 查询被禁言群成员
  • 群资料管理
  • 编辑群资料
  • 编辑单个资料
  • 编辑多个资料
  • 监听群组变化
  • 监听群资料变化
  • 监听移除群的变化
  • 群组通知
  • 群消息免打扰
  • 群组检索