IM 即时通讯 (439)
Android (207)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (15)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (33)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (43)
iOS (167)
- SDK 导入 (9)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (25)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (3)
- 音视频 (4)
- 其他 (23)
Web (36)
Server (29)
iOS名片消息
回答:
说明:
名片消息,用户可以自定义,也可以直接使用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的RCCCContactViewControllerDelegate和RCCCGroupDataSource代理,并实现其代理方法,参考下面代码,建议在单例类中实现代理方法,保证整个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内部缓存中的该用户信息是不是有效的