即时通信 IM Android&iOS&Windows&Mac(会话分组)

在某些场景下,可以能需要对会话进行分组,方便索引。例如将会话分为 “产品体验”、”需求研发” 等组别,可以以调用下面所述的接口实现。

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

一、功能描述

注意:说明:

二、效果展示

使用本功能,你可以在你的 App 中实现如下的会话分组效果:

三、新建会话分组

你可以调用 createConversationGroup (Java / Swift / Objective-C / C++) 接口新建会话分组。

注意:说明:

注意:会话分组最大支持 20 个,超过后创建新的分组会报 51010 错误,不再使用的分组请及时删除。

属性 含义 说明
groupName 会话分组名 长度要大于 0,最大支持 32 bytes,超过后会报 51011 错误
conversationIDList 会话 ID 列表 不能为空

示例代码如下:

JavaSwiftObjective-CC++List<String> conversationIDList = new ArrayList<>();conversationIDList.add("c2c_user1");V2TIMManager.getConversationManager().createConversationGroup("conversation_group", conversationIDList, new V2TIMValueCallback<List<V2TIMConversationOperationResult>>() { @Override public void onSuccess(List<V2TIMConversationOperationResult> v2TIMConversationOperationResults) { // 创建会话分组成功 } @Override public void onError(int code, String desc) { // 创建会话分组失败 }});// 创建会话分组V2TIMManager.shared.createConversationGroup(groupName: "conversation_group", conversationIDList: ["c2c_ID1", "c2c_ID2"]) { result in result.forEach { item in print(item.description) } print("createConversationGroup succ, \\(result)")} fail: { code, desc in print("createConversationGroup fail, \\(code), \\(desc)")}// 创建会话分组[[V2TIMManager sharedInstance] createConversationGroup:@"conversation_group" conversationIDList:@[@"c2c_yahaha"] succ:^(NSArray<V2TIMConversationOperationResult *> *result) { // 创建会话分组成功} 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 groupName = u8"conversation_group";V2TIMStringVector conversationIDList;conversationIDList.PushBack(u8"c2c_user1");auto callback = new ValueCallback<V2TIMConversationOperationResultVector>{};callback->SetCallback( [=](const V2TIMConversationOperationResultVector& conversationOperationResultList) { // 创建会话分组成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 创建会话分组失败 delete callback; });V2TIMManager::GetInstance()->GetConversationManager()->CreateConversationGroup(groupName, conversationIDList, callback);

四、删除会话分组

你可以调用 deleteConversationGroup (Java / Swift / Objective-C / C++) 接口删除会话分组。

注意:说明:

注意:如果会话分组不存在,删除对应分组会报 51009 错误。

示例代码如下:

JavaSwiftObjective-CC++V2TIMManager.getConversationManager().deleteConversationGroup("conversation_group", new V2TIMCallback() { @Override public void onSuccess() { // 删除会话分组成功 } @Override public void onError(int code, String desc) { // 删除会话分组失败 }});V2TIMManager.shared.deleteConversationGroup(groupName: "conversation_group") { print("deleteConversationGroup succ")} fail: { code, desc in print("deleteConversationGroup fail, \\(code), \\(desc)")}// 删除会话分组[[V2TIMManager sharedInstance] deleteConversationGroup:@"conversation_group" 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 groupName = u8"conversation_group";auto callback = new Callback;callback->SetCallback( [=]() { // 删除会话分组成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 删除会话分组失败 delete callback; });V2TIMManager::GetInstance()->GetConversationManager()->DeleteConversationGroup(groupName, callback);

五、重命名会话分组

你可以调用 renameConversationGroup (Java / Swift / Objective-C / C++) 接口重命名会话分组。

示例代码如下:

JavaSwiftObjective-CC++V2TIMManager.getConversationManager().renameConversationGroup("conversation_group", "conversation_group_rename", new V2TIMCallback() { @Override public void onSuccess() { // 重命名会话分组成功 } @Override public void onError(int code, String desc) { // 重命名会话分组失败 }});// 重命名会话分组V2TIMManager.shared.renameConversationGroup(oldName: "conversation_group", newName: "conversation_group_rename") { print("renameConversationGroup succ")} fail: { code, desc in print("renameConversationGroup fail, \\(code), \\(desc)")}// 重命名会话分组[[V2TIMManager sharedInstance] renameConversationGroup:@"conversation_group" newName:@"conversation_group_rename" 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 oldName = u8"conversation_group";V2TIMString newName = u8"conversation_group_rename";auto callback = new Callback;callback->SetCallback( [=]() { // 重命名会话分组成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 重命名会话分组失败 delete callback; });V2TIMManager::GetInstance()->GetConversationManager()->RenameConversationGroup(oldName, newName, callback);

六、获取会话分组列表

你可以调用 getConversationGroupList (Java / Swift / Objective-C / C++) 接口获取会话分组列表。

示例代码如下:

JavaSwiftObjective-CC++V2TIMManager.getConversationManager().getConversationGroupList(new V2TIMValueCallback<List<String>>() { @Override public void onSuccess(List<String> strings) { // 获取分组列表成功 } @Override public void onError(int code, String desc) { // 获取分组列表失败 }});V2TIMManager.shared.getConversationGroupList { groupList ingroupList.forEach { item in print(item.description)} print("getConversationGroupList succ, \\(groupList)")} fail: { code, desc in print("getConversationGroupList fail, \\(code), \\(desc)")}// 获取会话分组列表[[V2TIMManager sharedInstance] getConversationGroupList:^(NSArray<NSString *> *groupList) { // 获取分组列表成功} 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_;};auto callback = new ValueCallback<V2TIMStringVector>{};callback->SetCallback( [=](const V2TIMStringVector& stringList) { // 获取分组列表成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 获取分组列表失败 delete callback; });V2TIMManager::GetInstance()->GetConversationManager()->GetConversationGroupList(callback);

如果需要获取分组下面的会话列表,可以调用 getConversationListByFilter (Java / Swift / Objective-C / C++) 接口获取。

示例代码如下:

JavaSwiftObjective-CC++V2TIMConversationListFilter filter = new V2TIMConversationListFilter();filter.setConversationGroup("conversation_group");V2TIMManager.getConversationManager().getConversationListByFilter(filter, nextSeq, count, new V2TIMValueCallback<V2TIMConversationResult>() { @Override public void onSuccess(V2TIMConversationResult v2TIMConversationResult) { // 获取会话列表成功 } @Override public void onError(int code, String desc) { // 获取会话列表失败 }});// 拉取指定标记会话let filter = V2TIMConversationListFilter()filter.conversationGroup = "conversation_group"V2TIMManager.shared.getConversationListByFilter(filter: filter, nextSeq: 0, count: 10) { list, nextSeq, isFinished in list.forEach { item in print(item.description) }} fail: { code, desc in print("getConversationList fail, \\(code), \\(desc)")}// 拉取指定标记会话V2TIMConversationListFilter *filter = [[V2TIMConversationListFilter alloc] init];filter.conversationGroup = @"conversation_group";[V2TIMManager.sharedInstance getConversationListByFilter:filter nextSeq:0 count:10 succ:^(NSArray<V2TIMConversation *> *list, uint64_t nextSeq, BOOL isFinished) { // 获取会话列表成功,list 为会话列表 } 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_;};V2TIMConversationListFilter filter;filter.conversationGroup = u8"conversation_group";auto callback = new ValueCallback<V2TIMConversationResult>{};callback->SetCallback( [=](const V2TIMConversationResult& conversationResult) { // 获取会话列表成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 获取会话列表失败 delete callback; });V2TIMManager::GetInstance()->GetConversationManager()->GetConversationListByFilter(filter, 0, 10, callback);0

七、添加会话到一个分组

当分组创建成功后,你可以调用 addConversationsToGroup (Java / Swift / Objective-C / C++) 接口添加一个新会话到分组。

示例代码如下:

JavaSwiftObjective-CC++List<String> conversationIDList = new ArrayList<>();conversationIDList.add("c2c_user2");V2TIMManager.getConversationManager().addConversationsToGroup("conversation_group", conversationIDList, new V2TIMValueCallback<List<V2TIMConversationOperationResult>>() { @Override public void onSuccess(List<V2TIMConversationOperationResult> v2TIMConversationOperationResults) { // 添加会话到分组成功 } @Override public void onError(int code, String desc) { // 添加会话到分组失败 }});// 添加会话到一个分组V2TIMManager.shared.addConversationsToGroup(groupName: "conversation_group", conversationIDList: ["c2c_ID1", "c2c_ID2"]) { result in result.forEach { item in print(item.description) } print("renameConversationGroup succ")} fail: { code, desc in print("renameConversationGroup fail, \\(code), \\(desc)")}// 添加会话到一个分组[[V2TIMManager sharedInstance] addConversationsToGroup:@"conversation_group" conversationIDList:@[@"c2c_yahaha"] succ:^(NSArray<V2TIMConversationOperationResult *> *result) { // 添加会话到分组成功} 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 groupName = u8"conversation_group";V2TIMStringVector conversationIDList;conversationIDList.PushBack(u8"c2c_user1");auto callback = new ValueCallback<V2TIMConversationOperationResultVector>{};callback->SetCallback( [=](const V2TIMConversationOperationResultVector& conversationOperationResultList) { // 添加会话到分组成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 添加会话到分组失败 delete callback; });V2TIMManager::GetInstance()->GetConversationManager()->AddConversationsToGroup(groupName, conversationIDList, callback);

八、从分组中删除某会话

你可以调用 deleteConversationsFromGroup (Java / Swift / Objective-C / C++) 从分组中删除某会话。

示例代码如下:

JavaSwiftObjective-CC++List<String> conversationIDList = new ArrayList<>();conversationIDList.add("c2c_user2");V2TIMManager.getConversationManager().deleteConversationsFromGroup("conversation_group", conversationIDList, new V2TIMValueCallback<List<V2TIMConversationOperationResult>>() { @Override public void onSuccess(List<V2TIMConversationOperationResult> v2TIMConversationOperationResults) { // 从分组删除会话成功 } @Override public void onError(int code, String desc) { // 从分组删除会话失败 }});V2TIMManager.shared.deleteConversationsFromGroup(groupName: "conversation_group", conversationIDList: ["c2c_ID1", "c2c_ID2"]) { result in result.forEach { item in print(item.description) } print( "deleteConversationsFromGroup succ")} fail: { code, desc in print("deleteConversationsFromGroup fail, \\(code), \\(desc)")}// 从分组中删除某会话[[V2TIMManager sharedInstance] deleteConversationsFromGroup:@"conversation_group" conversationIDList:@[@"c2c_yahaha"] succ:^(NSArray<V2TIMConversationOperationResult *> *result) { // 从分组删除会话成功} 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 groupName = u8"conversation_group";V2TIMStringVector conversationIDList;conversationIDList.PushBack(u8"c2c_user1");auto callback = new ValueCallback<V2TIMConversationOperationResultVector>{};callback->SetCallback( [=](const V2TIMConversationOperationResultVector& conversationOperationResultList) { // 从分组删除会话成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 从分组删除会话失败 delete callback; });V2TIMManager::GetInstance()->GetConversationManager()->DeleteConversationsFromGroup( groupName, conversationIDList, callback);

九、监听会话分组变更通知

你可以调用 addConversationListener (Java / Swift / Objective-C / C++) 接口监听会话分组变更通知。

示例代码如下:

JavaSwiftObjective-CC++V2TIMConversationListener listener = new V2TIMConversationListener() { @Override public void onConversationGroupCreated(String groupName, List<V2TIMConversation> conversationList) { // 收到会话分组创建通知 } @Override public void onConversationGroupDeleted(String groupName) { // 收到会话分组删除通知 } @Override public void onConversationGroupNameChanged(String oldName, String newName) { // 收到会话分组重命名通知 } @Override public void onConversationsAddedToGroup(String groupName, List<V2TIMConversation> conversationList) { // 收到会话分组添加会话通知 } @Override public void onConversationsDeletedFromGroup(String groupName, List<V2TIMConversation> conversationList, int reason) { // 收到会话分组删除会话通知 // reason 表示会话从所在分组删除的原因,其取值有: // 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发 // 当 reason 为 1 时,表示添加到分组的会话数量超过 1000,最早添加进分组的会话被淘汰(当会话数超限时,添加新会话到分组默认会报错,如需添加成功并淘汰最早的会话,请提工单联系客服配置) }};V2TIMManager.getConversationManager().addConversationListener(listener);V2TIMManager.shared.addConversationListener(listener: self)func onConversationGroupCreated(groupName: String, conversationList: Array<V2TIMConversation>) { print("groupName:\\(groupName), conversationList:\\(conversationList.description)")}func onConversationGroupDeleted(groupName: String) { print("groupName:\\(groupName)")}func onConversationGroupNameChanged(oldName: String, newName: String) { print("oldName:\\(oldName), newName:\\(newName)")}func onConversationsAddedToGroup(groupName: String, conversationList: Array<V2TIMConversation>) { print( "groupName:\\(groupName), conversationList:\\(conversationList.description)")}func onConversationsDeletedFromGroup(groupName: String, conversationList: Array<V2TIMConversation>, reason:UInt32) { // 收到会话分组删除会话通知 // reason 表示会话从所在分组删除的原因,其取值有: // 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发 // 当 reason 为 1 时,表示添加到分组的会话数量超过 1000,最早添加进分组的会话被淘汰 print("groupName:\\(groupName), conversationList:\\(conversationList.description), resason:\\(reason)")}[[V2TIMManager sharedInstance] addConversationListener:self];- (void)onConversationGroupCreated:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList { // 收到会话分组创建通知}- (void)onConversationGroupDeleted:(NSString *)groupName { // 收到会话分组删除通知}- (void)onConversationGroupNameChanged:(NSString *)oldName newName:(NSString *)newName { // 收到会话分组重命名通知}- (void)onConversationsAddedToGroup:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList { // 收到会话分组添加会话通知}- (void)onConversationsDeletedFromGroup:(NSString *)groupName conversationList:(NSArray<V2TIMConversation *> *)conversationList reason:(uint32_t)reason { // 收到会话分组删除会话通知 // reason 表示会话从所在分组删除的原因,其取值有: // 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发 // 当 reason 为 1 时,表示添加到分组的会话数量超过 1000,最早添加进分组的会话被淘汰}class ConversationListener final : public V2TIMConversationListener {public: ConversationListener() = default; ~ConversationListener() override = default; void OnConversationGroupCreated(const V2TIMString& groupName, const V2TIMConversationVector& conversationList) override { // 收到会话分组创建通知 } void OnConversationGroupDeleted(const V2TIMString& groupName) override { // 收到会话分组删除通知 } void OnConversationGroupNameChanged(const V2TIMString& oldName, const V2TIMString& newName) override { // 收到会话分组重命名通知 } void OnConversationsAddedToGroup(const V2TIMString& groupName, const V2TIMConversationVector& conversationList) override { // 收到会话分组添加会话通知 } void OnConversationsDeletedFromGroup(const V2TIMString& groupName, const V2TIMConversationVector& conversationList, uint32_t reason) override { // 收到会话分组删除会话通知 // reason 表示会话从所在分组删除的原因,其取值有: // 当 reason 为 0 时,表示由用户主动调用 deleteConversationsFromGroup 触发 // 当 reason 为 1 时,表示添加到分组的会话数量超过 1000,最早添加进分组的会话被淘汰 }};// 添加会话事件监听器,注意在移除监听器之前需要保持 conversationListener 的生命期,以免接收不到事件回调ConversationListener conversationListener;V2TIMManager::GetInstance()->GetConversationManager()->AddConversationListener(&conversationListener);

赞 (0)
上一篇 4天前
下一篇 4天前