跳到主要内容

@ 消息

提及(@)是群聊会话中常见功能,允许用户在会话中提及指定用户,或全部群成员,以增强消息的提示作用。使用 @ 功能后,消息内容中会额外携带 RCMentionedInfo 对象。IMKit 默认启用了 @ 功能。

提示

IMKit 未实现 @所有人功能,图中「@所有人」仅作为设计参考。选择联系人页面的数据需要由应用程序提供,否则展示空列表。

alt(width=250) alt(width=250)

局限

  • 仅支持群聊会话。
  • IMKit 默认仅实现了在发送文本消息、引用消息时使用 @ 功能。
  • IMKit 未实现 @ 所有人功能。
  • @ 消息可以被转发,但转发的只是纯文本,不再具备 @ 功能。

用法

提示

在使用 @ 功能前,请先实现 RCIMGroupMemberDataSource,并给 IMKit 设置群成员列表信息代理。详见用户信息

IMKit 默认在配置中启用了 @ 功能,用法如下:

  • 在会话页面长按用户头像可触发消息编辑,提及(@)该用户。
  • 在会话页面输入 @ 符号之后,IMKit 会跳转到成员列表选择页面。如果应用程序设置群成员列表信息代理,该页面会显示一个空列表。设置群成员列表信息代理后,IMKit 会通过 RCIMGroupMemberDataSource 协议的 getAllMembersOfGroup 方法取得群成员数据,并展示在该列表页面中。

定制化

自定义选择成员界面

如果想更换选人界面,可以重写下面方法,弹出自定义的选人界面,选人结束之后,调用 selectedBlock 传入选中的用户列表即可。

- (void)showChooseUserViewController:(void (^)(RCUserInfo *selectedUserInfo))selectedBlock
cancel:(void (^)(void))cancelBlock;

您可以参考融云 SealTalk 应用的实现方式。详见RCDChatViewController.mshowChooseUserViewController 方法。

实现 @ 所有人

IMKit 未实现 @ 所有人功能的页面逻辑,您可以自行实现。您需要构建 type 属性为RC_Mentioned_AllRCMentionedInfo 对象,写入消息内容中。构建 RCMessage 后,使用 sendMessage(普通消息)或 sendMediaMessage 方法发送到会话中。

RCTextMessage *txtMsg = [RCTextMessage messageWithContent:@"测试文本消息"];

RCMentionedInfo *mentionedInfo = [[RCMentionedInfo alloc] initWithMentionedType:RC_Mentioned_All userIdList:nil mentionedContent:nil];
txtMsg.mentionedInfo = mentionedInfo;

RCMessage *message = [[RCMessage alloc]
initWithType:ConversationType_PRIVATE
targetId:@"targetId"
direction:MessageDirection_SEND
content:txtMsg];

[[RCIM sharedRCIM] sendMessage:message
pushContent:nil
pushData:nil
successBlock:^(RCMessage *successMessage) {
//成功
} errorBlock:^(RCErrorCode nErrorCode, RCMessage *errorMessage) {
//失败
}];

您参考可以融云 SealTalk 应用的实现方式。详见RCDChooseUserController.m

关闭 @ 功能

IMKit 的 @ 功能默认开启。您可以通过修改全局配置关闭 @ 功能。

RCKitConfigCenter.message.enableMessageMentioned = NO;