IM 即时通讯
Android
动态与公告
IM UIKit 更新日志
NIM SDK 开发版更新日志
NIM SDK 稳定版更新日志
新手接入指南
产品介绍
简介
主要功能
产品优势
功能介绍
账号集成与登录
多端登录与互踢策略
群组功能
聊天室功能
聊天室标签功能
圈组功能
质量数据监控台
海外数据中心
IM平滑迁移方案
接口及业务限制
体验 Demo
下载 SDK 与 Demo 源码
快速开始
跑通 IM Demo 源码
实现单聊消息收发(不含 UI)
跑通圈组 Demo 源码
实现圈组消息收发(不含 UI)
含 UI 集成
什么是 IM UIKit
IM UIKit 功能概览
快速集成 IM UIKit
组件导入
初始化
界面跳转
自定义用户信息
全局配置
会话列表相关
集成会话列表界面
会话列表事件监听
自定义会话列表界面 UI
会话列表 API 概览
会话消息相关
集成会话界面
会话界面事件监听
实现音视频通话
实现地理位置消息功能(含 UI)
实现自定义消息发送(含 UI)
自定义会话界面 UI
会话消息 API 概览
通讯录相关
集成通讯录界面
自定义通讯录界面 UI
通讯录界面事件监听
通讯录 API 概览
UIKit 功能实现方案
消息回复实现方案
UIKit 版本升级说明
系统兼容相关
IM UIKit 常见问题排查
IM UIKit API 概览
不含 UI 集成
使用说明
集成 SDK
初始化
登录相关
登录 IM
多端登录与互踢
登出 IM
消息相关
消息概述
消息收发
自定义消息收发
消息配置选项
NOS 存储场景
广播消息收发
消息已读回执
消息撤回
消息重发与转发
消息更新
消息过滤
语音消息处理
插入本地消息
历史消息
最近会话
服务端会话服务
用户资料
用户关系
在线状态订阅
系统通知
系统通知概述
内置系统通知管理
内置系统通知未读数
自定义系统通知收发
Android 离线推送
实现离线推送
配置消息的推送属性
设置群消息强制推送
设置推送全局免打扰
设置多端推送策略
集成小米推送
集成华为推送
集成荣耀推送
集成 OPPO 推送
集成 vivo 推送
集成魅族推送
集成谷歌推送(FCM)
消息提醒
实现消息提醒
配置消息提醒功能
设置群消息强制提醒
设置消息提醒文案
定制通知栏显示信息
群组功能
群组概述
群组管理
群成员管理
群消息管理
超大群功能
聊天室
圈组功能
圈组概述
登录管理
服务器相关
服务器概述
服务器管理
服务器成员管理
游客功能
服务器未读数管理
频道相关
频道概述
频道管理
频道黑白名单
实时互动频道
频道分组
频道分组黑白名单
频道未读数管理
搜索服务器和频道
身份组相关
身份组概述
身份组应用场景
服务器身份组
频道身份组
用户定制权限
频道分组身份组
自定义权限项
成员权限查询与判定
身份组相关查询
圈组订阅机制
圈组消息相关
图解圈组消息流转
圈组消息收发
消息发送配置项
圈组消息撤回
圈组消息更新
圈组消息删除
消息正在输入
会话消息回复(Thread)
圈组快捷评论
获取频道最后一条消息
查询历史消息
查询@我的消息
圈组消息缓存
圈组消息搜索
圈组系统通知相关
圈组系统通知概述
圈组系统通知收发
圈组系统通知更新
圈组离线推送
圈组内容审核
圈组相关抄送
圈组第三方回调
圈组各端接口命名差异
反垃圾(内容审核)
聊天扩展
接入第三方机器人
其他
最佳实践
IM 登录最佳实践
IM 应用隐私合规
聊天室重要消息投递
API 参考
Android SDK API
Android SDK 状态码/错误码
IM 控制台指南
创建应用
注册 IM 账号
升级服务
开通聊天室功能
配置应用客户端标识
添加推送证书
常见问题
FAQ
错题集
Android 端推送问题排查
第三方推送厂商的限制说明
服务协议

超大群功能

更新时间: 2023/03/24 12:02:39

超大群概述

超大群是针对大规模群聊场景的功能。目前支持不超过10000人的群聊。由于超大群场景较为特殊,并不能支持所有高级群提供的管理功能。

目前超大群支持群主、管理员与普通成员三种身份。

SuperTeam 函数:

返回值 Team函数 说明
String getAnnouncement() 获取群组公告
long getCreateTime() 获取群组的创建时间
String getCreator() 获取创建群组的用户帐号
String getExtension() 获取群组扩展配置。
String getExtServer() 获取服务器设置的扩展配置。
String getIcon() 获取群头像
String getId() 获取群组ID
String getIntroduce() 获取群组简介
int getMemberCount() 获取群组的总成员数
int getMemberLimit() 获取群组的成员人数上限
TeamAllMuteModeEnum getMuteMode() 获取群禁言模式
String getName() 获取群组名称
TeamBeInvite
ModeEnum
getTeamBeInviteMode() 获取群被邀请模式:被邀请人的同意方式
TeamExtension
UpdateModeEnum
getTeamExtensionUpdateMode() 获取群资料扩展字段修改模式:谁可以修改群自定义属性(扩展字段)
TeamInviteModeEnum getTeamInviteMode() 获取群邀请模式:谁可以邀请他人入群
TeamUpdateModeEnum getTeamUpdateMode() 获取群资料修改模式:谁可以修改群资料
TeamTypeEnum getType() 获取群组类型
VerifyTypeEnum getVerifyType() 获取申请加入群组时的验证类型
boolean isAllMute() 是否群全员禁言
TeamAllMuteModeEnum getMuteMode() 获取全员禁言模式
boolean isMyTeam() 获取自己是否在这个群里
TeamMessageNotifyTypeEnum getMessageNotifyType() 获取当前账号在此群收到消息之后提醒的类型
void setExtension(extension) 设置群组扩展配置。

消息收发

消息收发概述

超大群聊消息收发和单聊群聊基本相同,仅在 SessionTypeEnum 上做了区分,同时消息发送服务变成了SuperTeamService, 接收消息变成了SuperTeamServiceObserver, 详见消息收发

消息撤回

SuperTeamService 支持超大群消息的撤回:

/**
 * 消息撤回,并允许触发推送。
 * @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);
  • 示例
//撤回消息
NIMClient.getService(SuperTeamService.class).revokeMessage(message);

创建群组

超大群需要通过服务端API创建,客户端暂时不提供接口创建。

获取群组

从本地获取所有群组

SDK 提供了获取自己加入的所有群的列表的接口

  • API 原型

异步版本:

/**
 * 获取自己加入的群的列表
 *
 * @return InvocationFuture 可以设置回调函数,如果成功,参数为自己加入的群的列表
 */
InvocationFuture<List<SuperTeam>> queryTeamList();

同步版本

/**
 * 获取自己加入的群的列表(同步版本)
 *
 * @return 自己加入的群的列表
 */
public List<SuperTeam> queryTeamListBlock();
  • 示例

异步请求示例:

NIMClient.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) {
        // 获取异常
    }
});

同步请求示例:

// teams为加入的所有群组
List<SuperTeam> teams = NIMClient.getService(SuperTeamService).queryTeamListBlock();

从本地获取指定群组

异步接口:

/**
 *  查询群资料,如果本地没有群组资料,则去服务器查询。
 *  如果自己不在这个群中,该接口返回的可能是过期资料,如需最新的,请调用searchTeam(String teamId)接口
 *  @param teamId 群id
 */
InvocationFuture<SuperTeam> queryTeam(java.lang.String teamId);

同步接口:

/**
 *  查询群资料,仅本地查询
 *  @param teamId 群id
 */
SuperTeam queryTeamBlock(java.lang.String teamId);

批量获取指定群组

/**
 *  根据群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);

从云端获取指定群组

/**
 *  从服务器上查询群资料信息
 *  @param teamId 群id
 */
InvocationFuture<SuperTeam> searchTeam(java.lang.String teamId);

解散群组

超大群需要通过服务端API解散,客户端暂时不提供接口解散。

群成员管理

入群操作

申请加入群组

申请加入一个群,直接加入或者进入等待验证状态时,返回群信息

  • API原型
/**
 * 用户申请加入群。
 *
 * @param tid        申请加入的群ID
 * @param postscript 附言,长度不得超过5000
 * @return InvocationFuture 可以设置回调函数,如果成功,参数为群资料
 */
InvocationFuture<SuperTeam> applyJoinTeam(String tid, String postscript);
  • 参数说明
参数 说明
tid 群组ID
postcript 附言,长度不能超过5000
  • 示例
NIMClient.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 原型
/**
 * 通过用户的入群申请<br>
 * 仅管理员和拥有者有此权限
 *
 * @param teamId  群ID
 * @param account 申请入群的用户ID
 * @return InvocationFuture 可以设置回调函数
 */
InvocationFuture<Void> passApply(String teamId, String account);
  • 参数说明
参数 说明
teamId 群ID
account 申请入群的用户ID
  • 示例
NIMClient.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 原型
/**
 * 拒绝用户的入群申请 <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
  • 示例
NIMClient.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 原型
/**
 * 邀请成员
 *
 * @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
  • 示例
NIMClient.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。

  • 接受入群邀请
/**
 * 接受别人的入群邀请
 *
 * @param teamId  群ID
 * @param inviter 邀请我的用户帐号
 * @return InvocationFuture 可以设置回调函数
 */
InvocationFuture<Void> acceptInvite(String teamId, String inviter);
  • 参数说明
参数 说明
teamId 群ID
inviter 邀请我的用户帐号
  • 示例
NIMClient.getService(SuperTeamService.class).acceptInvite(teamId, inviter).setCallback(...);
  • 拒绝入群邀请
/**
 * 拒绝别人的入群邀请通知
 *
 * @param teamId  群ID
 * @param inviter 邀请我的用户帐号
 * @param reason  拒绝理由,长度不得超过5000
 * @return InvocationFuture 可以设置回调函数
 */
InvocationFuture<Void> declineInvite(String teamId, String inviter, String reason);
  • 参数说明
参数 说明
teamId 群ID
inviter 邀请我的用户帐号
reason 拒绝理由,选填,长度不能超过5000
  • 示例
NIMClient.getService(SuperTeamService.class).declineInvite(teamId, inviter, "").setCallback(callback);

踢人出群

仅拥有者可以踢人,群内所有成员(包括被踢者)会收到一条消息类型为 notification 的 IMMessage,类型为 NotificationType#SUPER_TEAM_KICK, 附件类型为 MemberChangeAttachment。可以通过 MemberChangeAttachment#getExtension 获取服务器设置的扩展字段。

  • API 原型
/**
 * 移除成员,只有群主有此权限
 *
 * @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 被踢出的成员帐号
  • 示例
// 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 原型
/**
 * 退出群
 *
 * @param teamId 群ID
 * @return InvocationFuture 可以设置回调函数,监听操作结果
 */
InvocationFuture<Void> quitTeam(String teamId);
  • 示例
NIMClient.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 原型
/**
 * 获取指定群的成员信息列表. <br>
 * 该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。
 *
 * @param teamId 群ID
 * @return InvocationFuture 可以设置回调函数,如果成功,参数为群的成员信息列表
 */
InvocationFuture<List<SuperTeamMember>> queryMemberList(String teamId);
  • 示例
NIMClient.getService(SuperTeamService.class).queryMemberList(teamId).setCallback(new RequestCallbackWrapper<List<SuperTeamMember>>() {
            @Override
            public void onResult(int code, final List<SuperTeamMember> members, Throwable exception) {
                ...
            }
    });

获取指定群组成员

如果本地群成员资料已过期, SDK 会去服务器获取最新的。

  • API 原型

异步版本:

/**
 * 查询群成员资料。如果本地群成员资料已过期会去服务器获取最新的。
 *
 * @param teamId  群ID
 * @param account 群成员帐号
 * @return InvocationFuture 可以设置回调函数,如果成功,参数为该群成员信息
 */
InvocationFuture<SuperTeamMember> queryTeamMember(String teamId, String account);

同步版本(仅查询本地群资料):

/**
 * 查询群成员资料。(同步版本)仅查询本地群资料
 *
 * @param teamId  群ID
 * @param account 群成员帐号
 * @return 群成员信息
 */
SuperTeamMember queryTeamMemberBlock(String teamId, String account);
  • 示例

异步版本示例:

NIMClient.getService(SuperTeamService.class).queryTeamMember(teamId, account).setCallback(new RequestCallbackWrapper<SuperTeamMember>() {
    @Override
    public void onResult(int code, SuperTeamMember member, Throwable exception) {
        ...
    }
});

同步版本示例:

SuperTeamMember member = NIMClient.getService(SuperTeamService.class).queryTeamMemberBlock(teamId, account);

分页获取群组成员

/**
 * 分页获取指定群的成员信息列表. <br>
 * 该操作有可能只是从本地数据库读取缓存数据,也有可能会从服务器同步新的数据, 因此耗时可能会比较长。
 *
 * @param teamId 群ID
 * @param offset 偏移位置
 * @param limit  获取条数,每次最多200
 * @return InvocationFuture 可以设置回调函数,如果成功,参数为群的成员信息列表
 */
InvocationFuture<List<SuperTeamMember>> queryMemberListByPage(String teamId, int offset, int limit);

修改群成员资料

修改其他成员资料

仅群主和管理员拥有权限修改群内其他成员的群昵称。

群主可以修改所有人的群昵称。管理员只能修改普通成员的群昵称。

  • API 原型
/**
 * 群组管理员修改群内其他成员的群昵称。<br>
 * 仅群管理员和拥有者有此权限
 *
 * @param teamId  所在群组ID
 * @param account 要修改的群成员帐号
 * @param nick    新的群昵称
 * @return InvocationFuture 可以设置回调函数,监听操作结果
 */
InvocationFuture<Void> updateMemberNick(String teamId, String account, String nick);
  • 示例
NIMClient.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 原型
/**
 * 修改自己的群昵称
 *
 * @param teamId 所在群组ID
 * @param nick   新的群昵称
 * @return InvocationFuture 可以设置回调函数,监听操作结果
 */
InvocationFuture<Void> updateMyTeamNick(String teamId, String nick);
  • 示例
// test为修改后自己的群昵称
NIMClient.getService(SuperTeamService.class).updateMyTeamNick(teamId, "test")

修改自己的群成员扩展字段:

  • API 原型
/**
 * 修改自己的群成员扩展字段(自定义属性, 最长32个字符)
 *
 * @param teamId    所在群组ID
 * @param extension 新的扩展字段(自定义属性)
 * @return InvocationFuture 可以设置回调函数,监听操作结果
 */
InvocationFuture<Void> updateMyMemberExtension(String teamId, String extension);
  • 示例
String extension = "1213";
NIMClient.getService(SuperTeamService.class).updateMyMemberExtension(teamId, extension)

监听群成员变化

由于获取群成员资料需要跨进程异步调用,开发者最好能在第三方 APP 中做好群成员资料缓存,查询群成员资料时都从本地缓存中访问。在群成员资料有变化时,SDK 会告诉注册的观察者,此时,第三方 APP 可更新缓存,并刷新界面。

监听群成员资料变化

  • API 原型
/**
 * 群成员资料变化观察者通知。
 * 上层APP如果管理了群成员资料的缓存,可通过此接口更新缓存。
 * @param observer 观察者, 参数为有更新的群成员资料列表
 * @param register true为注册,false为注销
 */
public void observeMemberUpdate(Observer<List<SuperTeamMember>> observer, boolean register);
  • 示例
// 群成员资料变化观察者通知。群组添加新成员,成员资料变化会收到该通知。
// 返回的参数为有更新的群成员资料列表。
Observer<List<SuperTeamMember>> memberUpdateObserver = new Observer<List<SuperTeamMember>>() {
	@Override
	public void onEvent(List<SuperTeamMember> members) {
	}
};
// 注册/注销观察者
NIMClient.getService(SuperTeamServiceObserver.class).observeMemberUpdate(memberUpdateObserver, register);

监听移除群成员的变化

  • API 原型
/**
 * 移除群成员的观察者通知。
 * @param observer 观察者, 参数为被移除的群成员
 * @param register true为注册,false为注销
 */
public void observeMemberRemove(Observer<SuperTeamMember> observer, boolean register);
  • 示例
// 移除群成员的观察者通知。
private Observer<SuperTeamMember> memberRemoveObserver = new Observer<SuperTeamMember>() {
	@Override
	public void onEvent(SuperTeamMember member) {
	}
};
// 注册/注销观察者
NIMClient.getService(SuperTeamServiceObserver.class).observeMemberRemove(memberRemoveObserver, register);

群主转让

超大群拥有者可以将群的拥有者权限转给群内的其他成员,转移后,被转让者变为新的拥有者,原拥有者变为普通成员。原拥有者还可以选择在转让的同时,直接退出该群。

  • API 原型
/**
 * 拥有者将群的拥有者权限转给另外一个人,转移后,另外一个人成为拥有者。<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: 参数为空
  • 示例
NIMClient.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 原型
/**
 * 拥有者添加管理员 <br>
 * 仅拥有者有此权限
 *
 * @param teamId   群ID
 * @param accounts 待提升为管理员的用户帐号列表
 * @return InvocationFuture 可以设置回调函数,如果成功,参数为新增的群管理员列表
 */
InvocationFuture<List<SuperTeamMember>> addManagers(String teamId, List<String> accounts);
  • 参数说明
参数 说明
teamId 群ID
accounts 待提升为管理员的用户帐号列表
返回值 说明
:--------------- :-----------------------------------------------------------
InvocationFuture 可以设置回调函数,如果成功,参数为被提升的群成员列表
(权限已被升为Manager)。
  • 示例
NIMClient.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 原型
/**
 * 拥有者撤销管理员权限 <br>
 * 仅拥有者有此权限
 *
 * @param teamId   群ID
 * @param managers 待撤销的管理员的帐号列表
 * @return InvocationFuture 可以设置回调函数,如果成功,参数为被撤销的群成员列表(权限已被降为Normal)。
 */
InvocationFuture<List<SuperTeamMember>> removeManagers(String teamId, List<String> managers);
  • 参数说明
参数 说明
teamId 群ID
managers 待撤销的管理员的帐号列表
返回值 说明
:--------------- :-----------------------------------------------------------
InvocationFuture 可以设置回调函数,如果成功,参数为被撤销的群成员列表
(权限已被降为Normal)。
  • 示例
NIMClient.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 原型
/**
 * 禁言、解除禁言
 *
 * @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表示解除禁言
  • 示例
// 以禁言为例
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 原型
/**
 * 对整个群禁言、解除禁言,对普通成员生效,只有群组、管理员有权限
 *
 * @param teamId 群组 ID
 * @param mute   true表示禁言,false表示解除禁言
 * @return InvocationFuture 可以设置回调函数,监听操作结果
 */
InvocationFuture<Void> muteAllTeamMember(String teamId, boolean mute);
  • 参数说明
参数 说明
teamId 群组ID
mute true表示禁言,false表示解除禁言
  • 示例
NIMClient.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 原型
/**
 * 查询被禁言群成员列表
 * 该操作,只返回调用{@link SuperTeamService#muteTeamMembers(String, ArrayList, boolean)} 禁言的用户。
 *
 * @param teamId 群ID
 * @return 群成员信息列表
 */
List<SuperTeamMember> queryMutedTeamMembers(String teamId);
  • 示例
// 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 原型
/**
 * 更新群组资料
 *
 * @return InvocationFuture 可以设置回调函数,监听操作结果
 */
InvocationFuture<Void> updateTeam(String teamId, TeamFieldEnum field, Serializable value);
  • 参数说明
参数 说明
teamId 群ID
field 待更新的域
value 待更新的域的新值 该值类型必须和field中定义的fieldType一致
  • 示例

以群公告为例

String 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 原型
/**
 * 批量更新群组资料,可一次性更新多个字段的值。
 *
 * @return InvocationFuture 可以设置回调函数,监听操作结果
 */
InvocationFuture<Void> updateTeamFields(String teamId, Map<TeamFieldEnum, Serializable> fields);
/**
 * 批量更新群组资料,可一次性更新多个字段的值。
 *
 * @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 反垃圾相关配置参数
  • 示例
// 以名字,介绍,公告为例
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 原型
/**
 * 群资料变动观察者通知。新建群和群更新的通知都通过该接口传递
 * @param observer 观察者, 参数为有更新的群资料列表
 * @param register true为注册,false为注销
 */
public void observeTeamUpdate(Observer<List<SuperTeam>> observer, boolean register);
  • 示例
// 创建群组资料变动观察者
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 原型
/**
 * 移除群的观察者通知。自己退群,群被解散,自己被踢出群时,会收到该通知
 * @param observer 观察者, 参数为被移除的群资料,此时群的isMyTeam接口返回false
 * @param register true为注册,false为注销
 */
public void observeTeamRemove(Observer<SuperTeam> observer, boolean register);
  • 示例
// 创建群组被移除的观察者。在退群,被踢,群被解散时会收到该通知。
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 原型
/**
 * 设置指定群消息通知类型,查看{@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 通知类型枚举,只有全部提醒和全部不提醒为有效参数
  • 示例
// 以设置 “全部不提醒” 为例
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原型
/**
* 通过群名称反查群组ID
*
* @param name 群组名称
* @return 群ID列表
*/
InvocationFuture<List<String>> searchTeamIdByName(String name);
  • 示例
NIMClient.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
        }
    }
});

用户在客户端本地可以搜索与关键字匹配的所有群:

/**
 * 通过群名称反查群组ID
 *
 * @param name 群组名称
 * @return 群ID列表
 */
InvocationFuture<java.util.List<Team>> searchTeamsByKeyword(java.lang.String keyword);
此文档是否对你有帮助?
有帮助
我要吐槽
  • 超大群概述
  • 消息收发
  • 消息收发概述
  • 消息撤回
  • 创建群组
  • 获取群组
  • 从本地获取所有群组
  • 从本地获取指定群组
  • 批量获取指定群组
  • 从云端获取指定群组
  • 解散群组
  • 群成员管理
  • 入群操作
  • 申请加入群组
  • 验证入群申请
  • 邀请加入群组
  • 验证入群邀请
  • 踢人出群
  • 主动退群
  • 获取群组成员
  • 获取群组成员列表
  • 获取指定群组成员
  • 分页获取群组成员
  • 修改群成员资料
  • 修改其他成员资料
  • 修改自己资料
  • 监听群成员变化
  • 监听群成员资料变化
  • 监听移除群成员的变化
  • 群主转让
  • 增加管理员
  • 移除管理员
  • 禁言
  • 禁言指定成员
  • 禁言群全体成员
  • 查询被禁言群成员
  • 群资料管理
  • 编辑群资料
  • 编辑单个资料
  • 编辑多个资料
  • 监听群组变化
  • 监听群资料变化
  • 监听移除群的变化
  • 群组通知
  • 群消息免打扰
  • 群组检索