SDKsiOS
撤回消息
撤回消息,并通过消息监听器同步撤回态。
如果需要在会话中向所有成员展示“消息已撤回”状态,应调用撤回消息接口,而不能使用普通删除替代。删除操作仅影响当前账号侧可见性,见删除消息;若需要保留消息并更新其文字内容,见修改消息。
撤回一条消息
[[OIMManager manager] revokeMessage:conversationID
clientMsgID:clientMsgID
onSuccess:^(NSString * _Nullable data) {
// 成功撤回,本地更新为撤回态
[self markMessageRevoked:clientMsgID conversationID:conversationID];
}
onFailure:^(NSInteger code, NSString * _Nullable message) {
[self showRevokeError:code message:message ?: @"撤回消息失败"];
}];参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
conversationID | NSString * | 必填 | 消息所属的会话 ID。 |
clientMsgID | NSString * | 必填 | 要撤回的目标消息客户端 ID。 |
成功回调表示当前撤回请求已被服务端处理完成。允许撤回的发送者权限、时间窗口和消息类型由服务端统一校验;调用失败时切勿仅在本地擅自保留撤回状态。
返回结果
- 成功回调仅代表本端向服务端发起的撤回请求处理成功,并不代表所有其他客户端已全部完成更新。
- 客户端状态合并标识为
clientMsgID(必要时同时限定conversationID)。
接收撤回事件
其他成员或本端其他已登录设备收到撤回通知时,由 OIMAdvancedMsgListener 协议的撤回消息方法推送:
- (void)onRecvMessageRevoked:(OIMMessageRevokedInfo *)revokedInfo {
if (revokedInfo == nil) {
return;
}
[self markMessageRevokedByClientMsgID:revokedInfo.clientMsgID
sessionType:revokedInfo.sessionType];
}如果使用 OIMCallbacker 的闭包形式,回调参数可能为空,处理前应校验判空:
OIMRevokedCallback handleMessageRevoked =
^(OIMMessageRevokedInfo * _Nullable revokedInfo) {
if (revokedInfo == nil) {
return;
}
[self markMessageRevokedByClientMsgID:revokedInfo.clientMsgID
sessionType:revokedInfo.sessionType];
};OIMMessageRevokedInfo 中不直接携带 conversationID,本地应先以 clientMsgID 检索已缓存的原始消息,再结合其会话与事件中提供的 sessionType 刷新对应气泡展示为撤回状态。完整的监听器生命周期管理见接收消息。
撤回接口调用成功、其他端事件到达和重新拉取历史消息是三个独立的业务阶段。
相关页面
这个页面有帮助吗?