撤回消息
功能简介
ZIM SDK 支持在单聊或群聊会话中撤回本端发送的消息,以及支持群主在群聊会话中撤回他人发送的消息。
本文档介绍了如何使用 ZIM SDK 的接口,实现撤回某个会话中指定的消息。
说明
如果消息接收端使用的 ZIM SDK 版本低于 2.5.0,当消息被撤回,会出现以下 3 种情况:
- 用户为在线状态时收到该消息,仍看到该消息。
- 用户为离线时收到该消息,登录后未主动查询历史消息,不会看到该消息。
- 用户为离线时收到该消息,登录后主动查询历史消息,查询结果回调会显示该消息的类型为 unknown。
实现流程
ZIM SDK 支持撤回某个会话中指定的消息。开发者可以通过 ZIMMessageRevokeConfig 对象,设置撤回消息相关的高级属性配置。
以客户端 A 撤回发送给客户端 B 的指定消息为例:
- 客户端 A 和 客户端 B 分别创建自己的 ZIM 实例,注册 setEventHandler 监听的 onMessageRevokeReceived 回调接口,用于接收消息撤回通知。
- 客户端 A 和 客户端 B 分别登录 ZIM SDK。
- 客户端 A 向 客户端 B 发送单聊消息后,需要撤回发送给客户端 B 的某条消息时:
- 客户端 A 调用 revokeMessage 接口,传入参数 message 和 config,撤回指定的消息。
- 客户端 A 通过 ZIMMessageRevokedCallback 回调接口得知撤回操作的结果。
- 客户端 B 通过 onMessageRevokeReceived 回调得知消息撤回的相关通知。
1 设置监听
用户登录成功后,可以通过 onMessageRevokeReceived 回调监听消息撤回的相关通知。当其他用户撤回消息后,可以直接获取被撤回消息的相关信息,包括撤回时间和撤回类型等。
2 撤回消息
在默认情况下,用户可以在发布消息后的 2 分钟内调用 revokeMessage 撤回消息。撤回操作的结果将通过 ZIMMessageRevokedCallback 通知给用户。
说明
- 若要实现群主撤销其他用户的消息,请集成ZIM SDK 2.9.0及以上版本。
- ZIM SDK目前默认支持2分钟内撤销消息,如需修改配置(最长支持24小时),请联系ZEGO技术支持。
示例代码
ZIMPushConfig pushConfig = new ZIMPushConfig();
pushConfig.content = "撤回了一条消息";
pushConfig.title = messageInfo.getUserName();
ZIMMessageRevokeConfig config = new ZIMMessageRevokeConfig();
config.pushConfig = pushConfig;
zim.revokeMessage(message, config, new ZIMMessageRevokedCallback() {
@Override
public void onMessageRevoked(ZIMMessage zimMessage, ZIMError zimError) {
if (zimError.code == ZIMErrorCode.SUCCESS) {
// 撤回成功
} else {
toast("撤回消息失败," + zimError.code + "," + zimError.message);
}
}
});
1