addGroupListener
(Java / Swift / Objective-C / C++) to add a group event listener.V2TIMGroupListener
(Java / Swift / Objective-C / C++), including group member notification, group lifecycle notification, group join request notification, and topic event listening callback.removeGroupListener
(Java / Swift / Objective-C / C++) to remove the group event listener.Group system notification configuration
, Configuration page is as follows:V2TIMGroupListener groupListener = new V2TIMGroupListener() {// Group member notification, group lifecycle notification, group join request notification, topic event listening callback, etc.@Overridepublic void onMemberEnter(String groupID, List<V2TIMGroupMemberInfo> memberList) {// A member joined the group. All the group members can receive the notification.}@Overridevoid onMemberLeave(String groupID, V2TIMGroupMemberInfo member) {// A member left the group. All the group members can receive the notification.}@Overridepublic void onReceiveRESTCustomData(String groupID, byte[] customData) {// Custom system notification sent by the server}};V2TIMManager.getInstance().addGroupListener(groupListener);
V2TIMManager.shared.addGroupListener(listener: self)// Group member notification, group lifecycle notification, group join request notification, topic event listening callback, etc.func onMemberEnter(groupID: String, memberList: Array<V2TIMGroupMemberInfo>) {// A member joined the group. All the group members can receive the notification.print("groupID:\\(groupID), memberList:\\(memberList)")}func onMemberLeave(groupID: String, member: V2TIMGroupMemberInfo) {// A member left the group. All the group members can receive the notification.print("groupID:\\(groupID), member:\\(member)")}func onReceiveRESTCustomData(groupID: String, data: Data?) {// Custom system notification sent by the serverprint("groupID:\\(groupID), data:\\(data)")}
[[V2TIMManager sharedInstance] addGroupListener:self];// Group member notification, group lifecycle notification, group join request notification, topic event listening callback, etc.- (void)onMemberEnter:(NSString *)groupID memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList {// A member joined the group. All the group members can receive the notification.}- (void)onMemberLeave:(NSString *)groupID member:(V2TIMGroupMemberInfo *)member {// A member left the group. All the group members can receive the notification.}- (void)onReceiveRESTCustomData:(NSString *)groupID data:(NSData *)data {// Custom system notification sent by the server}
class GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;// Group member notification, group lifecycle notification, group join request notification, topic event listening callback, etc.void OnMemberEnter(const V2TIMString& groupID, const V2TIMGroupMemberInfoVector& memberList) override {// A member joined the group. All the group members can receive the notification.}void OnMemberLeave(const V2TIMString& groupID, const V2TIMGroupMemberInfo& member) override {// A member left the group. All the group members can receive the notification.}void OnReceiveRESTCustomData(const V2TIMString& groupID, const V2TIMBuffer& customData) override {// Custom system notification sent by the server}};// Add a group event listener. Keep `groupListener` valid before the listener is removed to ensure event callbacks are received.GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
searchGroups
(Java / Swift / Objective-C / C++) API to search local groups.
You can set the search keyword keywordList
, and specify the search range, that is, whether to search the userID
,groupName
fields.V2TIMGroupSearchParam searchParam = new V2TIMGroupSearchParam();searchParam.setKeywordList(Arrays.asList("keyword1", "keyword2", "keyword3")); // Set the search keyword list, up to 5 supported.searchParam.setSearchGroupID(true); // Set whether to search for Group IDsearchParam.setSearchGroupName(true); // Set whether to search for Group NameV2TIMManager.getGroupManager().searchGroups(searchParam, new V2TIMValueCallback<List<V2TIMGroupInfo>>() {@Overridepublic void onSuccess(List<V2TIMGroupInfo> groupInfoList) {// Search group information successful}@Overridepublic void onError(int code, String desc) {// Search group information failed}});
let param = V2TIMGroupSearchParam()param.keywordList = ["keyword1", "keyword2"]param.isSearchGroupID = trueparam.isSearchGroupName = true// Search group informationV2TIMManager.shared.searchGroups(searchParam: param) { groupList in// Search group information successfulgroupList.forEach { item inprint(item.description)}} fail: { code, desc in// Search group information failedprint("searchGroups fail, \\(code), \\(desc)")}
V2TIMGroupSearchParam *searchParam = [[V2TIMGroupSearchParam alloc] init];searchParam.keywordList = @[@"keyword1", @"keyword2", @"keyword3"];searchParam.isSearchGroupID = true;searchParam.isSearchGroupName = true;// Search group information[[V2TIMManager sharedInstance] searchGroups:searchParam succ:^(NSArray<V2TIMGroupInfo *> *groupList) {// Search group information successful} fail:^(int code, NSString *desc) {// Search group information failed}];
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_;};V2TIMGroupSearchParam searchParam;searchParam.keywordList = keywordList;searchParam.isSearchGroupID = true;searchParam.isSearchGroupName = true;auto callback = new ValueCallback<V2TIMGroupInfoVector>{};callback->SetCallback([=](const V2TIMGroupInfoVector& groupInfoList) {// Search group succeededdelete callback;},[=](int error_code, const V2TIMString& error_message) {// Search group faileddelete callback;});V2TIMManager::GetInstance()->GetGroupManager()->SearchGroups(searchParam, callback);
createGroup
ordinary API (Java / Swift / Objective-C / C++) and specify parameters to create a group.createGroup
parameters are as described below:Parameter | Definition | Required | Description |
groupType | Group type | Yes | |
groupID | Group ID | No | If it is left empty, an ID will be automatically assigned after a group is created successfully. |
groupName | Group name | Yes | It can contain up to 30 bytes. |
addGroupListener
to add a group event listener as instructed in Group Event Listener, onGroupCreated
(Java / Swift / Objective-C / C++) will be called back after a group is created successfully.V2TIMManager.getInstance().createGroup(V2TIMManager.GROUP_TYPE_WORK, null, "groupA", new V2TIMValueCallback<String>() {@Overridepublic void onSuccess(String s) {// Group created successfully}@Overridepublic void onError(int code, String desc) {// Failed to create the group}});// Listen for the group creation notificationV2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onGroupCreated(String groupID) {// A group was created. `groupID` is the ID of the created group.}});
// Create a groupV2TIMManager.shared.createGroup(groupType: "Public", groupID: nil, groupName: "groupName") { groupID inprint("create group succ, \\(groupID)")} fail: { code, desc inprint("createGroup fail, \\(code), \\(desc)")};// Listen for the group creation notificationV2TIMManager.shared.addGroupListener(listener: self)func onGroupCreated(groupID: String) {print("groupID:\\(groupID)")}
// Create a group[[V2TIMManager sharedInstance] createGroup:GroupType_Work groupID:nil groupName:@"groupA" succ:^(NSString *groupID) {// Group created successfully} fail:^(int code, NSString *desc) {// Failed to create the group}];// Listen for the group creation notification[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onGroupCreated:(NSString *)groupID {// A group was created. `groupID` is the ID of the created group.}
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_;};auto callback = new ValueCallback<V2TIMString>{};callback->SetCallback([=](const V2TIMString& string) {// Group created successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Failed to create the groupdelete callback;});V2TIMManager::GetInstance()->CreateGroup("Work", {}, "groupA", callback);// Listen for the group creation notificationclass GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;void OnGroupCreated(const V2TIMString& groupID) override {// A group was created. `groupID` is the ID of the created group.}// Other members …};// Add a group event listener. Keep `groupListener` valid before the listener is removed to ensure event callbacks are received.GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
createGroup
advanced API (Java / Swift / Objective-C / C++), and the groupID
will be returned in the callback for successful creation.// Use the `createGroup` advanced API to create a work groupV2TIMGroupInfo v2TIMGroupInfo = new V2TIMGroupInfo();v2TIMGroupInfo.setGroupName("testWork");v2TIMGroupInfo.setGroupType("Work");v2TIMGroupInfo.setIntroduction("this is a test Work group");List<V2TIMCreateGroupMemberInfo> memberInfoList = new ArrayList<>();V2TIMCreateGroupMemberInfo memberA = new V2TIMCreateGroupMemberInfo();memberA.setUserID("vinson");V2TIMCreateGroupMemberInfo memberB = new V2TIMCreateGroupMemberInfo();memberB.setUserID("park");memberInfoList.add(memberA);memberInfoList.add(memberB);V2TIMManager.getGroupManager().createGroup(v2TIMGroupInfo, memberInfoList, new V2TIMValueCallback<String>() {@Overridepublic void onError(int code, String desc) {// Creation failed}@Overridepublic void onSuccess(String groupID) {// Group created successfully}});
// Use the `createGroup` advanced API to create a work grouplet groupInfo = V2TIMGroupInfo()groupInfo.groupType = "Public"groupInfo.groupName = "groupName"groupInfo.notification = "this is a notification generated by swift api"groupInfo.introduction = "this is a introduction genrated by swift api"groupInfo.faceURL = "this is a face url generated by swift api"groupInfo.groupApproveOpt = .V2TIM_GROUP_ADD_AUTHvar memberList = Array<V2TIMCreateGroupMemberInfo>()memberList.append({let info = V2TIMCreateGroupMemberInfo()info.userID = "userID001"info.role = 100return info}())memberList.append({let info = V2TIMCreateGroupMemberInfo()info.userID = "userID002"info.role = 200return info}())V2TIMManager.shared.createGroup(info: groupInfo, memberList: nil) { groupID inprint("createGroup succ, \\(groupID)")} fail: { code, desc inprint("createGroup fail, \\(code), \\(desc)")}
// Use the `createGroup` advanced API to create a work groupV2TIMGroupInfo *info = [[V2TIMGroupInfo alloc] init];info.groupName = @"testWork";info.groupType = @"Work";NSMutableArray *memberList = [NSMutableArray array];V2TIMCreateGroupMemberInfo *memberInfo = [[V2TIMCreateGroupMemberInfo alloc] init];memberInfo.userID = @"vinson";[memberList addObject:memberInfo];[[V2TIMManager sharedInstance] createGroup:info memberList:memberList succ:^(NSString *groupID) {// Group created successfully} fail:^(int code, NSString *msg) {// Failed to create the group}];
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_;};// Use the `createGroup` advanced API to create a work groupV2TIMGroupInfo info;info.groupType = "Work";info.groupName = "testWork";info.introduction = "this is a test Work group";V2TIMCreateGroupMemberInfoVector memberInfoList;V2TIMCreateGroupMemberInfo memberInfo1;memberInfo1.userID = "vinson";memberInfoList.PushBack(memberInfo1);V2TIMCreateGroupMemberInfo memberInfo2;memberInfo2.userID = "park";memberInfoList.PushBack(memberInfo2);auto callback = new ValueCallback<V2TIMString>{};callback->SetCallback([=](const V2TIMString& string) {// Group created successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Creation faileddelete callback;});V2TIMManager::GetInstance()->GetGroupManager()->CreateGroup(info, memberInfoList, callback);
Type | Method for Joining a Group |
Work group (Work) | By invitation |
Public group (Public) | On request from the user and on approval from the group owner or admin |
Meeting group (Meeting) | Free to join |
Community (Community) | Free to join |
Audio-video group (AVChatRoom) | Free to join |
addGroupListener
to add a group event listener in advance as instructed in Group Event Listener to receive the following group events.joinGroup
(Java / Swift / Objective-C / C++) to join the group.onMemberEnter
callback (Java / Swift / Objective-C / C++).groupAddOpt
field of V2TIMGroupInfo
by calling setGroupInfo
(Java / Swift / Objective-C / C++) to enable free group joining.// Join a groupV2TIMManager.getInstance().joinGroup("groupA", "it's me!", new V2TIMCallback() {@Overridepublic void onSuccess() {// Joined the group successfully}@Overridepublic void onError(int code, String desc) {// Failed to join the group}});// Listen for the group join eventV2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onMemberEnter(String groupID, List<V2TIMGroupMemberInfo> memberList) {// A user joined the group.}});
V2TIMManager.shared.joinGroup(groupID: "groupA", msg: "it's me!") {print( "joinGroup succ")} fail: { code, desc inprint( "joinGroup fail, \\(code), \\(desc)")}// Listen for the group join eventV2TIMManager.shared.addGroupListener(listener: self)func onMemberEnter(groupID: String, memberList: Array<V2TIMGroupMemberInfo>) {// A user joined the group.print("groupID:\\(groupID), memberList:\\(memberList)")}
// Join a group[[V2TIMManager sharedInstance] joinGroup:@"groupA" msg:@"it's me!" succ:^{// Joined the group successfully} fail:^(int code, NSString *desc) {// Failed to join the group}];// Listen for the group join event[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onMemberEnter:(NSString *)groupID memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList {// A user joined the group.}
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_;};auto callback = new Callback{};callback->SetCallback([=]() {// Joined the group successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Failed to join the groupdelete callback;});V2TIMManager::GetInstance()->JoinGroup("groupA", "it's me!", callback);// Listen for the group join eventclass GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;void OnMemberEnter(const V2TIMString& groupID, const V2TIMGroupMemberInfoVector& memberList) override {// A user joined the group.}// Other members …};// Add a group event listener. Keep `groupListener` valid before the listener is removed to ensure event callbacks are received.GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
inviteUserToGroup
(Java / Swift / Objective-C / C++) to invite a user to the group.onMemberInvited
callback (Java / Swift / Objective-C / C++), which can contain some UI tips.groupApproveOpt
field of V2TIMGroupInfo
by calling setGroupInfo
(Java / Swift / Objective-C / C++) to open joining a group by invitation.// Invite the `userA` user to join the `groupA` groupList<String> userIDList = new ArrayList<>();userIDList.add("userA");V2TIMManager.getGroupManager().inviteUserToGroup("groupA", userIDList, new V2TIMValueCallback<List<V2TIMGroupMemberOperationResult>>() {@Overridepublic void onSuccess(List<V2TIMGroupMemberOperationResult> v2TIMGroupMemberOperationResults) {// Invited the user to the group successfully}@Overridepublic void onError(int code, String desc) {// Failed to invite the user to the group}});// Listen for the group invitation eventV2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onMemberInvited(String groupID, V2TIMGroupMemberInfo opUser, List<V2TIMGroupMemberInfo> memberList) {// A user was invited to the group. This callback can contain some UI tips.}});
V2TIMManager.shared.inviteUserToGroup(groupID: "groupA", userList: ["userA", "userB", "userC"]) { resultList inresultList.forEach { item in// V2TIMGroupMemberOperationResultprint(item.description)}} fail: { code, desc inprint("inviteUserToGroup fail, \\(code), \\(desc)")}// Listen for the group invitation eventV2TIMManager.shared.addGroupListener(listener: self)func onMemberInvited(groupID: String, opUser: V2TIMGroupMemberInfo, memberList: Array<V2TIMGroupMemberInfo>) {print("groupID:\\(groupID), opUser:\\(opUser), memberList:\\(memberList)")}
// Invite the `userA` user to join the `groupA` group[[V2TIMManager sharedInstance] inviteUserToGroup:@"groupA" userList:@[@"userA"] succ:^(NSArray<V2TIMGroupMemberOperationResult *> *resultList) {// Invited the user to the group successfully} fail:^(int code, NSString *desc) {// Failed to invite the user to the group}];// Listen for the group invitation event[[V2TIMManager sharedInstance] addGroupListener:self];- (void)onMemberInvited:(NSString *)groupID opUser:(V2TIMGroupMemberInfo *)opUser memberList:(NSArray<V2TIMGroupMemberInfo *>*)memberList {// This callback can contain some UI tips.}
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_;};// Invite the `userA` user to join the `groupA` groupV2TIMStringVector userList;userList.PushBack("userA");auto callback = new ValueCallback<V2TIMGroupMemberOperationResultVector>{};callback->SetCallback([=](const V2TIMGroupMemberOperationResultVector& groupMemberOperationResultList) {// Invited the user to the group successfullydelete callback;},[=](int error_code, const V2TIMString& error_message) {// Failed to invite the user to the groupdelete callback;});V2TIMManager::GetInstance()->GetGroupManager()->InviteUserToGroup("groupA", userList, callback);// Listen for the group invitation eventclass GroupListener final : public V2TIMGroupListener {public:GroupListener() = default;~GroupListener() override = default;void OnMemberInvited(const V2TIMString& groupID, const V2TIMGroupMemberInfo& opUser,const V2TIMGroupMemberInfoVector& memberList) override {// A user was invited to the group. This callback can contain some UI tips.}// Other members …};// Add a group event listener. Keep `groupListener` valid before the listener is removed to ensure event callbacks are received.GroupListener groupListener;V2TIMManager::GetInstance()->AddGroupListener(&groupListener);
joinGroup
(Java / Swift / Objective-C / C++) to request to join the group.onReceiveJoinApplication
group join request notification (Java / Swift / Objective-C / C++) and calls getGroupApplicationList
(Java / Swift / Objective-C / C++) to get the group join request list.acceptGroupApplication
(Java / Swift / Objective-C / C++) to approve a request or refuseGroupApplication
(Java / Swift / Objective-C / C++) to reject it.onApplicationProcessed
callback (Java / Swift / Objective-C / C++). Here, if isAgreeJoin
is true
/YES
, the request is approved; otherwise, it is rejected.onMemberEnter
callback (Java / Swift / Objective-C / C++), notifying the group members that someone joined the group.// ******Group owner******//// 1. The group owner changes the group join option to approval required.V2TIMGroupInfo groupInfo = new V2TIMGroupInfo();groupInfo.setGroupID("groupB");groupInfo.setGroupAddOpt(V2TIMGroupInfo.V2TIM_GROUP_ADD_AUTH);V2TIMManager.getGroupManager().setGroupInfo(groupInfo, new V2TIMCallback() {@Overridepublic void onSuccess() {// Changed the group join option successfully}@Overridepublic void onError(int code, String desc) {// Failed to change the group join option}});// 2. The group owner listens for and processes requests to join the group.V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onReceiveJoinApplication(String groupID, V2TIMGroupMemberInfo member, String opReason) {V2TIMManager.getGroupManager().getGroupApplicationList(new V2TIMValueCallback<V2TIMGroupApplicationResult>() {@Overridepublic void onSuccess(V2TIMGroupApplicationResult v2TIMGroupApplicationResult) {List<V2TIMGroupApplication> groupApplicationList = v2TIMGroupApplicationResult.getGroupApplicationList();for (V2TIMGroupApplication application : groupApplicationList) {if (application.getGroupID().equals(groupID) && application.getFromUser().equals(member.getUserID())) {// Approve group joinif (agree) {// Approve the group join requestV2TIMManager.getGroupManager().acceptGroupApplication(application, "agree", new V2TIMCallback() {@Overridepublic void onSuccess() {// Approved the group join request successfully}@Overridepublic void onError(int code, String desc) {// Failed to approve the group join request}});} else {// Reject the group join requestV2TIMManager.getGroupManager().refuseGroupApplication(application, "not agree", new V2TIMCallback() {@Overridepublic void onSuccess() {// Rejected the group join request successfully}@Overridepublic void onError(int code, String desc) {// Failed to reject the group join request}});}return;}}V2TIMManager.getGroupManager().setGroupApplicationRead(new V2TIMCallback() {@Overridepublic void onSuccess() {// Marked the group join request list as read successfully}@Overridepublic void onError(int code, String desc) {// Failed to mark the group join request list as read}});}@Overridepublic void onError(int code, String desc) {// Failed to obtain the group join request list}});}});// ******User******//// 1. The user requests to join the group.V2TIMManager.getInstance().joinGroup("groupB", "it's me!", new V2TIMCallback() {@Overridepublic void onSuccess() {// Joined the group successfully}@Overridepublic void onError(int code, String desc) {// Failed to join the group}});// 2. The user listens for the request review result.V2TIMManager.getInstance().addGroupListener(new V2TIMGroupListener() {@Overridepublic void onApplicationProcessed(