跳到主要内容

消息回应

IMKit 支持在内置会话页面使用消息回应。开启后,用户可以长按消息并选择表情回应,在底部回应面板中添加或移除表情;存在回应的消息会在气泡下方展示回应信息,用户也可以查看回应详情。

提示
  • 从 5.42.0 版本开始,IMKit 支持消息回应功能。
  • IMKit 消息回应功能默认关闭,需要通过全局配置开启。
消息回应入口
消息回应入口
表情面板
表情面板
消息气泡回应展示
消息气泡回应展示
回应详情
回应详情

使用限制

  • IMKit 内置会话页面目前仅在单聊和群聊会话中展示消息回应入口。
  • 只有已发送成功且拥有有效 messageUId 的消息支持消息回应。
  • 阅后即焚消息不支持消息回应。
  • 内置消息回应入口支持文本、图文、图片、GIF、普通语音、高清语音、小视频、文件、位置、引用、合并转发等消息类型。

打开消息回应功能

您可以通过全局配置开启 IMKit 的消息回应功能。

Objective C
RCKitConfigCenter.message.enableMessageReaction = YES;

开启后,IMKit 会在满足条件的消息长按菜单中展示表情回应入口。用户点击该入口后,IMKit 会展示底部回应面板。

用户点击某个表情时,如果当前用户尚未添加该回应,IMKit 会添加回应;如果当前用户已添加该回应,IMKit 会移除回应。

页面展示

消息回应入口

开启消息回应功能后,用户可以在会话页面长按消息,并在弹出的消息菜单中点击表情回应

表情面板

点击表情回应后,IMKit 会展示表情面板。面板包含最近常用表情和默认表情,用户点击表情即可为该消息添加或移除回应。

消息气泡回应展示

消息添加回应后,IMKit 会在消息气泡下方展示回应内容。当前用户已添加的回应会高亮显示;在详情展示模式下,回应区域还会展示回应用户摘要。

回应详情

用户点击消息气泡下方的回应详情入口后,IMKit 会展示回应详情页。详情页按回应类型展示回应人数,并展示当前回应类型下的用户列表。

设置回应展示模式

IMKit 支持设置消息下方回应区域的展示模式。默认值为 RCMessageReactionDisplayModeCountOnly

枚举值说明
RCMessageReactionDisplayModeCountOnly仅显示回应表情和数量。
RCMessageReactionDisplayModeDetail显示回应用户摘要。
Objective C
RCKitConfigCenter.message.messageReactionDisplayMode = RCMessageReactionDisplayModeDetail;

当展示模式为 RCMessageReactionDisplayModeDetail 时,IMKit 会按需加载用户信息以展示用户摘要。在群聊中,IMKit 优先使用群成员昵称,其次使用用户昵称。

设置常用回应展示数量

IMKit 会根据用户的本地使用记录展示常用回应。常用回应展示数量默认值为 14,有效范围为 [1, 20]。如果设置值超出范围,IMKit 会使用默认值 14

Objective C
RCKitConfigCenter.message.frequentlyUsedReactionDisplayCount = 14;

如需获取本地常用消息回应列表,可调用 [getFrequentlyUsedMessageReactionsWithCount:]。

Objective C
NSArray<RCMessageReactionUsageInfo *> *reactions =
[[RCIM sharedRCIM] getFrequentlyUsedMessageReactionsWithCount:20];

count <= 0 时返回空数组;count > 20 时按 20 截断。常用回应统计保存在本地,应用卸载重装后会重新统计。

自定义消息回应操作

您可以在 RCConversationViewController 子类中重写 [willPerformMessageReactionWithReactionId:message:],拦截用户点击消息下方回应或在回应面板中选择表情后的默认处理。

Objective C
- (BOOL)willPerformMessageReactionWithReactionId:(NSString *)reactionId
message:(RCMessageModel *)message {
if ([reactionId isEqualToString:@"👍"]) {
return NO;
}
return YES;
}

返回 YES 表示继续执行 IMKit 内置的添加或移除回应逻辑;返回 NO 表示拦截本次操作,由业务自行处理。

自定义回应详情页

用户点击消息下方的回应详情入口时,IMKit 默认展示内置回应详情页。您可以在 RCConversationViewController 子类中重写 [presentMessageReactionDetailForMessage:reaction:],改为展示自定义回应详情页。

Objective C
- (void)presentMessageReactionDetailForMessage:(RCMessageModel *)message
reaction:(RCMessageReaction *)reaction {
[super presentMessageReactionDetailForMessage:message reaction:reaction];
}

如果需要保留 IMKit 默认详情页,请调用 super

用户在详情页中点击回应用户时,IMKit 默认不做处理。您可以重写 [didTapUserInMessageReactionDetail:message:reaction:],跳转到业务用户资料页或执行其他操作。

Objective C
- (void)didTapUserInMessageReactionDetail:(RCMessageReactionUser *)user
message:(RCMessageModel *)message
reaction:(RCMessageReaction *)reaction {
// 展示用户资料页。
}

自定义错误提示

添加或移除消息回应失败时,IMKit 默认展示内置错误提示。您可以在 RCConversationViewController 子类中重写 [showMessageReactionErrorWithErrorCode:message:reactionId:],改为展示自定义错误提示。

Objective C
- (void)showMessageReactionErrorWithErrorCode:(RCErrorCode)errorCode
message:(RCMessageModel *)message
reactionId:(NSString *)reactionId {
[super showMessageReactionErrorWithErrorCode:errorCode message:message reactionId:reactionId];
}

如果需要保留 IMKit 默认错误提示,请调用 super

IMLib 数据接口

如果您需要在自定义 UI 中直接添加、移除或查询消息回应,可使用 IMLib 提供的消息回应接口。详见 IMLib 消息回应