@ 消息
提及(@)是群聊会话中常见功能,允许用户可以会话中提及提及指定用户,或全部群成员,以增强消息的提示作用。使用 @ 功能后,消息内容中会额外携带 RCMentionedInfo 对象。Global IM UIKit 默认启用了 @ 功能。
局限
- 仅支持群聊会话。
- Global IM UIKit 默认仅实现了在发送文本消息、引用消息时使用 @ 功能。
- Global IM UIKit 不支持 @ 所有人功能。
- @ 消息可以被转发,但转发的只是纯文本,不再具备 @ 功能。
用法
在使用 @ 功能前,请先实现
RCIMGroupMemberDataSource
,并给 Global IM UIKit 设置群成员列表信息代理。详见用户信息。
Global IM UIKit 默认在配置中启用了 @ 功能,用法如下:
- 在会话页面长按用户头像可触发消息编辑,提及(@)该用户。
- 在会话页面输入 @ 符号之后,Global IM UIKit 弹出成员列表选择页面。如果应用程序设置群成员列表信息代理,该页面会显示一个空列表。设置群成员列表信息代理后,Global IM UIKit 会通过
RCIMGroupMemberDataSource
协议的getAllMembersOfGroup
方法取得群成员数据,并展示在该弹窗中。
定制化
自定义选择成员界面
如果想更换选人界面,可以重写下面方法,弹出自定义的选人界面,选人结束之后,调用 selectedBlock
传入选中的用户列表即可。
- (void)inputTextViewDidInputMention:(UITextView *)textView;
选人结束后,调用下面方法传入选中的用户列表:
[self.inputBar.textView insertMentionedUser:user];
实现 @ 所有人
Global IM UIKit 未实现 @ 所有人功能的页面逻辑,您可以自行实现。您需要构建 type 属性为RC_Mentioned_All
的 RCMentionedInfo 对象,写入消息内容中。构建 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];
[[RCCoreClient sharedCoreClient] sendMessage:message pushContent:nil pushData:nil attached:^(RCMessage * _Nullable message) {
} successBlock:^(RCMessage * _Nonnull successMessage) {
} errorBlock:^(RCErrorCode nErrorCode, RCMessage * _Nonnull errorMessage) {
}];