tencent cloud

文档反馈

Android&iOS&Windows&Mac

最后更新时间:2025-01-13 17:17:17

    功能描述

    在某些场景下,您可能需要对会话进行标记,例如 "会话标星"、"会话折叠"、"会话隐藏"、“会话标记未读”等,您可以调用以下接口实现。
    说明:
    该功能仅对专业版、专业版plus、企业版客户开放,购买专业版、专业版plus、企业版后可使用。
    该功能仅增强版 SDK 6.5.2803 及以上版本支持。

    效果展示

    使用本功能,您可以在您的 App 中实现如下的会话标记效果:
    
    
    

    接口说明

    标记会话

    您可以调用 markConversation (Java / Swift / Objective-C / C++) 接口标记或者取消标记会话。
    注意:
    当用户标记了会话,SDK 只是简单记录了会话的标记值,并不会改变会话的底层逻辑,比如标记会话为 V2TIM_CONVERSATION_MARK_TYPE_UNREAD,会话的底层的未读数并不会发生改变。
    标记会话接口入参详解如下:
    属性
    含义
    说明
    conversationIDList
    会话 ID 列表
    一次标记最大支持 100 个会话
    markType
    标记类型
    会话标星、会话标记未读、会话折叠、会话隐藏等
    enableMark
    标记/取消标记
    标记或取消标记
    SDK 提供了四个默认标记("会话标星"、"会话折叠"、"会话隐藏"、“会话标记未读”),如果已有标记不能满足您的需求,您可以自定义扩展标记,扩展标记需要满足以下两个条件:
    1. 扩展标记值不能和已有的标记值冲突。
    2. 扩展标记值必须是 0x1LL << n 的位移值(32 <= n < 64,即 n 必须大于等于 32 并且小于 64),比如扩展标记值 0x1LL << 32 表示 "iPhone 在线"。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    List<String> conversationIDList = new ArrayList<>();
    conversationIDList.add("c2c_user1");
    // 标记类型
    long markType = V2TIMConversation.V2TIM_CONVERSATION_MARK_TYPE_STAR;
    // 扩展标记类型
    // long markType = 0x1L << 32;
    V2TIMManager.getConversationManager().markConversation(conversationIDList, markType, true, new V2TIMValueCallback<List<V2TIMConversationOperationResult>>() {
    @Override
    public void onSuccess(List<V2TIMConversationOperationResult> v2TIMConversationOperationResults) {
    // 标记会话成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 标记会话失败
    }
    });
    V2TIMManager.shared.markConversation(conversationIDList: ["c2c_userID"], markType: .V2TIM_CONVERSATION_MARK_TYPE_STAR, enableMark: true) { result in
    print("markConversation succ")
    } fail: { code, desc in
    print("markConversation fail, \\(code), \\(desc)")
    }
    // 标记类型
    NSNumber *markType = @(V2TIM_CONVERSATION_MARK_TYPE_STAR);
    // 扩展标记类型
    // NSNumber *markType = @(0x1LL << 32);
    // 标记会话
    BOOL enableMark = YES;
    // 取消标记会话
    // BOOL enableMark = NO;
    [[V2TIMManager sharedInstance] markConversation:@[@"c2c_yahaha"] markType:markType enableMark:enableMark 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_;
    };
    
    V2TIMStringVector conversationIDList;
    conversationIDList.PushBack(u8"c2c_user1");
    // 标记类型
    uint64_t markType = V2TIMConversationMarkType::V2TIM_CONVERSATION_MARK_TYPE_STAR;
    // 扩展标记类型
    uint64_t markType = static_cast<uint64_t>(0x1) << 32;
    
    auto callback = new ValueCallback<V2TIMConversationOperationResultVector>{};
    callback->SetCallback(
    [=](const V2TIMConversationOperationResultVector& conversationOperationResultList) {
    // 标记会话成功
    delete callback;
    },
    [=](int error_code, const V2TIMString& error_message) {
    // 标记会话失败
    delete callback;
    });
    
    V2TIMManager::GetInstance()->GetConversationManager()->MarkConversation(conversationIDList, markType, true,
    callback);
    

    监听会话标记变更通知

    会话被标记或者取消标记后,会话 V2TIMConversationmarkList (Java / Swift / Objective-C / C++) 字段会发生变更,您可以调用 addConversationListener (Java / Swift / Objective-C / C++) 接口监听会话变更通知。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    V2TIMConversationListener listener = new V2TIMConversationListener() {
    @Override
    public void onConversationChanged(List<V2TIMConversation> conversationList) {
    for (V2TIMConversation conversation : conversationList) {
    // 获取会话新的标记信息
    List<Long> markList = conversation.getMarkList();
    }
    }
    };
    V2TIMManager.getConversationManager().addConversationListener(listener);
    // 删除会话分组
    V2TIMManager.shared.addConversationListener(listener: self)
    func onConversationChanged(conversationList: Array<V2TIMConversation>) {
    conversationList.forEach { item in
    print(item.description)
    // 获取会话新的标记信息
    let mark_list = item.markList;
    }
    }
    // 删除会话分组
    [[V2TIMManager sharedInstance] addConversationListener:self];
    - (void)onConversationChanged:(NSArray<V2TIMConversation*> *) conversationList
    {
    for (V2TIMConversation *conv in conversationList) {
    // 获取会话新的标记信息
    NSArray *mark_list = conv.markList;
    }
    }
    class ConversationListener final : public V2TIMConversationListener {
    public:
    void OnConversationChanged(const V2TIMConversationVector& conversationList) override {
    for (size_t i = 0; i < conversationList.Size(); ++i) {
    const V2TIMConversation& conversation = conversationList[i];
    // 获取会话新的标记信息
    const UInt64Vector& markList = conversation.markList;
    }
    }
    // 其他成员 ...
    };
    
    // 添加会话事件监听器,注意在移除监听器之前需要保持 conversationListener 的生命期,以免接收不到事件回调
    ConversationListener conversationListener;
    V2TIMManager::GetInstance()->GetConversationManager()->AddConversationListener(&conversationListener);
    

    拉取指定标记会话

    您可以调用 getConversationListByFilter (Java / Swift / Objective-C / C++) 接口拉取指定标记会话。
    示例代码如下:
    Java
    Swift
    Objective-C
    C++
    V2TIMConversationListFilter filter = new V2TIMConversationListFilter();
    filter.setMarkType(V2TIMConversation.V2TIM_CONVERSATION_MARK_TYPE_STAR);
    filter.setCount(50);
    filter.setNextSeq(0);
    V2TIMManager.getConversationManager().getConversationListByFilter(filter, new V2TIMValueCallback<V2TIMConversationResult>() {
    @Override
    public void onSuccess(V2TIMConversationResult v2TIMConversationResult) {
    // 获取会话列表成功
    }
    
    @Override
    public void onError(int code, String desc) {
    // 获取会话列表失败
    }
    });
    let filter = V2TIMConversationListFilter()
    filter.markType = .V2TIM_CONVERSATION_MARK_TYPE_STAR;
    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.markType = V2TIM_CONVERSATION_MARK_TYPE_STAR;
    [[V2TIMManager sharedInstance] getConversationListByFilter:filter nextSeq:0 count:50 succ:^(NSArray<V2TIMConversation *> *list, uint64_t nextSeq, BOOL isFinished) {
    // 获取会话列表成功
    } fail:^(int code, NSString *desc) {
    // 获取会话列表失败
    }];
    template <class T>
    class ValueCallback : public V2TIMValueCallback<T> {
    public:
    ValueCallback(const V2TIMString &tag);
    ~ValueCallback() override;
    void OnSuccess(const T &value) override;
    void OnError(int error_code, const V2TIMString &error_message) override;
    private:
    V2TIMString tag_;
    };
    
    V2TIMConversationListFilter filter;
    filter.filterType |= (uint64_t)V2TIM_CONVERSATION_FILTER_TYPE_CONVERSATION_MARK;
    filter.markType = (uint64_t)V2TIM_CONVERSATION_MARK_TYPE_STAR;
    V2TIMManager::GetInstance()->GetConversationManager()->GetConversationListByFilter(
    filter, 0, 50, new ValueCallback<V2TIMConversationResult>("GetConversationListByFilter"));
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持