iOS名片消息

iOS名片消息的实现
发布时间: 2017-04-24 12:09

回答:

说明:

名片消息,用户可以自定义,也可以直接使用RongContactCard.framework。

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

集成步骤:

1,将RongContactCard.framework添加到项目中(可以在sealtalk源码中找到该framework,官网SDK下载页面可以找到sealtalk源码下载链接)

2,添加编译参数 -ObjC (注意‘O’和‘C’是大写)

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

3.1 使用SDK默认的通讯录

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

3.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内部缓存中的该用户信息是不是有效的


我对此仍有疑问!继续追问