圈组消息撤回
更新时间: 2024/03/14 17:08:37
NIM SDK 的NIMQChatMessageManager
协议提供圈组消息撤回的方法,支持在消息发送后将消息撤回。圈组的消息撤回功能属于双向撤回。撤回之后,消息接收者和发送者都将收到消息更新事件。
消息发送方和拥有撤回他人消息权限(NIMQChatPermissionTypeRevokeMsg
)的频道成员都可撤回消息。
前提条件
- 已开通圈组功能。
- 已完成圈组初始化。
使用限制
圈组消息可撤回时长默认为 120s,即默认只能在消息发送后 2 分钟内撤回消息。
若需要扩展上限,可在控制台配置圈组子功能项(圈组消息可撤回时长),具体请参考开通和配置圈组功能。
实现流程
本文以 发送方的消息被频道成员A 撤回 为例进行介绍,即发送方在下文中为消息被撤回的一方。
API 调用时序
以下时序图可能因网络问题而显示异常。如显示异常,一般刷新当前页面即可正常显示。
具体流程
本节仅对上图中标为橙色的流程进行说明,其他流程请参考相关文档。例如:
-
调用
addDelegate:
方法添加委托(具体回调函数如下)并登录。- 双方在登录圈组前,注册
onMessageUpdate:
消息更新事件回调函数。 - 频道成员A 在登录圈组前,注册
onRecvMessages:
消息接收回调函数;同时注册onMessageUpdate:
消息更新事件回调函数。
示例代码如下:
消息接收回调- (void)onRecvMessages:(NSArray<NIMQChatMessage *> *)messages { //your code, deal messages }
消息更新事件回调- (void)onMessageUpdate:(NIMQChatUpdateMessageEvent *)event { }
- 双方在登录圈组前,注册
-
频道成员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 }];
-
onMessageUpdate:
消息更新事件回调触发,发送方和频道成员A 可通过该回调获取消息撤回通知。云信服务端不会下发“消息撤回通知”给发起撤回操作的设备,因为操作者不需要接收当前操作的通知。但如果操作者使用相同 IM 账号在其他设备登录,将收到该通知。
此文档是否对你有帮助?