tencent cloud

Feedback

Android&iOS&Windows&Mac

Last updated: 2023-07-17 11:17:41

    Feature Description

    This feature enables any participant in a conversation to modify a successfully sent message in the conversation. The message will be synced to all the participants in the conversation once modified successfully.
    Note
    This feature is supported only by the Enhanced edition on v6.2 or later.

    Modifying a Message

    A conversation participant can call modifyMessage (Android / iOS and macOSWindows) to modify a sent message in the conversation. The IM SDK allows any conversation participant to modify a message in the conversation. You can add more restrictions at the business layer, for example, only allowing the message sender to modify the message.
    Currently, the following information of a message can be modified:
    cloudCustomData (Android / iOS and macOSWindows)
    V2TIMTextElem (Android / iOS and macOSWindows)
    V2TIMCustomElem (Android / iOS and macOSWindows)
    V2TIMLocationElem (Android / iOS and macOSWindows)
    V2TIMFaceElem (Android / iOS and macOSWindows)
    Sample code:
    Android
    iOS and macOS
    Windows
    // The original message object in the conversation is `originMessage`.
    // Modify the `cloudCustomData` information of the message object
    originMessage.setCloudCustomData("modify_cloud_custom_data".getBytes());
    // If the message is a text message, modify the text message content
    if (V2TIMMessage.V2TIM_ELEM_TYPE_TEXT == originMessage.getElemType()) {
    originMessage.getTextElem().setText("modify_text");
    }
    V2TIMManager.getMessageManager().modifyMessage(originMessage, new V2TIMCompleteCallback<V2TIMMessage>() {
    @Override
    public void onComplete(int code, String desc, V2TIMMessage message) {
    // After the message is modified, `message` is the modified message object.
    }
    });
    // Original message object in the conversation
    V2TIMMessage *originMessage;
    // Modify the `cloudCustomData` information of the message object
    originMessage.cloudCustomData = [@"modify_cloud_custom_data" dataUsingEncoding:NSUTF8StringEncoding];
    // If the message is a text message, modify the text message content
    if (V2TIM_ELEM_TYPE_TEXT == originMessage.elemType) {
    originMessage.textElem.text = @"modify_text";
    }
    [[V2TIMManager sharedInstance] modifyMessage:originMessage completion:^(int code, NSString *desc, V2TIMMessage *msg) {
    // After the message is modified, `msg` is the modified message object.
    }];
    template <class T>
    class CompleteCallback final : public V2TIMCompleteCallback<T> {
    public:
    using InternalCompleteCallback =
    std::function<void(int, const V2TIMString&, const T&)>;
    
    CompleteCallback() = default;
    ~CompleteCallback() override = default;
    
    void SetCallback(InternalCompleteCallback complete_callback) { complete_callback_ = std::move(complete_callback); }
    
    void OnComplete(int error_code, const V2TIMString& error_message, const T& value) override {
    if (complete_callback_) {
    complete_callback_(error_code, error_message, value);
    }
    }
    
    private:
    InternalCompleteCallback complete_callback_;
    };
    
    // V2TIMMessage originMessage;
    std::string str = u8"modify_cloud_custom_data";
    // Modify the `cloudCustomData` information of the message object
    originMessage.cloudCustomData = {reinterpret_cast<const uint8_t*>(str.data()), str.size()};
    if (originMessage.elemList.Size() == 1) {
    V2TIMElem* elem = originMessage.elemList[0];
    if (elem->elemType == V2TIMElemType::V2TIM_ELEM_TYPE_TEXT) {
    // If the message is a text message, modify the text message content
    auto textElem = static_cast<V2TIMTextElem*>(elem);
    textElem->text = "modify_text";
    }
    }
    
    auto callback = new CompleteCallback<V2TIMMessage>{};
    callback->SetCallback([=](int error_code, const V2TIMString& error_message, const V2TIMMessage& message) {
    // After the message is modified, `message` is the modified message object.
    delete callback;
    });
    
    V2TIMManager::GetInstance()->GetMessageManager()->ModifyMessage(originMessage, callback);

    Listening for a Message Modification Callback

    Conversation participants call addAdvancedMsgListener (Android / iOS and macOSWindows) to add the advanced message listener.
    After a message in the conversation is modified, all the participants will receive the onRecvMessageModified callback (Android / iOS and macOSWindows), which contains the modified message object.
    Sample code:
    Android
    iOS and macOS
    Windows
    V2TIMAdvancedMsgListener advancedMsgListener = new V2TIMAdvancedMsgListener() {
    // Notification of the message content modification
    @Override
    public void onRecvMessageModified(V2TIMMessage msg) {
    // `msg` is the modified message object.
    }
    };
    // Add a message listener
    V2TIMManager.getMessageManager().addAdvancedMsgListener(advancedMsgListener);
    // Add a message listener
    [[V2TIMManager sharedInstance] addAdvancedMsgListener:self];
    /// Notification of the message content modification
    - (void)onRecvMessageModified:(V2TIMMessage *)msg {
    // `msg` is the modified message object.
    }
    class AdvancedMsgListener final : public V2TIMAdvancedMsgListener {
    public:
    // Notification of the message content modification
    void OnRecvNewMessage(const V2TIMMessage& message) override {
    // `message` is the modified message object.
    }
    // Other members ...
    };
    
    // Note that `advancedMsgListener` should not be released before the IM SDK is uninitialized,
    // otherwise the message callback cannot be called.
    AdvancedMsgListener advancedMsgListener;
    V2TIMManager::GetInstance()->GetMessageManager()->AddAdvancedMsgListener(&advancedMsgListener);
    
    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support