当前页

删除消息

2026-09-18

功能简介

ZIM SDK 支持单聊消息、群组消息、房间消息等的收发,以及查询历史消息、删除消息等功能。可广泛应用于娱乐社交、电商购物、在线教育、互动直播等多种场景下。

本文档介绍了如何使用 ZIM SDK 的接口,实现删除某个会话中指定的消息、删除某个会话的全部消息,以及为会话内所有人删除指定消息的功能。

注意

ZIM SDK 目前支持删除“单聊/群组”会话消息,暂不支持删除“房间”会话消息。

实现流程

ZIM SDK 支持删除某个会话中指定的消息,或者删除某个会话的全部消息。删除消息分为“删除本地消息记录”和“删除服务端消息记录”,开发者可以通过 ZIMMessageDeleteConfig 对象,设置删除消息相关的高级属性配置。

删除操作默认只对当前用户生效,如需让会话内的所有成员都不再看到指定的消息,请参考 为所有人删除消息

以客户端 A 删除与客户端 B 的某些消息、或全部消息为例:

删除会话的指定消息

如果客户端 A 想要删除与客户端 B 的指定消息记录:

  1. 客户端 A、B 登录 ZIM SDK,并相互发送、接收单聊消息。
  2. 客户端 A 需要删除与 B 的会话记录时:
    1. 客户端 A 首先登录 ZIM SDK。
    2. 客户端 A 调用 deleteMessages 接口,传入参数 messageList、config,删除指定的消息。
    3. 删除操作的结果,将通过 ZIMMessageDeletedCallback 回调接口通知给客户端 A。
// 删除会话的指定消息
std::vector<std::shared_ptr<ZIMMessage>> messageList;
zim::ZIMMessageDeleteConfig config;
//用于确定是否删除服务器消息
config.isAlsoDeleteServerMessage = true;
zim_->deleteMessages(messageList, "conversationID", zim::ZIM_CONVERSATION_TYPE_PEER, config, callback);

为所有人删除消息

说明

本功能自 ZIM SDK 3.2.0 版本开始支持。

默认情况下,删除操作只对当前用户生效,会话内的其他成员仍可看到被删除的消息。如果需要让会话内的所有成员都不再看到指定的消息,请在调用 deleteMessages 时,将 ZIMMessageDeleteConfigisAlsoDeleteForEveryone 设置为 true

删除成功后,操作者与会话内其他成员会分别收到删除结果通知:

  • 操作者通过 ZIMMessageDeletedCallback 回调得知删除结果。
  • 会话内的其他成员通过 onMessageDeleted 回调收到通知,回调参数 ZIMMessageDeletedInfo 中,messageDeleteType 为“删除指定消息”类型,messageList 为被删除的消息列表。

以下示例代码演示了如何为所有人删除消息,以及操作者和其他成员如何接收删除结果通知:

// 为会话内的所有人删除指定消息
std::vector<std::shared_ptr<zim::ZIMMessage>> messageList;

zim::ZIMMessageDeleteConfig config;
// 为所有人删除消息时,必须同时删除服务端消息
config.isAlsoDeleteServerMessage = true;
config.isAlsoDeleteForEveryone = true;

zim_->deleteMessages(messageList, "conversationID", zim::ZIM_CONVERSATION_TYPE_GROUP, config, callback);

// 会话内的其他成员通过该回调感知消息被删除
void onMessageDeleted(zim::ZIM *zim, const zim::ZIMMessageDeletedInfo &deletedInfo) override {
    if (deletedInfo.messageDeleteType == zim::ZIM_MESSAGE_DELETE_TYPE_MESSAGE_LIST_DELETED) {
        // deletedInfo.messageList 为被删除的消息列表,可于此处刷新 UI
    }
}
注意
  • isAlsoDeleteForEveryone 只在 deleteMessages 接口生效,deleteAllMessagedeleteAllConversationMessages 不支持该配置。
  • 使用该配置时,必须同时将 isAlsoDeleteServerMessage 设置为 true
  • 单次最多可删除 100 条消息。
  • 本操作为整批生效:只要传入的消息列表中存在任意一条不满足条件的消息(超出有效期、无操作权限等),本次调用将整批失败,列表中其余合法的消息也不会被删除。

有效期

只有在有效期内的消息才能为所有人删除,有效期从消息的发送时间开始计算。默认有效期为 24 小时,最长支持配置至 7 天,如需修改配置,请联系 ZEGO 技术支持。

建议业务层根据消息的 timestamp 与当前时间的差值,决定是否向用户展示“为所有人删除”的入口。若因设备本地时间不准确导致该操作被误调用,接口会返回错误码进行兜底。

操作权限

会话成员可以为所有人删除的消息范围如下:

会话类型可以为所有人删除的消息
单聊只能删除自己发送的消息,不支持删除对方发送的消息。
群聊普通成员只能删除自己发送的消息;管理员可以删除自己和普通成员发送的消息;群主可以删除自己、管理员和普通成员发送的消息。

在群聊场景下,建议业务层先通过 queryGroupMemberInfo 查询操作者与消息发送者在群组中的身份,再决定是否向用户展示“为所有人删除”的入口。

说明

对于群定向消息,只有该消息的目标成员会收到删除通知,非目标成员不受影响。

错误码

调用失败时,常见的错误码如下:

错误码说明
6000001参数错误。未同时将 isAlsoDeleteServerMessage 设置为 true ,或单次删除的消息超过 100 条。
6000288待删除的消息已超出可为所有人删除的有效期。
6000285单聊场景下无操作权限,即尝试删除对方发送的消息。
6000541群聊场景下无操作权限,即尝试删除权限高于或等于自己的成员所发送的消息。

删除指定会话的全部消息

如果客户端 A 想要删除与客户端 B 的指定会话的全部消息记录:

  1. 客户端 A、B 登录 ZIM SDK,并相互发送、接收单聊消息。
  2. 客户端 A 需要删除与 B 的会话记录时:
    1. 客户端 A 首先登录 ZIM SDK。
    2. 客户端 A 调用 deleteAllMessage 接口,传入参数 conversationID、conversationType、config,配置删除指定会话的全部消息。
    3. 删除操作的结果,将通过 ZIMMessageDeletedCallback 回调接口通知给客户端 A。
// 用于确定是否删除服务器消息
ZIMMessageDeleteConfig config;
config.isAlsoDeleteServerMessage = true;

zim_->deleteAllMessage("conversationID", zim::ZIM_CONVERSATION_TYPE_PEER, config, callback);

删除所有消息

登录 ZIM SDK 后,调用 deleteAllConversationMessages 接口,传入参数 ZIMMessageDeleteConfig ,配置是否删除存放在服务端的消息,即可删除所有单聊和群聊会话的全部消息。

删除操作的结果,将通过 ZIMConversationMessagesAllDeletedCallback 回调接口返回。此外,客户端也将收到 onMessageDeleted 的通知。

清空所有会话的全部消息后:

  • 如果您希望保留原有会话列表,仅更新会话列中展示的 lastMessage 为空,请重新 拉取会话列表
  • 如果您希望清空原有会话列表,请 删除全部会话
// 删除所有会话的全部消息

// 设置是否删除存放于服务端的消息
zim::ZIMMessageDeleteConfig config;
config.isAlsoDeleteServerMessage = true;

zim::ZIM::getInstance()->deleteAllConversationMessages(config, [=](const zim::ZIMError& errorInfo) {
    // 删除消息的结果
    if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
        // 删除后的业务逻辑
    }
    else {
        // 请查看错误码文档寻找解决建议
    }
    });

上一篇

获取历史消息

下一篇

插入本地消息

当前页

返回到顶部