Flutter

圈组消息撤回

更新时间: 2024/05/27 14:28:22

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

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

前提条件

实现流程

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

API 调用时序

以下时序图可能因网络问题而显示异常。如显示异常,一般刷新当前页面即可正常显示。

uml diagram

具体流程

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

  1. 注册回调函数并登录。

    • 发送方在登录圈组前,注册onMessageRevoke消息撤回状态变化回调,监听消息撤回状态变化。
    • 频道成员A 在登录圈组前,注册onReceiveMessage消息接收回调,监听圈组消息接收。

    示例代码如下:

    注册消息接收观察者
    NimCore.instance.qChatObserver.onMessageRevoke.listen((event) {
      //message revoke listener
    });
    
    注册消息撤回状态变化观察者
    NimCore.instance.qChatObserver.onReceiveMessage.listen((event) { 
      //message received
    });
    
  2. 接收到消息后,频道成员A 调用revokeMessage方法撤回该消息。

    该方法入参结构QChatRevokeMessageParam必须传入更新操作通用参数、消息所属的服务器的ID(serverId)、消息所属的频道的 ID(channelId)、消息发送时间以及消息服务端ID。

    调用限制

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

    示例代码如下:

    var paramRevokeMessage = QChatRevokeMessageParam(channelId: channelId,
        serverId: serverId,
        msgIdServer: msgIdServer,
        time: time,
        updateParam: updateParam);
    NimCore.instance.qChatMessageService.revokeMessage(paramRevokeMessage).then((value){
     if(value.isSuccess){
       //revoke message success
     }
    });
    
  3. onMessageRevoke回调函数触发,发送方(即本文例子中的消息被撤回方)通过该回调收到消息撤回通知。

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