消息回应
IMKit 支持在内置会话页面使用消息回应。开启后,用户可以长按消息并选择表情回应,在底部回应面板中添加或移除表情;存在回应的消息会在气泡下方展示回应信息,用户也可以查看回应详情。
- 从 5.42.0 版本开始,IMKit 支持消息回应功能。
- IMKit 消息回应功能默认关闭,需要通过全局配置开启。




使用限制
- IMKit 内置会话页面目前仅在单聊和群聊会话中展示消息回应入口。
- 只有已发送成功且拥有有效
messageUId的消息支持消息回应。 - 阅后即焚消息不支持消息回应。
- 内置消息回应入口支持文本、图文、图片、GIF、普通语音、高清语音、小视频、文件、位置、引用、合并转发等消息类型。
打开消息回应功能
您可以通过全局配置开启 IMKit 的消息回应功能。
RCKitConfigCenter.message.enableMessageReaction = YES;
开启后,IMKit 会在满足条件的消息长按菜单中展示表情回应入口。用户点击该入口后,IMKit 会展示底部回应面板。
用户点击某个表情时,如果当前用户尚未添加该回应,IMKit 会添加回应;如果当前用户已添加该回应,IMKit 会移除回应。
页面展示
消息回应入口
开启消息回应功能后,用户可以在会话页面长按消息,并在弹出的消息菜单中点击表情回应。
表情面板
点击表情回应后,IMKit 会展示表情面板。面板包含最近常用表情和默认表情,用户点击表情即可为该消息添加或移除回应。
消息气泡回应展示
消息添加回应后,IMKit 会在消息气泡下方展示回应内容。当前用户已添加的回应会高亮显示;在详情展示模式下,回应区域还会展示回应用户摘要。
回应详情
用户点击消息气泡下方的回应详情入口后,IMKit 会展示回应详情页。详情页按回应类型展示回应人数,并展示当前回应类型下的用户列表。
设置回应展示模式
IMKit 支持设置消息下方回应区域的展示模式。默认值为 RCMessageReactionDisplayModeCountOnly。
| 枚举值 | 说明 |
|---|---|
RCMessageReactionDisplayModeCountOnly | 仅显示回应表情和数量。 |
RCMessageReactionDisplayModeDetail | 显示回应用户摘要。 |
RCKitConfigCenter.message.messageReactionDisplayMode = RCMessageReactionDisplayModeDetail;
当展示模式为 RCMessageReactionDisplayModeDetail 时,IMKit 会按需加载用户信息以展示用户摘要。在群聊中,IMKit 优先使用群成员昵称,其次使用用户昵称。
设置常用回应展示数量
IMKit 会根据用户的本地使用记录展示常用回应。常用回应展示数量默认值为 14,有效范围为 [1, 20]。如果设置值超出范围,IMKit 会使用默认值 14。
RCKitConfigCenter.message.frequentlyUsedReactionDisplayCount = 14;
如需获取本地常用消息回应列表,可调用 [getFrequentlyUsedMessageReactionsWithCount:]。
NSArray<RCMessageReactionUsageInfo *> *reactions =
[[RCIM sharedRCIM] getFrequentlyUsedMessageReactionsWithCount:20];
count <= 0 时返回空数组;count > 20 时按 20 截断。常用回应统计保存在本地,应用卸载重装后会重新统计。
自定义消息回应操作
您可以在 RCConversationViewController 子类中重写 [willPerformMessageReactionWithReactionId:message:],拦截用户点击消息下方回应或在回应面板中选择表情后的默认处理。
- (BOOL)willPerformMessageReactionWithReactionId:(NSString *)reactionId
message:(RCMessageModel *)message {
if ([reactionId isEqualToString:@"👍"]) {
return NO;
}
return YES;
}
返回 YES 表示继续执行 IMKit 内置的添加或移除回应逻辑;返回 NO 表示拦截本次操作,由业务自行处理。
自定义回应详情页
用户点击消息下方的回应详情入口时,IMKit 默认展示内置回应详情页。您可以在 RCConversationViewController 子类中重写 [presentMessageReactionDetailForMessage:reaction:],改为展示自定义回应详情页。
- (void)presentMessageReactionDetailForMessage:(RCMessageModel *)message
reaction:(RCMessageReaction *)reaction {
[super presentMessageReactionDetailForMessage:message reaction:reaction];
}
如果需要保留 IMKit 默认详情页,请调用 super。
用户在详情页中点击回应用户时,IMKit 默认不做处理。您可以重写 [didTapUserInMessageReactionDetail:message:reaction:],跳转到业务用户资料页或执行其他操作。
- (void)didTapUserInMessageReactionDetail:(RCMessageReactionUser *)user
message:(RCMessageModel *)message
reaction:(RCMessageReaction *)reaction {
// 展示用户资料页。
}
自定义错误提示
添加或移除消息回应失败时,IMKit 默认展示内置错误提示。您可以在 RCConversationViewController 子类中重写 [showMessageReactionErrorWithErrorCode:message:reactionId:],改为展示自定义错误提示。
- (void)showMessageReactionErrorWithErrorCode:(RCErrorCode)errorCode
message:(RCMessageModel *)message
reactionId:(NSString *)reactionId {
[super showMessageReactionErrorWithErrorCode:errorCode message:message reactionId:reactionId];
}
如果需要保留 IMKit 默认错误提示,请调用 super。
IMLib 数据接口
如果您需要在自定义 UI 中直接添加、移除或查询消息回应,可使用 IMLib 提供的消息回应接口。详见 IMLib 消息回应。