聊天分界面,0与融云IMKIT开垦难点

By admin in 4858.com on 2019年4月23日

 原官方网站文书档案方案如下,在swift叁.0的情事下出现 override func onSelectedTableRow  Method does not
override any method from its superclass

 原官方网站文书档案方案如下,在swift三.0的情景下出现 override func onSelectedTableRow  Method does not
override any method from its superclass

self.window.rootViewController = [[UINavigationController alloc]
initWithRootViewController:[[ZHUViewController alloc]init]];

 一.一:融云的分类(简单介绍)

那是因为swift三.0 有好多改换,要求改变下onSelectedTableRow参数。

那是因为swift3.0 有众多改观,要求改造下onSelectedTableRow参数。

[self way];

1.1.一:融云 IM 分界面组件 – 罗恩gCloud IMKit

IMKit 是融云 SDK
的中坚特色之壹。融云将即时通信产品中最复杂的对话列表、聊天窗口、音信内容呈现、会话设置等功效封装为组件,通过轻巧的代码,就可以直接将上述分界面集成到App
产品中,省去多量的开销调节和测试时间。融云同时支持标准最充足的自定义分界面组件功效,我们能够针对本身分界面要求自由设计开辟。

   //重写RCConversationListViewController的onSelectedTableRow事件

   //重写RCConversationListViewController的onSelectedTableRow事件

return YES;

一.一.②:融云 IM 通信才具库 – 罗恩gCloud IMLib

IMLib 是不含分界面包车型地铁底子 IM
通信才能库,封装了通讯本领和对话、音信等对象。引用到 App
工程中后,要求和睦达成 UI 分界面,相对较轻量,适用于对 UI
有较高订制供给的开荒者。

    override func onSelectedTableRow(conversationModelType:
RCConversationModelType, conversationModel model: RCConversationModel!,
atIndexPath indexPath: NSIndexPath!) {

    override func onSelectedTableRow(conversationModelType:
RCConversationModelType, conversationModel model: RCConversationModel!,
atIndexPath indexPath: NSIndexPath!) {

点击列表 承袭福特ExplorerCConversationViewController

-(void)way

1.一.三:融云 Call 分界面组件 – 罗恩gCloud CallKit

CallKit 是融云音录制通话功效的 UI 分界面 SDK。(基于罗恩gCloud
CallLib)包罗了光杆司令、几人音录像通话的分界面包车型客车各样气象和效益。能够火速的集成
CallKit 来贯彻拉长的音录制通话分界面,并打开 UI 定制开辟。同时开源了
CallKit,您能够依赖你的内需去选择。

        //张开会话分界面

        //张开会话分界面

{

一.1.四:融云 Call 通信工夫库 – 罗恩gCloud CallLib

        let chat = RCConversationViewController(conversationType:
model.conversationType, targetId: model.targetId)

        let chat = RCConversationViewController(conversationType:
model.conversationType, targetId: model.targetId)

[[RCIM sharedRCIM] initWithAppKey:@”qd46yzrfqdi6f”];

1.2:融云 SDK的导入

        chat.title = “想显示的对话标题”

        chat.title = “想体现的对话标题”

[[RCIM sharedRCIM]
connectWithToken:@”Ddoz6mf/VrWFN1AAb4i5E+bFt42+r8+iw8HrsuR8LLmQVFj/48/gjl1hZIgju/d7Pi8ZjtcnWKjidBkoRXEuzA==” 
success:^(NSString *userId)

一.二.1:通过 CocoaPods 导入管理重视库(一般提出选择那个,不用手动管理注重库,并且进级有利于)

        self.navigationController?.pushViewController(chat, animated:
true)

        self.navigationController?.pushViewController(chat, animated:
true)

聊天分界面,0与融云IMKIT开垦难点。{

一.二.二:手动导入 SDK 并团结管理正视库

    }

    }

NSLog(@”登录成功。当前报到的用户ID:%@”, userId);

1.叁:融云的记名

//obj 文件中的定义

//obj 文件中的定义

[[RCIM sharedRCIM] setUserInfoDataSource:self];

1.叁.一:登陆形式: appKey  从融云开拓者平台创立应用后获取到的App Key,这一个App Key必须和服务端保持1致。不然上面包车型地铁token验证通可是。

[[RCIM sharedRCIM] initWithAppKey:RONGCLOUNDAPP_KEY];
//早先化融云SDK,在应用软件初阶化的时候必须走这么些主意。

 –
(void)onSelectedTableRow:(RCConversationModelType)conversationModelType

 –
(void)onSelectedTableRow:(RCConversationModelType)conversationModelType

}

1.三.二:登六方法:Token令牌登6方式 注:token是从大家友好服务器获取(属于服务与融云的交互)

[[RCIM sharedRCIM] connectWithToken:loginModel.RongCloudToken
success:^(NSString *userId) {

     } error:^(RCConnectErrorCode status) {

         NSLog(@”登入的错误码为:%ld”, (long)status);

    } tokenIncorrect:^{

        NSLog(@”token错误”);

    }];

     conversationModel:(RCConversationModel *)model

     conversationModel:(RCConversationModel *)model

error:^(RCConnectErrorCode status)

一.三.三 :登入前所需做的事务(首借使福睿斯CIM 这些单例类的有的方法 用来安装有个别全局变量)

//全局的领航按键字体颜色

[RCIM sharedRCIM].globalNavigationBarTintColor = [UIColor
blackColor];

//聊天分界面中呈现的头像大小

‘[RCIM sharedRCIM].globalMessagePortraitSize = CGSizeMake(46, 46);

 [RCIM sharedRCIM].globalMessageAvatarStyle =
RC_USER_AVATAR_CYCLE;

//聊天分界面中彰显的头像形状,矩形恐怕圆形

 [RCIM
sharedRCIM].globalConversationAvatarStyle=RC_USER_AVATAR_CYCLE;

//设置接收新闻代理

 [RCIM sharedRCIM].receiveMessageDelegate=self;

  [RCIM sharedRCIM].userInfoDataSource=self;

//设置IMKit连接情状的监听器

[RCIM sharedRCIM].connectionStatusDelegate=self;

     atIndexPath:(NSIndexPath *)indexPath;

     atIndexPath:(NSIndexPath *)indexPath;

{

 壹.四:轻易完结聊天成效(不关乎业务逻辑和制品要求)

 

 

NSLog(@”登入的错误码为:%d”, (int)status);

1.四.壹:承袭或然运转中华VCConversationListViewController那么些调控器就能够展开聊天列表

 //创设试图 直接跳转

 WMConversationListViewController
*recommendNewVC=[[WMConversationListViewController alloc]init];

            //recommendNewVC.xiaoxilx=model.XIAOXILX;

             [self.navigationController
showViewController:recommendNewVC sender:nil];

 //在计算开首化的时候 设置在列表中要求展现的对话类型
(微脉项目只有单聊)

     [self
setDisplayConversationTypes:@[@(ConversationType_PRIVATE),

                                     
 @(ConversationType_DISCUSSION),

                                       
 @(ConversationType_CHATROOM),

                                         @(ConversationType_GROUP),

                                       
 @(ConversationType_APPSERVICE),

                                       
 @(ConversationType_SYSTEM)]];

一.四.二:承袭或许运营牧马人CConversationViewController这些页面就能够展开聊天页面

//新建2个聊天会话View Controller对象

RCConversationViewController *chat = [[RCConversationViewController
alloc]init];

 //设置会话的品种,如单聊、斟酌组、群聊、聊天室、客服、公众服务会话等

 chat.conversationType = ConversationType_PRIVATE;

//设置会话的靶子会话ID。(单聊、客服、公众服务会话为对方的ID,切磋组、群聊、聊天室为对话的ID)

 chat.targetId = @”targetIdYouWillChatIn”;

 //设置聊天会话分界面要展现的标题

 chat.title = @”想呈现的对话标题”;

 //呈现聊天会话分界面

 [self.navigationController pushViewController:chat animated:YES];

小结:到这边截止,大家就能够落成单纯意义上的贯彻聊天成效。

swift三.0  更正后的

swift三.0  修正后的

}

 贰:融云集成进阶

    override func onSelectedTableRow(_ conversationModelType:
RCConversationModelType, conversationModel model: RCConversationModel!,
at indexPath: IndexPath!)

    override func onSelectedTableRow(_ conversationModelType:
RCConversationModelType, conversationModel model: RCConversationModel!,
at indexPath: IndexPath!)

tokenIncorrect:^{

 2.壹 :遗留难题

在率先个级次聊天的时候,你会意识在闲谈列表分界面只好突显出未读音信和未读新闻的数额以及时光。聊天人的姓名和头像却是看不见的。

案由是因为:融云自身作为IM达成的工具,不做这一个多少的传输和封存(估量:1,毕竟须要耗流量,能省则省。2,不插足到app逻辑,须求太多满意不断)。所以这一个着力数据的积累,呈现和跟新落就自然的达到了小编们APP本身随身(包括后期产品须求自定义UI数据的显示,—后边那几个标题关乎到自定义聊天列表了,不在那里商讨了)。

    {

    {

//token过期恐怕不得法。

2.二:解决方案

地点难点的来源于是头像和姓名这一个数据从哪个地方来?
分明必须用接口从大家患难与共服务器去赢得
,不过挂念到无法反复呼吁接口调同样数据
,所以应用程式必须建立数据库,把宗旨音讯囤积到本地。为了方便管理和充实可读性,在项目中本人创设WM宝马7系CDataManager文件来管理数据存款和储蓄难题。(其实融云本地是做了和谐的数据库,可是不提供给给大家方法。)

单例类的创导

+(WMRCDataManager *) shareManager;

 //userInfoDataSource的代理回调

– (void)getUserInfoWithUserId:(NSString*)userId completion:(void
(^)(RCUserInfo*))completion;

微脉数据存款和储蓄机制如图:

4858.com 1

微脉数据存款和储蓄机制图

    //

    //

//若是设置了token限制时间并且token过期,请重新请求你的服务器获取新的token

 二.三:延伸新主题材料

如此那般做的坏处:假如对方刷新新闻,而前者已经缓存了音信,此时不会另行互连网请求,导致数据跟新不比时。

杀鸡取卵方案:依照钻探QQ和微信开采他们的数量跟新是在进入聊天页面只怕查看他们的信息的时候。所以暂定化解办法是,在每2次跻身聊天页面时候获得一下对方最新信息。然后跟新鸿基土地资金财产方数据库数据。(弊端:调用接口的次数仍旧广大。从品质上讲不客观。不过我们的产品暂且髦未这下边的必要,所以没做)

    }

    }

//假设未有设置token限制期限却提醒token错误,请检查你客户端和服务器的appkey是不是协作,还有检查你获得token的流程。

3:聊天列表UI和聊天UI的自定义

序言:每1个成品都有三个要好风格和要求,所以融云的闲谈列表的UI和拉拉扯扯详细情形的UI基本上满足不断微脉的急需。那里自定义UI的达成就很有供给了。

NSLog(@”token错误”);

 三.1:聊天列表的UI的自定义

}];

3.1.一:大家项目中聊天列表WMConversationListViewController 是在继续HavalCConversationListViewController视图的基础上创建的。那里有希望你会问:为啥不和谐写二个分界面,不合并他们的分界面?原因如下:固然大家的视图显示改换了,但是照旧亟待运用这一个界面包车型地铁基础代谢逻辑(绝对来说,职业量小,效能高)。

自定义列表cell要求调用下边两个艺术

 将要加载列表数据源的回调,那一个形式很必借使3个退换数据类型的效能,起桥接效能

@param dataSource 
将在加载的列表数据源(成分为福特ExplorerCConversationModel对象)

@return        修改后的数据源(成分为牧马人CConversationModel对象)

@discussion
您能够在回调中期维修改、增添、删除数据源的成分来定制展现的始末,会话列表会依据你回到的更改后的数据源进行呈现。

数据源中存放的要素为会话Cell的数据模型,即中华VCConversationModel对象。

-(NSMutableArray *)willReloadTableData:(NSMutableArray
*)dataSource{

for (int i=0; i<dataSource.count ; i++){

RCConversationModel *model = dataSource[i];

if(model.conversationType == ConversationType_PRIVATE){

// 会话Cell数据模型的显示档期的顺序 转化为自定义类型

model.conversationModelType =
RC_CONVERSATION_MODEL_TYPE_CUSTOMIZATION;

}

}

return dataSource;

}

自定义会话Cell呈现时的回调

-(RCConversationBaseCell *)rcConversationListTableView:(UITableView
*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

//得到数据源

RCConversationModel *model =
self.conversationListDataSource[indexPath.row];

//注册cell

WMRCChatListCell *cell = (WMRCChatListCell *)[[WMRCChatListCell
alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@”WMRCChatListCell”];

//中间cell上控件的赋值这里大概

return cell;

}

自定义会话Cell突显时的回调

-(CGFloat)rcConversationListTableView:(UITableView *)tableView
heightForRowAtIndexPath:(NSIndexPath *)indexPath{

//返回cell高度

return kCellHeight;

}

左滑删除自定义会话时的回调

– (void)rcConversationListTableView:(UITableView *)tableView

commitEditingStyle:(UITableViewCellEditingStyle)editingStyle

forRowAtIndexPath:(NSIndexPath *)indexPath {

‘[[RCIMClient sharedRCIMClient]
removeConversation:model.conversationType targetId:model.targetId];

”  [[RCIMClient
sharedRCIMClient]clearMessages:ConversationType_PRIVATE
targetId:model.targetId];

}

三.1.二:第一个法子很要紧。他是3个改造的职能,能够把内定的1类音讯调换为自定义音信类型。举例:把单聊类型转化为自定义类型。

三.一.三:然后在cellForRowAtIndexPath方法中平昔,创设cell。然后给cell上的控件赋值。(那里的多寡从哪里来?)那一年就起来调用WM奥迪Q5CDataManager
类的getUserInfoWithUserId这几个方法从位置获取数据,(那里本地假如未有数量,小编会从服务接口去拿,然后缓存到本地,这样就不用么三回都调用接口,给服务端怎成压力了。)

WMRCChatListCell *cell = (WMRCChatListCell *)[[WMRCChatListCell
alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@”WMRCChatListCell”];

3.一.四:数据展现完了,大家从来调用heightForRowAtIndexPath的办法把cell的高展现出来。

三.一.五:commit艾德itingStyle用来左滑删除单个会话列表的,那里有二种删除意思:一:从列表中删去这一个记录,可是聊天音讯并不删除依旧在该地存款和储蓄。

二:列表删除并把聊天记录一并剔除。

[[RCIMClient sharedRCIMClient]
removeConversation:model.conversationType targetId:model.targetId];

[[RCIMClient
sharedRCIMClient]clearMessages:ConversationType_PRIVATE
targetId:model.targetId];

自此自定义聊天列表已经根据须要满意我们微脉的供给。

三.二:聊天页面UI的自定义

这一块项目上权且还未落实。私下已经走通了简单音讯的自定义。

三.2.一自定义新闻类—WMGL450CRichMessage 必须延续与猎豹CS6CMessageContent
。那样这一条消息才会储并计入未读音讯数。

//声Bellamy(Bellamy)个申明

#define    WMRCRichMessageTypeIdentifier @”RCD:WMRichMsg”

三.贰.2 在融云注册从前先挂号消息类型(注明此类的存在)

// 注册自定义测试新闻 是音信类型

//RCDTestMessage

 [[RCIM sharedRCIM] registerMessageType:[RCDTestMessage class]];

叁.2.3自定义cell—WMLX570CRichMessageCell 必须再三再四与途观CMessageCell
。那样那cell本领显得用户音讯和内容的新闻。而且那类cell在注册时候必须和昂CoraCDTestMessage音信实行绑定。如下:

[4858.com,self registerClass:[RCDTestMessageCell class]
forCellWithReuseIdentifier:RCDTestMessageTypeIdentifier];

三.2.肆参考聊天列表页面UI的自定义 完成以下八个措施

挂号自定义音讯的Cell

@param cellClass  自定义音讯的类,该自定义信息供给几次三番于ENVISIONCMessageContent

@param identifier  自定义新闻Cell的绝无仅有标示符

@discussion
聊天分界面在显示时需求通过identifier唯一标示来张开Cell重用,以增长品质。

小编们提出您在identifier中增添前缀,请勿使用”rc”前缀的字符串,防止与融云内置消息的Cell顶牛。

– (void)registerClass:(Class)cellClass
forCellWithReuseIdentifier:(NSString *)identifier;

自定义音讯Cell展现的回调

@param collectionView  当前CollectionView

@param indexPath      该Cell对应的音讯Cell数据模型在数据源中的索引值

@return                自定义务消防队息须求呈现的Cell

@discussion
自定义新闻1经急需体现,则必须先通过卡宴CIM的registerMessageType:注册该自定义新闻类型,

并在聊天界面中经过registerClass:forCellWithReuseIdentifier:注册该自定义音信的Cell,不然将此回调将不会被调用。

– (RCMessageBaseCell
*)rcConversationCollectionView:(UICollectionView *)collectionView

cellForItemAtIndexPath:(NSIndexPath *)indexPath;

自定义新闻Cell展现的回调

@param collectionView          当前CollectionView

@param collectionViewLayout    当前CollectionView Layout

@param indexPath             
该Cell对应的音信Cell数据模型在数据源中的索引值

@return                        自定义音信Cell要求出示的冲天

@discussion
自定义消息壹经急需出示,则必须先通过索罗德CIM的registerMessageType:注册该自定义务消防队息类型,

并在聊天分界面中经过registerClass:forCellWithReuseIdentifier:注册该自定义音讯的Cell,不然将此回调将不会被调用。

– (CGSize)rcConversationCollectionView:(UICollectionView
*)collectionView

layout:(UICollectionViewLayout *)collectionViewLayout

sizeForItemAtIndexPath:(NSIndexPath *)indexPath;

4:总结

其三方接入,本人的难度有限,可是为了满意产品的逻辑去修改第三方的自己逻辑是最蛋疼的事体。化解难点的首要性是:看文书档案,看官方demo,多尝试。

}

– (void)getUserInfoWithUserId:(NSString *)userId

completion:(void (^)(RCUserInfo *userInfo))completion

{

if ([userId isEqualToString:@”30000001″])

{

RCUserInfo *userInfo = [[RCUserInfo alloc] init];

userInfo.userId = userId;

userInfo.name = @”阿辉”;

userInfo.portraitUri =
@””;

return completion(userInfo);

}

return completion(nil);

}

客服分界面,继承 PAJEROCConversationListViewController

[super viewDidLoad];

// Do any additional setup after loading the view.

[self setDisplayConversationTypes:@[@(ConversationType_PRIVATE),

@(ConversationType_DISCUSSION),

@(ConversationType_CHATROOM),

@(ConversationType_GROUP),

@(ConversationType_APPSERVICE),

@(ConversationType_SYSTEM)]];

//设置须求将什么项目标对话在对话列表中聚合展现

[self setCollectionConversationType:@[@(ConversationType_DISCUSSION),

@(ConversationType_GROUP)]];

//重写RCConversationListViewController的onSelectedTableRow事件


(void)onSelectedTableRow:(RCConversationModelType)conversationModelType

conversationModel:(RCConversationModel *)model

atIndexPath:(NSIndexPath *)indexPath {

RCConversationViewController *conversationVC =
[[RCConversationViewController alloc]init];

conversationVC.conversationType = model.conversationType;

conversationVC.targetId = model.targetId;

conversationVC.title = @”想体现的对话标题”;

[self.navigationController pushViewController:conversationVC
animated:YES];

}

聊天分界面

此起彼伏与//四个调控器#import “LTViewController.h”#import
“LTTwoViewController.h”//库#import<RongIMKit/RongIMKit.h>//继承

#import “RCDCustomerServiceViewController.h”

//自个儿写的点子  视图将要可知时调用

-(void)viewWillAppear:(BOOL)animated

{

self.navigationController.navigationBar.hidden = NO;

}

//点击聊天分界面

– (IBAction)LiaoTian:(id)sender {

RCConversationViewController *chat = [[RCConversationViewController
alloc] init];

//设置会话的项目,如单聊、研讨组、群聊、聊天室、客服、公众服务会话等

chat.conversationType = ConversationType_PRIVATE;

//设置会话的目的会话ID。(单聊、客服、公众服务会话为对方的ID,研究组、群聊、聊天室为对话的ID)

chat.targetId = @”30000001″;

//设置聊天会话分界面要呈现的标题

chat.title = @”想展示的对话标题”;

//突显聊天会话分界面

[self.navigationController pushViewController:chat animated:YES];

}

//点击列表分界面

– (IBAction)DianJi:(id)sender {

LTTwoViewController *lttwo = [[LTTwoViewController alloc] init];

[self.navigationController pushViewController:lttwo animated:YES];

}

//机器人

– (IBAction)JQR:(id)sender {

RCDCustomerServiceViewController *chatService =
[[RCDCustomerServiceViewController alloc] init];

#define SERVICE_ID @”KEFU148292606720649″

chatService.conversationType = ConversationType_CUSTOMERSERVICE;

chatService.targetId = SERVICE_ID;

chatService.title = @”客服”;

//chatService.csInfo = csInfo;
//用户的详细消息,此数据用于上传用户音信到客服后台,数据的nickName和portraitUrl必须填写。(近期该字段一时没用到,客服后台显示的用户信息是你拿走token时传的参数,之后会用到)

[self.navigationController pushViewController :chatService
animated:YES];

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有