腾讯云即时通信IMAndroid&iOS&Windows&Mac_AI解决方案_同尘科技

即时通信 IM 2年前 (2023-11-03) 浏览 134

功能描述

会话置顶指的是把单聊或者群聊会话固定在会话列表的最顶部,不会被其他会话更新挤到底部,方便用户查找。置顶状态会存储在服务器,切换终端设备后,置顶状态会同步到新设备上。说明 置顶会话功能仅增强版 5.3.425 及以上版本支持。置顶会话数上限50,不支持增加。

置顶会话

您可以调用 pinConversation(Android / iOS & Mac / Windows) 接口,设置是否置顶会话。调用 getConversationList 获取会话列表时,该接口返回的会话列表中,置顶的会话在前,未置顶的会话在后。您可以通过 V2TIMConversation 对象的 isPinned 字段,检查会话有没有置顶。会话的顺序,按V2TIMConversation 对象的 orderKey 字段排序。orderKey 字段是整型数,当发送新消息、接收新消息、设置草稿或置顶会话时,会话被激活,orderKey 字段会增大。会话被置顶后,置顶会话始终排在未置顶会话的前面。如果同时置顶多个会话,这几个会话之间的相对顺序仍然会保持。
例如,有 5 个依次排序的会话 1、2、3、4、5,同时置顶会话 2 和 3,置顶后的顺序是 2、3、1、4、5,显然,会话 2 和 3 排在最前面,并且会话 2 仍然排在 3 的前面。示例代码如下:AndroidiOS & MacWindows

// isPinned 参数为 true,表示置顶会话,否则,表示取消置顶。String conversationID = "conversationID";V2TIMManager.getConversationManager().pinConversation(conversationID, true, new V2TIMCallback() {    @Override    public void onSuccess() {        Log.i("imsdk", "success");    }
@Override public void onError(int code, String desc) { Log.i("imsdk", "failure, code:" + code + ", desc:" + desc); }});
// isPinned 参数为 YES,表示置顶会话,否则,表示取消置顶。NSString *conversationID = @"conversationID";[[V2TIMManager sharedInstance] pinConversation:conversationID isPinned:YES succ:^{    NSLog(@"success");} fail:^(int code, NSString *desc) {    NSLog(@"failure, code:%d, desc:%@", code, desc);}];
class Callback final : public V2TIMCallback {public:    using SuccessCallback = std::function;    using ErrorCallback = std::function;
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 conversationID = u8"conversationID";bool isPinned = true;
auto callback = new Callback;callback->SetCallback( [=]() { // 置顶会话成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 置顶会话失败 delete callback; });
V2TIMManager::GetInstance()->GetConversationManager()->PinConversation(conversationID, isPinned, callback);

会话置顶变更通知

如果您事先调用了 addConversationListener(Android / iOS & Mac / Windows) 添加会话监听器,就可以在 onConversationChanged 中获取到 V2TIMConversation 对象的 isPinned 字段值。根据这个字段可以判断会话的置顶状态是否变化。示例代码如下:AndroidiOS & MacWindows

public void onConversationChanged(List conversationList) {    // 收到会话信息变更通知    Log.i("imsdk", "onConversationChanged");}
- (void)onConversationChanged:(NSArray *) conversationList {    for (V2TIMConversation *conv in conversationList) {        if ([conv.conversationID isEqualToString:self.conversationData.conversationID]) {            // conv.isPinned 为会话置顶状态        }    }}
class ConversationListener final : public V2TIMConversationListener {public:    void OnConversationChanged(const V2TIMConversationVector& conversationList) override {        // 收到会话信息变更通知    }    // 其他成员 ...};
// 添加会话事件监听器,注意在移除监听器之前需要保持 conversationListener 的生命期,以免接收不到事件回调ConversationListener conversationListener;V2TIMManager::GetInstance()->GetConversationManager()->AddConversationListener(&conversationListener);

常见问题

操作置顶/取消置顶后,为什么会话没有按照 lastMessage 的顺序排序?

会话列表始终按照 V2TIMConversation.orderKey 从大到小的顺序排列,orderKey 会随着会话的更新依次递增。常见引起 orderKey 递增的操作有:收发消息(也即 lastMessage 发生变化)、置顶/取消置顶。当会话的 lastMessage 的时间顺序与 orderKey 不一致时,以 orderKey 顺序为准。

对即时通讯IM解决方案有疑惑?想了解解决方案收费? 联系解决方案专家

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心,购买腾讯云享受折上折,更有现金返利:同意关联,立享优惠

阿里云解决方案也看看?: 点击对比阿里云的解决方案

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?