cloudCustomData
,实现如下图所示的消息回复、引用等功能:modifyMessage
(Android / iOS & Mac / Windows) 接口对会话里的消息做二次修改。
修改消息时,IM SDK 仅限制了会话参与者才能修改,如果您需要更多限制,例如限制只有消息发送者才能修改,可以自行在业务层处理。// 会话里面原始消息对象为 originMessage// 修改消息对的 cloudCustomData 信息originMessage.setCloudCustomData("modify_cloud_custom_data".getBytes());// 如果是文本消息,修改文本消息内容if (V2TIMMessage.V2TIM_ELEM_TYPE_TEXT == originMessage.getElemType()) {originMessage.getTextElem().setText("modify_text");}V2TIMManager.getMessageManager().modifyMessage(originMessage, new V2TIMCompleteCallback<V2TIMMessage>() {@Overridepublic void onComplete(int code, String desc, V2TIMMessage message) {// 修改消息完成,message 为修改之后的消息对象}});
// 会话里面原始 message 对象V2TIMMessage *originMessage;// 修改消息的 cloudCustomData 信息originMessage.cloudCustomData = [@"modify_cloud_custom_data" dataUsingEncoding:NSUTF8StringEncoding];// 如果是文本消息,修改文本消息内容if (V2TIM_ELEM_TYPE_TEXT == originMessage.elemType) {originMessage.textElem.text = @"modify_text";}[[V2TIMManager sharedInstance] modifyMessage:originMessage completion:^(int code, NSString *desc, V2TIMMessage *msg) {// 修改消息完成,msg 为修改之后的消息对象;}];
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";// 修改消息对的 cloudCustomData 信息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) {// 如果是文本消息,修改文本消息内容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) {// 修改消息完成,message 为修改之后的消息对象delete callback;});V2TIMManager::GetInstance()->GetMessageManager()->ModifyMessage(originMessage, callback);
V2TIMAdvancedMsgListener advancedMsgListener = new V2TIMAdvancedMsgListener() {// 消息内容被修改通知@Overridepublic void onRecvMessageModified(V2TIMMessage msg) {// msg 为被修改之后的消息对象}};// 添加消息监听V2TIMManager.getMessageManager().addAdvancedMsgListener(advancedMsgListener);
// 添加消息监听[[V2TIMManager sharedInstance] addAdvancedMsgListener:self];/// 消息内容被修改通知- (void)onRecvMessageModified:(V2TIMMessage *)msg {// msg 为被修改之后的消息对象}
class AdvancedMsgListener final : public V2TIMAdvancedMsgListener {public:// 消息内容被修改通知void OnRecvNewMessage(const V2TIMMessage& message) override {// message 为被修改之后的消息对象}// 其他成员 ...};// 添加高级消息的事件监听器,注意在移除监听器之前需要保持 advancedMsgListener 的生命期,以免接收不到事件回调AdvancedMsgListener advancedMsgListener;V2TIMManager::GetInstance()->GetMessageManager()->AddAdvancedMsgListener(&advancedMsgListener);
本页内容是否解决了您的问题?