iOS

圈组消息撤回

更新时间: 2024/03/14 17:08:37

NIM SDK 的NIMQChatMessageManager协议提供圈组消息撤回的方法,支持在消息发送后将消息撤回。圈组的消息撤回功能属于双向撤回。撤回之后,消息接收者和发送者都将收到消息更新事件。

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

前提条件

使用限制

圈组消息可撤回时长默认为 120s,即默认只能在消息发送后 2 分钟内撤回消息。

若需要扩展上限,可在控制台配置圈组子功能项(圈组消息可撤回时长),具体请参考开通和配置圈组功能

实现流程

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

API 调用时序

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

uml diagram

具体流程

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

  1. 调用 addDelegate: 方法添加委托(具体回调函数如下)并登录。

    • 双方在登录圈组前,注册onMessageUpdate:消息更新事件回调函数。
    • 频道成员A 在登录圈组前,注册onRecvMessages:消息接收回调函数;同时注册onMessageUpdate:消息更新事件回调函数。

    示例代码如下:

    消息接收回调
    - (void)onRecvMessages:(NSArray<NIMQChatMessage *> *)messages
    {
        //your code, deal messages
    }
    
    消息更新事件回调
    - (void)onMessageUpdate:(NIMQChatUpdateMessageEvent *)event
    {
        
    }
    
  2. 频道成员A 接收消息后,调用revokeMessage:completion:方法撤回该消息。

    非消息发送方需要拥有撤回他人消息的权限,才能撤回消息。

    示例代码如下:

    id<NIMQChatMessageManager> qchatMessageManager = [[NIMSDK sharedSDK] qchatMessageManager];
    NIMQChatRevokeMessageParam *param = [[NIMQChatRevokeMessageParam alloc] init];
    param.message = message;
    NIMQChatUpdateParam *updateParam = [[NIMQChatUpdateParam alloc] init];
    updateParam.postscript = @"撤回附言";
    param.updateParam = updateParam;
    [qchatMessageManager revokeMessage:param
        completion:^(NSError *__nullable error, NIMQChatUpdateMessageResult *__nullable result) {
        // your code
    }];
    
    
  3. onMessageUpdate:消息更新事件回调触发,发送方和频道成员A 可通过该回调获取消息撤回通知。

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

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