iOS名片消息

说明:

名片消息,用户可以自定义,也可以直接使用融云的名片 SDK RongContactCard.xcframework( 5.x 之前版本是静态库 RongContactCard.framework)。

RongContactCard.xcframework是IMKit的扩展模块,需要依赖于IMKit,该framework从2.8.10开始支持;只支持单聊,群聊

集成步骤:

1. 导入名片库,参考官网文档 https://doc.rongcloud.cn/im/IOS/5.X/ui/import

2. 设置代理和调用方法,分为两种情况,使用SDK默认的通讯录和使用自定义的通讯录(两个功能是互斥的,如果既用SDK默认的通讯录又自定义了通讯录,那么SDK只会响应自定义的通讯录):

2.1 使用SDK默认的通讯录:

设置RCContactCardKit的RCCCContactsDataSource代理和RCCCGroupDataSource代理,并实现其代理方法(具体可以参考sealtalk源码中AppDelegate中的代理设置RCDRCIMDataSource的代理实现),建议在单例类中实现代理方法,保证整个app的声明周期内都能正常的使用名片功能

2.2 使用自定义的通讯录:

首先需要设置设置RCContactCardKit的RCCCContactViewControllerDelegateRCCCGroupDataSource代理,并实现其代理方法,参考下面代码,建议在单例类中实现代理方法,保证整个app的声明周期内都能正常的使用名片功能

- (void)needDisplayContactViewController:(RCConversationType)conversationType

targetId:(NSString *)targetId {

RCEContactsViewController *contactsVC = [[RCEContactsViewController alloc] init];

contactsVC.title = @“选择联系人”;

UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:contactsVC];

[self presentViewController:navi animated:YES completion:nil];

}

- (void)clickSendContactCardButton {

[self dismissViewControllerAnimated:YES completion:nil];

}

还需要根据情况调用对应的接口来发送名片消息,如果是发送到单聊会话,调用:

/**

选中通讯录中的某个人,点击确定将名片发送到单聊会话的回调方法

@param cardUserInfo 选中人的用户信息

@param targetUserInfo 名片消息的目标会话的用户信息

*/

- (void)popupSendContactCardView:(RCCCUserInfo*)cardUserInfo

targetUserInfo:(RCCCUserInfo*)targetUserInfo;

如果是发送到群组会话,调用:

/**

选中通讯录中的某个人,点击确定将名片发送到群组会话的回调方法

@param cardUserInfo 选中人的用户信息

@param targetGroupInfo 名片消息的目标会话的群组信息

*/

- (void)popupSendContactCardView:(RCCCUserInfo*)cardUserInfo

targetGroupInfo:(RCCCGroupInfo*)targetGroupInfo;

传入相应的用户信息和群组信息。

4,名片消息的点击事件处理,需要在RCConversationviewController的子类中重写

- (void)didTapMessageCell:(RCMessageModel *)model

方法,并对model里面的消息体进行判断处理

例如:

- (void)didTapMessageCell:(RCMessageModel *)model {

[super didTapMessageCell:model];

if ([model.content isKindOfClass:[RCContactCardMessage class]]) {

//用户点击了名片消息,app做相关处理

}

}

常见问题:

名片消息的头像为默认的蓝色头像,或者名片消息的用户名称为user<>的样式:

先检查一下消息体内部的数据是不是有效的;

另外调用RCIM的getUserInfoCache方法从SDK缓存中获取该用户的信息,看看SDK内部缓存中的该用户信息是不是有效的