消息撤回
更新时间: 2024/11/21 16:42:57
NIM SDK 的MessageInterface
类提供了监听消息撤回的方法和撤回消息的方法。
功能介绍
可以在一定时间内(默认 2 分钟,可在云信控制台配置)撤回单聊消息和群消息。
-
单聊场景下,发送方撤回之后,对应的离线消息、漫游消息和历史消息将被删除,消息接收方会收到一条类型为
deleteMsg
的系统通知;群聊场景下, 所有群成员都会收到该系统通知。 -
如果接收方同时在多个端登录了同一个账号, 那么其它端也会收到这条系统通知。
-
消息撤回后,无论是发送方还是接收方,都无法在历史消息、漫游消息或者离线消息的接口返回中,查到该消息。
-
初始化 SDK 时,配置
rollbackDelMsgUnread
为 true 可实现消息撤回后重新计算未读数(默认值为 false,该参数也适用于:未读消息被删除,是否重新计算未读数)。
- 如果消息发送失败或者消息发送者被拉黑,那么即使在可撤回时长内也无法撤回。
- 单聊和群聊消息的撤回功能存在些许区别:
- 单聊:用户只能撤回自己发送的消息。
- 群聊:普通群成员只能撤回自己发送的消息。客户端 SDK 支持管理员撤回其他群成员的消息(服务端 API 不支持)。
前提条件
- 已集成 SDK。
- 已注册云信 IM 账号,获取 accid 和 token。
实现流程
不同类型消息撤回的流程相似,本节以消息发送方与消息接收方的单聊消息交互为例,介绍消息撤回的实现流程。
API调用时序
sequenceDiagram
note over NIM SDK: 初始化与登录
发送方 ->> NIM SDK: 初始化
接收方 ->> NIM SDK: 初始化
note left of 接收方: 初始化时注册离系统通知回调<br>(onofflinesysmsgs)
发送方 ->> NIM SDK: 登录
接收方 ->> NIM SDK: 登录
note over NIM SDK: 发送消息
发送方 ->> NIM SDK: 发送消息
note over NIM SDK: 撤回消息
发送方 ->> NIM SDK: 撤回消息<br>(recallMessage)
NIM SDK ->> 接收方: 消息撤回的通知实体<br>(deleteMsg)
流程说明
-
接收方在调用
getInstance
方法初始化 SDK 时注册onofflinesysmsgs
回调,监听离线系统通知。接收方未注册该回调函数时,如果消息被撤回时接收方离线,那么接收方将无法收到消息被撤回通知。
-
发送方在发送消息后,调用
recallMsg
方法撤回消息。调用成功后,SDK 会先触发回调通知应用上层消息撤回成功,再自动将本地的这条消息删除。以下情况消息撤回会失败:
- 消息为空
- 消息没有发送成功
- 消息超过撤回时限
- 消息被反垃圾(内容审核)命中
nim.sendText({ scene: 'p2p', to: 'zk3', text: '会被撤回的消息', done: function(err, msg) { if (!err) { /** * 撤回刚刚发出的消息 */ nim.recallMsg({ msg, done: function (err, msg) { if (!err) { console.log('撤回了刚刚发出的消息') } } }) } } })
-
如果需要在撤回后显示一条本方已撤回的提示,可发送一条提示消息插入本地消息。
API参考
API |
说明 |
---|---|
recallMsg |
撤回消息 |
此文档是否对你有帮助?