功能描述
群成员管理指的是对成员进行列表拉取、禁言、踢人、授权、转让群主等操作。相关方法在核心类
V2TIMGroupManager(Android)
/ V2TIMManager(Group)(iOS & Mac)
中。获取群成员列表
您可以调用
getGroupMemberList
(Android / iOS & Mac / Windows) 获取指定群的群成员列表。
该列表中包含了各个群成员的资料信息,例如用户 ID(userID
)、群名片(nameCard
)、头像(faceUrl
)、昵称(nickName
)、进群时间(joinTime
)、在线状态(isOnline
)等信息。(在线状态信息需要旗舰版支持)直播群由于人数众多,不提供拉取全量成员列表的功能。旗舰版客户可调用
getGroupMemberList
拉取最近进群的 1000 位群成员。
一个群中的成员人数可能很多(例如 5000+),群成员列表的拉取接口支持过滤器(
filter
)和分页拉取(nextSeq
)两个高级特性。过滤器(filter)拉取
在调用
getGroupMemberList
(Android / iOS & Mac / Windows) 接口时,您可以指定 filter
为 V2TIMGroupMemberFilter
,拉取特定角色列表。过滤器 | 过滤类型 |
V2TIM_GROUP_MEMBER_FILTER_ALL | 拉取所有群成员的信息列表 |
V2TIM_GROUP_MEMBER_FILTER_OWNER | 仅拉取群主的信息列表 |
V2TIM_GROUP_MEMBER_FILTER_ADMIN | 仅拉取群管理员的信息列表 |
V2TIM_GROUP_MEMBER_FILTER_COMMON | 仅拉取普通群成员的信息列表 |
示例代码如下:
// 通过 filter 参数指定只拉取群主的资料int role = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_OWNER;V2TIMManager.getGroupManager().getGroupMemberList("testGroup", role, 0,new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {@Overridepublic void onError(int code, String desc) {// 拉取失败}@Overridepublic void onSuccess(V2TIMGroupMemberInfoResult v2TIMGroupMemberInfoResult) {// 拉取成功}});
[[V2TIMManager sharedInstance] getGroupMemberList:@"groupA" filter:V2TIM_GROUP_MEMBER_FILTER_OWNER nextSeq:0 succ:^(uint64_t nextSeq, NSArray<V2TIMGroupMemberFullInfo *> *memberList) {// 拉取成功} fail:^(int code, NSString *desc) {// 拉取失败}];
template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public:using SuccessCallback = std::function<void(const T&)>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;ValueCallback() = default;~ValueCallback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess(const T& value) override {if (success_callback_) {success_callback_(value);}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};V2TIMString groupID = "testGroup";// 通过 filter 参数指定只拉取群主的资料uint32_t filter = V2TIMGroupMemberFilter::V2TIM_GROUP_MEMBER_FILTER_OWNER;uint64_t nextSeq = 0;auto callback = new ValueCallback<V2TIMGroupMemberInfoResult>{};callback->SetCallback([=](const V2TIMGroupMemberInfoResult& groupMemberInfoResult) {// 拉取成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 拉取失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->GetGroupMemberList(groupID, filter, nextSeq, callback);
分页拉取(nextSeq)
很多情况下,用户界面上并不需要展示全部的群成员信息,只需展示群成员列表的第一页即可。等用户单击“下一页”或在列表页上拉刷新时,才需要拉取更多的群成员。针对此类场景,您可以使用分页拉取。
分页拉取的步骤为:
1. 首次调用
getGroupMemberList
时,指定参数 nextSeq
为 0(表示从头开始拉取会话列表),一次最多拉取 50 个群成员对象。2. 首次拉取群成员列表成功后,
getGroupMemberList
的回调结果 V2TIMGroupMemberInfoResult
中会包含 nextSeq
(下次分页拉取的字段):如果
nextSeq
等于 0,表示已经拉取了全部的群成员。如果
nextSeq
大于 0,表示还有更多的群成员可以拉取。此时并不意味着要立刻开始拉取 “下一页” 的成员列表。在常见的软件中,分页拉取通常由用户的滑动操作触发的,用户通过上拉触发一次分页拉取。3. 当用户继续上拉刷新群成员时,如果还有更多的群成员可以拉取,可以继续调用
getGroupMemberList
接口,并传入新一轮的 nextSeq
参数(nextSeq
数值来自上一次拉取返回的 V2TIMGroupMemberInfoResult
对象)。4. 重复执行【步骤 3】直至
nextSeq
等于 0,拉取结束。示例代码如下:
{...long nextSeq = 0;getGroupMemberList(nextSeq);...}public void getGroupMemberList(long nextSeq) {int filterRole = V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_FILTER_ALL;V2TIMManager.getGroupManager().getGroupMemberList("testGroup", filterRole, nextSeq,new V2TIMValueCallback<V2TIMGroupMemberInfoResult>() {@Overridepublic void onError(int code, String desc) {// 拉取失败}@Overridepublic void onSuccess(V2TIMGroupMemberInfoResult groupMemberInfoResult) {if (groupMemberInfoResult.getNextSeq() != 0) {// 继续分页拉取getGroupMemberList(groupMemberInfoResult.getNextSeq());...} else {// 拉取结束}}});}
- (void)getGroupMemberList:(uint32_t)seq {[[V2TIMManager sharedInstance] getGroupMemberList:@"groupA" filter:V2TIM_GROUP_MEMBER_FILTER_OWNER nextSeq:seq succ:^(uint64_t nextSeq, NSArray<V2TIMGroupMemberFullInfo *> *memberList) {if (nextSeq != 0) {// 继续分页拉取[self getGroupMemberList:nextSeq];//...} else {// 拉取结束}} fail:^(int code, NSString *desc) {// 拉取失败}];}
template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public:using SuccessCallback = std::function<void(const T&)>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;ValueCallback() = default;~ValueCallback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess(const T& value) override {if (success_callback_) {success_callback_(value);}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};V2TIMString groupID = "testGroup";uint32_t filter = V2TIMGroupMemberFilter::V2TIM_GROUP_MEMBER_FILTER_ALL;uint64_t nextSeq = 0;auto callback = new ValueCallback<V2TIMGroupMemberInfoResult>{};callback->SetCallback([=](const V2TIMGroupMemberInfoResult& groupMemberInfoResult) {if (groupMemberInfoResult.nextSequence != 0) {// 继续分页拉取 ...}delete callback;},[=](int error_code, const V2TIMString& error_message) {// 拉取失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->GetGroupMemberList(groupID, filter, nextSeq, callback);
标记群成员
1. 只有直播群和社群支持此功能,只有群主有权限操作。
2. 每个直播群最多只能添加 10 个自定义标记。
3. 通过 IM SDK 设置自定义标记类型为 uint32_t,必须大于等于 1000。
4. 每次最多标记 100 名群成员。
5. 被标记的群成员需要在线。当成员退群、掉线时标记信息会被清除。可以通过第三方回调在该成员进群、上线时重新设置标记。
说明
1. 仅增强版 6.6 及以上版本支持。
2. 标记直播群成员仅对旗舰版客户开放,详情请参考 基础服务详情。
3. 如需使用此功能,您需要登录 即时通信 IM 控制台 开启开关,配置页面如下图所示:
禁言
禁言指定群成员
说明
群主可以禁言/取消禁言管理员和普通群成员。管理员可以禁言/取消禁言普通群成员。
禁言整个群
群主或管理员也可以通过
muteAllGroupMembers
(Android / iOS & Mac / Windows) 接口对整个群进行禁言,将 isMute
字段设置为 true
/YES
即可,解除禁言则设置为 false/NO
。全群禁言没有时间限制。
说明
只有群主能将管理员禁言。
示例代码如下:
// 禁言群成员 userB 1分钟V2TIMManager.getGroupManager().muteGroupMember("groupA", "userB", 60, new V2TIMCallback() {@Overridepublic void onSuccess() {// 禁言群成员成功}@Overridepublic void onError(int code, String desc) {// 禁言群成员失败}});// 全员禁言V2TIMManager.getGroupManager().muteAllGroupMembers("groupA", true, new V2TIMCallback() {@Overridepublic void onSuccess() {// 全员禁言成功}@Overridepublic void onError(int code, String desc) {// 全员禁言失败}});V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onMemberInfoChanged(String groupID, List<V2TIMGroupMemberChangeInfo> v2TIMGroupMemberChangeInfoList) {// 禁言群成员监听for (V2TIMGroupMemberChangeInfo memberChangeInfo : v2TIMGroupMemberChangeInfoList) {// 被禁言用户 IDString userID = memberChangeInfo.getUserID();// 禁言时间long muteTime = memberChangeInfo.getMuteTime();}}@Overridepublic void onAllGroupMembersMuted(String groupID, boolean isMute) {// 全员禁言监听}})
// 禁言群成员 user1 1分钟[[V2TIMManager sharedInstance] muteGroupMember:@"groupA" member:@"user1" muteTime:60 succ:^{// 禁言群成员成功} fail:^(int code, NSString *desc) {// 禁言群成员失败}];// 全员禁言[[V2TIMManager sharedInstance] muteAllGroupMembers:@"groupA" isMute:YES succ:^{// 全员禁言成功} fail:^(int code, NSString *desc) {// 全员禁言失败}];[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onMemberInfoChanged:(NSString *)groupID changeInfoList:(NSArray <V2TIMGroupMemberChangeInfo *> *)changeInfoList {// 禁言群成员监听for (V2TIMGroupMemberChangeInfo *memberChangeInfo in changeInfoList) {// 被禁言用户 IDNSString *userID = memberChangeInfo.userID;// 禁言时间uint32_t muteTime = memberChangeInfo.muteTime;}}- (void)onAllGroupMembersMuted:(NSString *)groupID isMute:(BOOL)isMute {// 全员禁言监听}
class Callback final : public V2TIMCallback {public:using SuccessCallback = std::function<void()>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;Callback() = default;~Callback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess() override {if (success_callback_) {success_callback_();}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};// 禁言群成员 userB 1分钟auto callback = new Callback;callback->SetCallback([=]() {// 禁言群成员成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 禁言群成员失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->MuteGroupMember("groupA", "userB", 60, callback);// 全员禁言auto callback = new Callback;callback->SetCallback([=]() {// 全员禁言成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 全员禁言失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->muteAllGroupMembers("groupA", true, callback);// 监听禁言群成员/全员禁言通知class GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;void OnMemberInfoChanged(const V2TIMString& groupID,const V2TIMGroupMemberChangeInfoVector& groupMemberChangeInfoList) override {// 禁言群成员监听for (size_t i = 0; i < groupMemberChangeInfoList.Size(); ++i) {const V2TIMGroupMemberChangeInfo& groupMemberChangeInfo = groupMemberChangeInfoList[i];// 被禁言用户 IDV2TIMString userID = groupMemberChangeInfo.userID;// 禁言时间uint32_t muteTime = groupMemberChangeInfo.muteTime;}}void onAllGroupMembersMuted(const V2TIMString& groupID,bool isMute) override {// 全员禁言监听}// 其他成员 ...};// 添加群事件监听器,注意在移除监听器之前需要保持 groupListener 的生命期,以免接收不到事件回调GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
踢人
SDK 提供了面向所有群类型的基本踢人接口和高级踢人接口,群主或管理员可以调用 SDK 提供的踢人接口将指定的群成员踢出群组。
踢人基本接口
群主或管理员调用
kickGroupMember
① (Android / iOS & Mac / Windows) 接口可以将指定的群成员踢出群组。群成员被踢后,全员(包括被踢的人)都会收到 onMemberKicked (Android / iOS & Mac / Windows) 回调。示例代码如下:
List<String> userIDList = new ArrayList<>();userIDList.add("userB");V2TIMManager.getGroupManager().kickGroupMember("groupA", userIDList, "", newV2TIMValueCallback<List<V2TIMGroupMemberOperationResult>>() {@Overridepublic void onSuccess(List<V2TIMGroupMemberOperationResult> v2TIMGroupMemberOperationResults) {// 踢人成功}@Overridepublic void onError(int code, String desc) {// 踢人失败}});V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onMemberKicked(String groupID, V2TIMGroupMemberInfo opUser,List<V2TIMGroupMemberInfo> memberList) {// 群成员被踢通知}});
[[V2TIMManager sharedInstance] kickGroupMember:@"groupA" memberList:@[@"user1"] reason:@"" succ:^(NSArray<V2TIMGroupMemberOperationResult *> *resultList) {// 踢人成功} fail:^(int code, NSString *desc) {// 踢人失败}];[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onMemberKicked:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList {// 群成员被踢通知}
template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public:using SuccessCallback = std::function<void(const T&)>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;ValueCallback() = default;~ValueCallback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess(const T& value) override {if (success_callback_) {success_callback_(value);}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};V2TIMString groupID = "groupA";V2TIMStringVector memberList;memberList.PushBack("userB");auto callback = new ValueCallback<V2TIMGroupMemberOperationResultVector>{};callback->SetCallback([=](const V2TIMGroupMemberOperationResultVector& groupMemberOperationResultList) {// 踢人成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 踢人失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->KickGroupMember(groupID, memberList, {}, callback);// 监听群成员被踢通知class GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;void OnMemberKicked(const V2TIMString& groupID, const V2TIMGroupMemberInfo& opUser, const V2TIMGroupMemberInfoVector& memberList) override {// 群成员被踢通知}};// 添加群事件监听器,注意在移除监听器之前需要保持 groupListener 的生命期,以免接收不到事件回调GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
踢人高级接口
从 7.2 版本开始,SDK 对
kickGroupMember
② (Android / iOS & Mac / Windows) 接口做了功能升级,新增 duration 参数,用于指定用户被踢出群组开始算起,禁止重新申请加群的时长。注意:
示例代码如下:
List<String> userIDList = new ArrayList<>();userIDList.add("userB");V2TIMManager.getGroupManager().kickGroupMember("groupA", userIDList, "", 100, newV2TIMValueCallback<List<V2TIMGroupMemberOperationResult>>() {@Overridepublic void onSuccess(List<V2TIMGroupMemberOperationResult> v2TIMGroupMemberOperationResults) {// 踢人成功}@Overridepublic void onError(int code, String desc) {// 踢人失败}});V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onMemberKicked(String groupID, V2TIMGroupMemberInfo opUser,List<V2TIMGroupMemberInfo> memberList) {// 群成员被踢通知}});
[[V2TIMManager sharedInstance] kickGroupMember:@"groupA" memberList:@[@"user1"] reason:@"" duration:100 succ:^(NSArray<V2TIMGroupMemberOperationResult *> *resultList) {// 踢人成功} fail:^(int code, NSString *desc) {// 踢人失败}];[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onMemberKicked:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList {// 群成员被踢通知}
template <class T>class ValueCallback final : public V2TIMValueCallback<T> {public:using SuccessCallback = std::function<void(const T&)>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;ValueCallback() = default;~ValueCallback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess(const T& value) override {if (success_callback_) {success_callback_(value);}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};V2TIMString groupID = "groupA";V2TIMStringVector memberList;memberList.PushBack("userB");auto callback = new ValueCallback<V2TIMGroupMemberOperationResultVector>{};callback->SetCallback([=](const V2TIMGroupMemberOperationResultVector& groupMemberOperationResultList) {// 踢人成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 踢人失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->KickGroupMember(groupID, memberList, {}, 100, callback);// 监听群成员被踢通知class GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;void OnMemberKicked(const V2TIMString& groupID, const V2TIMGroupMemberInfo& opUser,const V2TIMGroupMemberInfoVector& memberList) override {// 群成员被踢通知}};// 添加群事件监听器,注意在移除监听器之前需要保持 groupListener 的生命期,以免接收不到事件回调GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
直播群踢人
对于直播群(AVChatRoom)而言:
1. 增强版 6.6 以前,直播群不支持踢人。您可以使用
muteGroupMember
(Android / iOS & Mac / Windows) 禁言指定成员达到类似的成员管控的目的,禁言操作参考 禁言。2. 增强版 6.6 开始,直播群支持踢人。您可以使用基础接口踢出群成员,群成员被踢出直播群后,无法再加入该群,也不能再向群里发消息。直播群中群主和管理员均能踢人,普通成员没有踢人权限。
3. 从 7.2 版本开始,直播群也可以使用高级接口踢出群成员,并设置自定义时间,用以指定被踢用户可再次加群的时间间隔。
4. 6.6 版本及其以后的版本,直播群踢人均需要旗舰版支持,并需要登录控制台配置开启。
设置管理员
群主调用
setGroupMemberRole
(Android / iOS & Mac / Windows) 可以对陌生人社交群(Public)、临时会议群(Meeting)和直播群(AVChatRoom)中的群成员进行管理员授权。陌生人社交群和临时会议群普通成员被授权后,拥有跟管理员同样的权限,例如支持以下操作:
修改群组基本资料
将普通群成员踢出群
将普通群成员禁言(即禁止其在一段时间内发言)
审批其他用户的入群申请
更多详情可参考 群成员角色介绍。
直播群普通成员被授权后,拥有跟管理员同样的权限,例如:
将普通群成员踢出直播群。
示例代码如下:
V2TIMManager.getGroupManager().setGroupMemberRole("groupA", "userB", V2TIMGroupMemberFullInfo.V2TIM_GROUP_MEMBER_ROLE_ADMIN, new V2TIMCallback() {@Overridepublic void onSuccess() {// 更改群成员角色成功}@Overridepublic void onError(int code, String desc) {// 更改群成员角色失败}});V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onGrantAdministrator(String groupID, V2TIMGroupMemberInfo opUser,List<V2TIMGroupMemberInfo> memberList) {// 被设置管理员通知}@Overridepublic void onRevokeAdministrator(String groupID, V2TIMGroupMemberInfo opUser,List<V2TIMGroupMemberInfo> memberList) {// 被取消管理员通知}});
[[V2TIMManager sharedInstance] setGroupMemberRole:@"groupA" member:@"user1" newRole:V2TIM_GROUP_MEMBER_ROLE_ADMIN succ:^{// 更改群成员角色成功} fail:^(int code, NSString *desc) {// 更改群成员角色失败}];[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onGrantAdministrator:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList {// 被设置管理员通知}- (void)onRevokeAdministrator:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray <V2TIMGroupMemberInfo *> *)memberList {// 被取消管理员通知}
class Callback final : public V2TIMCallback {public:using SuccessCallback = std::function<void()>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;Callback() = default;~Callback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess() override {if (success_callback_) {success_callback_();}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};V2TIMString groupID = "groupA";V2TIMString userID = "userB";uint32_t role = V2TIMGroupMemberRole::V2TIM_GROUP_MEMBER_ROLE_ADMIN;auto callback = new Callback;callback->SetCallback([=]() {// 更改群成员角色成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 更改群成员角色失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->SetGroupMemberRole(groupID, userID, role, callback);// 监听被设置管理员通知class GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;void OnGrantAdministrator(const V2TIMString& groupID, const V2TIMGroupMemberInfo& opUser,const V2TIMGroupMemberInfoVector& memberList) override {// 被设置管理员通知}void OnRevokeAdministrator(const V2TIMString& groupID, const V2TIMGroupMemberInfo& opUser,const V2TIMGroupMemberInfoVector& memberList) override {// 被取消管理员通知}// 其他成员 ...};// 添加群事件监听器,注意在移除监听器之前需要保持 groupListener 的生命期,以免接收不到事件回调GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
转让群主
群主转让后,全员会收到
onGroupInfoChanged
(Android / iOS & Mac / Windows) 回调,其中 V2TIMGroupChangeInfo
的 type
为 V2TIMGroupChangeInfo.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER
,值为新群主的 UserID
。示例代码如下:
V2TIMManager.getGroupManager().transferGroupOwner("groupA", "userB", new V2TIMCallback() {@Overridepublic void onSuccess() {// 转让群主成功}@Overridepublic void onError(int code, String desc) {// 转让群主失败}});
[[V2TIMManager sharedInstance] transferGroupOwner:@"groupA" member:@"user1" succ:^{// 转让群主成功} fail:^(int code, NSString *desc) {// 转让群主失败}];
class Callback final : public V2TIMCallback {public:using SuccessCallback = std::function<void()>;using ErrorCallback = std::function<void(int, const V2TIMString&)>;Callback() = default;~Callback() override = default;void SetCallback(SuccessCallback success_callback, ErrorCallback error_callback) {success_callback_ = std::move(success_callback);error_callback_ = std::move(error_callback);}void OnSuccess() override {if (success_callback_) {success_callback_();}}void OnError(int error_code, const V2TIMString& error_message) override {if (error_callback_) {error_callback_(error_code, error_message);}}private:SuccessCallback success_callback_;ErrorCallback error_callback_;};V2TIMString groupID = "groupA";V2TIMString userID = "userB";auto callback = new Callback;callback->SetCallback([=]() {// 转让群主成功delete callback;},[=](int error_code, const V2TIMString& error_message) {// 转让群主失败delete callback;});V2TIMManager::GetInstance()->GetGroupManager()->TransferGroupOwner(groupID, userID, callback);
获取群在线人数
说明
增强版 SDK 7.3 以前的版本仅支持直播群( AVChatRoom)。
增强版 SDK 7.3 及以后的版本支持所有群类型。
代码示例如下:
V2TIMManager.getGroupManager().getGroupOnlineMemberCount("group_avchatroom", new V2TIMValueCallback<Integer>() {@Overridepublic void onSuccess(Integer integer) {// 获取直播群在线人数成功}@Overridepublic void onError(int code, String desc) {// 获取直播群在线人数失败}});