Windows/macOS

圈组消息撤回

更新时间: 2024/11/21 16:29:15

NIM SDK 的nim_qchat::Message类提供圈组消息撤回的方法,支持在消息发送后将消息撤回。圈组的消息撤回功能属于双向撤回。撤回之后,消息接收者和发送者都将收到一条消息撤回通知。

消息发送方和拥有撤回他人消息权限(kPermissionRevokeMemberMessage)的频道成员都可撤回消息。

前提条件

实现流程

本文以 发送方的消息被频道成员A 撤回 为例进行介绍,即发送方在下文中为消息被撤回的一方。

API 调用时序

sequenceDiagram



note over QChat: 初始化
发送方 ->> QChat: 初始化
频道成员A ->> QChat: 初始化
note over QChat: 注册回调函数并登录
发送方 ->> QChat: 注册消息更新回调
发送方 ->> QChat: 登录圈组
频道成员A ->> QChat: 注册接收消息回调&消息更新回调
频道成员A ->> QChat: 登录圈组
note over QChat: 双方都成为同一服务器的成员
note over QChat: 双方都能访问同一频道
note over QChat: 发送方拥有发送消息的权限
note over QChat: 频道成员A拥有撤回他人消息权限
note over QChat: 消息收发
发送方 ->> QChat: 在频道发送消息
QChat ->> 频道成员A: 投递消息(QChatMessage)
频道成员A ->> QChat: 撤回消息
QChat ->> 发送方: 消息更新响应
QChat ->> 频道成员A: 消息更新响应


具体流程

本节仅对上图中标为部分的流程进行说明,其他流程请参考相关文档。例如:

  • 服务器成员相关说明,可参见圈组服务器成员管理
  • 用户是否能访问某频道的相关说明,可参见频道管理中对于频道黑白名单的说明。
  • 权限相关配置说明,可参见身份组相关文档。
  1. 注册回调函数并登录。

    • 发送方在登录圈组前,注册RegUpdatedCb消息更新回调函数。
    • 频道成员A在登录圈组前,注册RegRecvCb消息接收回调函数和RegUpdatedCb消息更新回调函数。

    示例代码如下:

    注册消息接收回调
    QChatRegRecvMsgCbParam reg_receive_message_cb_param;
    reg_receive_message_cb_param.cb = [this](const QChatRecvMsgResp& resp) {
        // process messa
    };
    Message::RegRecvCb(reg_receive_message_cb_param);
    
    注册消息更新回调
    QChatRegMsgUpdatedCbParam reg_msg_updated_cb_param;
    reg_msg_updated_cb_param.cb = [this](const QChatMsgUpdatedResp& resp) {
        if (resp.res_code != NIMResCode::kNIMResSuccess) {
            // error handling
            return;
        }
        // process response
        // ...
    };
    Message::RegUpdatedCb(reg_msg_updated_cb_param);
    
    
  2. 频道成员A 接收到消息后,调用Revoke方法撤回消息。


    调用限制

    • 默认只能在消息发送后 2 分钟内撤回消息。
      可在云信控制台配置“可撤回时长”在云信控制台选择应用,进入IM 即时通讯 > 功能配置 > 圈组 > 子功能配置 > 圈组消息可撤回时长即可配置。
    • 非消息发送方需要拥有撤回他人消息的权限,才能撤回消息。

    示例代码如下:

    QChatRevokeMessageParam param;
    param.id_info.server_id = 123456;
    param.id_info.channel_id = 123456;
    param.timestamp = 123456;
    param.msg_server_id = 123456;
    param.update_info.postscript = "postscript";
    param.update_info.extension = "extension";
    param.update_info.push_content = "push content";
    param.update_info.push_payload = "push payload";
    param.cb = [this](const QChatUpdateMsgResp& resp) {
        if (resp.res_code != NIMResCode::kNIMResSuccess) {
            // error handling
            return;
        }
        // process response
        // ...
    };
    Message::Revoke(param);
    
    
  3. RegUpdatedCb回调函数触发,双方通过该回调接收消息更新响应。

    云信服务端不会下发“消息更新响应”通知给发起撤回操作的设备,因为操作者不需要接收当前操作的通知。但如果操作者使用相同 IM 账号在其他设备登录,将收到该通知。

此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 实现流程
  • API 调用时序
  • 具体流程