跳到主要内容

修改消息

从 5.26.0 版本开始,IMLib 支持消息修改功能,支持所有存储类型消息(文本、图片(包含 GIF)、语音(高清、普通)、视频、引用、文件、自定义消息)的内容修改。

消息修改

开发者可通过 modifyMessageWithParams:completionHandler: 接口修改消息。

参数类型说明
paramsRCModifyMessageParams消息修改参数
completionHandlerBlock结果回调

在接口中,params 是对修改信息的封装 RCModifyMessageParams,其内容如下:

参数类型说明
messageUIdNSString消息唯一 ID
messageContentRCMessageContent修改后的消息体
Objective C
RCTextMessage *messageContent = (RCTextMessage *)message.content;
messageContent.content = @"modified_text";
RCModifyMessageParams *params = [[RCModifyMessageParams alloc] init];
params.messageUId = message.messageUId;
params.messageContent = messageContent;
[[RCCoreClient sharedCoreClient] modifyMessageWithParams:params completionHandler:^(RCMessage * _Nonnull message, RCErrorCode code) {
// TODO code
}];

消息修改回调

消息修改后,多端或其他用户会收到消息修改的回调,会通过 RCIMClientReceiveMessageDelegate 协议中的 onMessagesModified:onModifiedMessageSyncCompleted 方法进行回调。

Objective C
// 在初始化时注册代理。
[[RCCoreClient sharedCoreClient] setReceiveMessageDelegate:self object:nil];

// 在业务逻辑中实现回调方法。
- (void)onMessagesModified:(NSArray<RCMessage *> *)messages {
// 消息被修改。
}

- (void)onModifiedMessageSyncCompleted {
// 每次连接成功后,会同步远端修改信息。
}

刷新引用消息

开发者可通过 refreshReferenceMessageWithParams:localMessageBlock:remoteMessageBlock:errorBlock: 接口刷新引用消息。

参数类型说明
paramsRCRefreshReferenceMessageParams消息修改参数
localMessageBlockBlock本地结果回调
remoteMessageBlockBlock远端结果回调
errorBlockBlock错误回调

在接口中,params 是对刷新信息的封装 RCRefreshReferenceMessageParams,其内容如下:

参数类型说明
messageUIdsNSArray消息唯一 ID 列表,最多 20 个
conversationIdentifierRCConversationIdentifier会话标识
Objective C
RCRefreshReferenceMessageParams *params = [[RCRefreshReferenceMessageParams alloc] init];
RCConversationIdentifier *identifier = [[RCConversationIdentifier alloc] init];
identifier.type = message.conversationType;
identifier.targetId = message.targetId;
identifier.channelId = message.channelId;
params.conversationIdentifier = identifier;
params.messageUIds = @[message.messageUId];
params.messageContent = messageContent;
[[RCCoreClient sharedCoreClient] refreshReferenceMessageWithParams:params
localMessageBlock:^(NSArray<RCMessageResult *> * _Nonnull results) {
// TODO 本地消息
} remoteMessageBlock:^(NSArray<RCMessageResult *> * _Nonnull results) {
// TODO 远端消息
} errorBlock:^(RCErrorCode code) {
// TODO 错误处理
}];

消息修改草稿

提示

SDK 从 5.28.0 版本开始提供该接口。

当用户修改已发送的消息时,输入框会保留当前要修改的消息内容。为了提升用户体验,SDK 提供了保存、获取、清除会话草稿的能力,确保用户在切换会话或退出应用后能够恢复编辑状态。

保存消息修改草稿

您可以使用 saveEditedMessageDraft:identifier:completion: 方法保存当前会话中消息修改草稿的最新内容。当用户暂时离开编辑界面时,可以保存草稿以便后续恢复。

接口原型

Objective C
- (void)saveEditedMessageDraft:(RCEditedMessageDraft *)draft
identifier:(RCConversationIdentifier *)identifier
completion:(nullable void(^)(RCErrorCode code))completion;

参数说明

参数类型说明
draftRCEditedMessageDraft草稿模型,包含消息 UID 和草稿内容
identifierRCConversationIdentifier会话标识,支持单聊、群聊、超级群类型,targetId 为必填参数,channeld 为可选参数
completionBlock操作完成回调

RCEditedMessageDraft 属性说明

属性类型说明
messageUIdNSString消息唯一标识(必填参数),用于标识要编辑的消息
contentNSString草稿内容(可选参数),用户当前编辑的文本

示例代码

Objective C
// 创建草稿对象
RCEditedMessageDraft *draft = [[RCEditedMessageDraft alloc] init];
draft.content = @"用户正在编辑的内容";
draft.messageUId = @"CP50-A35I-P026-DHHT";

// 创建会话标识(以单聊为例)
RCConversationIdentifier *identifier = [[RCConversationIdentifier alloc] init];
identifier.type = ConversationType_PRIVATE;
identifier.targetId = @"user_target_id";

// 保存编辑草稿
[[RCCoreClient sharedCoreClient] saveEditedMessageDraft:draft
identifier:identifier
completion:^(RCErrorCode code) {
if (code == RC_SUCCESS) {
NSLog(@"编辑草稿保存成功");
} else {
NSLog(@"编辑草稿保存失败,错误码:%ld", (long)code);
}
}];

获取消息修改草稿

当用户重新进入会话时,您可以使用 getEditedMessageDraft:completion: 方法获取已保存的消息草稿内容,以便恢复用户的编辑状态。

接口原型

Objective C
- (void)getEditedMessageDraft:(RCConversationIdentifier *)identifier
completion:(nullable void(^)(RCErrorCode code, RCEditedMessageDraft * _Nullable draft))completion;

参数说明

参数类型说明
identifierRCConversationIdentifier会话标识,支持单聊、群聊、超级群类型,targetId 为必填参数,channeld 为可选参数
completionBlock结果回调,返回错误码和草稿对象

示例代码

Objective C
// 创建会话标识(以单聊为例)
RCConversationIdentifier *identifier = [[RCConversationIdentifier alloc] init];
identifier.type = ConversationType_PRIVATE;
identifier.targetId = @"user_target_id";

// 获取编辑草稿
[[RCCoreClient sharedCoreClient] getEditedMessageDraft:identifier completion:^(RCErrorCode code, RCEditedMessageDraft * _Nullable draft) {
if (code == RC_SUCCESS) {
if (draft) {
// 成功获取草稿,恢复编辑内容
NSLog(@"获取草稿成功,消息 UID:%@,内容:%@", draft.messageUId, draft.content);
// 在 UI 中恢复草稿内容
} else {
NSLog(@"该会话暂无编辑草稿");
}
} else {
NSLog(@"获取编辑草稿失败,错误码:%ld", (long)code);
}
}];

清除消息修改草稿

当用户完成消息编辑或不再需要已保存的草稿时,您可以使用 clearEditedMessageDraft:completion 方法清除消息修改草稿,释放存储空间。

接口原型

Objective C
- (void)clearEditedMessageDraft:(RCConversationIdentifier *)identifier
completion:(nullable void(^)(RCErrorCode code))completion;

参数说明

参数类型说明
identifierRCConversationIdentifier会话标识,支持单聊、群聊、超级群类型,targetId 为必填参数,channeld 为可选参数
completionBlock结果回调,返回错误码

示例代码

Objective C
// 创建会话标识(以单聊为例)
RCConversationIdentifier *identifier = [[RCConversationIdentifier alloc] init];
identifier.type = ConversationType_PRIVATE;
identifier.targetId = @"user_target_id";

// 清除编辑草稿
[[RCCoreClient sharedCoreClient] clearEditedMessageDraft:identifier completion:^(RCErrorCode code) {
if (code == RC_SUCCESS) {
NSLog(@"编辑草稿清除成功");
} else {
NSLog(@"编辑草稿清除失败,错误码:%ld", (long)code);
}
}];