即时通信 IM Android&iOS&Windows&Mac(撤回消息)

默认情况下,发送者只能撤回 2 分钟以内的消息,可以以按需更改消息撤回时间限制,具体操作消息的撤回同时需要接收方 UI 代码的配合:当发送方撤回一条消息后,接收方会收到消息撤回通知 onRecvMessageRevoked;通知中包含了撤回消息的 msgID,可以以根据这个 msgID 判断 UI 层是哪一条消息撤回了,然后把对应的消息气泡切换成 “消息已被撤回” 状态。

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

一、功能描述

发送方可以撤回一条已经发送成功的消息。

在单聊场景中,仅能撤回自己的消息;在群聊场景中,除了可以撤回自己的消息外,管理员或者群主也可以撤回其他群成员的消息。

从 IMSDK 7.4 版本开始,支持撤回包括直播群(AVChatRoom)、社群在内的所有群类型的消息。

二、发送方撤回消息

发送方可调用 revokeMessage (Java / Swift / Objective-C / C++) 撤回一条消息。

示例代码如下:

JavaSwiftObjective-CC++V2TIMManager.getMessageManager().revokeMessage(v2TIMMessage, new V2TIMCallback() { @Override public void onError(int code, String desc) { // 撤回消息失败 } @Override public void onSuccess() { // 撤回消息成功 }});// selectedMessage 为待撤回消息V2TIMManager.shared.revokeMessage(msg: selectedMessage) { print("revokeMessage succ")} fail: { code, desc in print("revokeMessage fail, \\(code), \\(desc)")}// selectedMessage 为待撤回消息[[V2TIMManager sharedInstance] revokeMessage:selectedMessage succ:^{ // 撤回消息成功} fail:^(int code, NSString *msg) { // 撤回消息失败}];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_;};auto callback = new Callback;callback->SetCallback( [=]() { // 撤回消息成功 delete callback; }, [=](int error_code, const V2TIMString& error_message) { // 撤回消息失败 delete callback; });V2TIMManager::GetInstance()->GetMessageManager()->RevokeMessage(message, callback);

三、接收方感知消息被撤回

·接收方调用 addAdvancedMsgListener (Java / Swift / Objective-C / C++) 设置高级消息监听。

·接收方在 onRecvMessageRevoked (Java / Swift / Objective-C / C++) 中接收消息撤回通知。

注意:说明:

注意:从 7.4 版本开始,当消息被撤回后,接收方可以通过 onRecvMessageRevoked 获取消息撤回的原因和消息的撤回者。

示例代码如下:

JavaSwiftObjective-CC++V2TIMManager.getMessageManager().addAdvancedMsgListener(new V2TIMAdvancedMsgListener() { @Override public void onRecvMessageRevoked(String msgID, V2TIMUserFullInfo operateUser, String reason) { // msgList 为当前聊天界面的消息列表 for (V2TIMMessage msg : msgList) { if (msg.getMsgID().equals(msgID)) { // msg 即为被撤回的消息,你需要修改 UI 上相应的消息气泡的状态 } } }}// V2TIMAdvancedMsgListenerfunc onRecvMessageRevoked(msgID: String) { // 收到消息撤回通知,你需要修改 UI 上相应的消息气泡的状态}// V2TIMAdvancedMsgListener- (void)onRecvMessageRevoked:(NSString *)msgID operateUser:(V2TIMUserFullInfo *)operateUser reason:(NSString *)reason { // 收到消息撤回通知,你需要修改 UI 上相应的消息气泡的状态}class AdvancedMsgListener final : public V2TIMAdvancedMsgListener {public: /** * 收到新消息 * * @param message 消息 */ /** * 收到消息撤回的通知 * * @param messageID 消息唯一标识 */ void OnRecvMessageRevoked(const V2TIMString& messageID, const V2TIMUserFullInfo &operateUser, const V2TIMString &reason) override { // msgList 为当前聊天界面的消息列表 } // 其他成员 …};// 添加高级消息的事件监听器,注意在移除监听器之前需要保持 advancedMsgListener 的生命期,以免接收不到事件回调AdvancedMsgListener advancedMsgListener;V2TIMManager::GetInstance()->GetMessageManager()->AddAdvancedMsgListener(&advancedMsgListener);

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