【澳门葡京备用网址】0与融云IMKIT开采难题,聊天分界面

 原官方网址文书档案方案如下,在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];

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

IMKit 是融云 SDK
的基本特色之1。融云将即时通信产品中最复杂的对话列表、聊天窗口、音信内容显示、会话设置等功用封装为组件,通过简单的代码,就足以直接将以上分界面集成到App
产品中,省去多量的费用调节和测试时间。融云同时支持标准最充足的自定义分界面组件效率,大家得以本着本人界面须求自由设计开辟。

   //重写RCConversationListViewController的onSelectedTableRow事件

   //重写RCConversationListViewController的onSelectedTableRow事件

return YES;

一.1.二:融云 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!) {

点击列表 继承HavalCConversationViewController

-(void)way

一.壹.叁:融云 Call 分界面组件 – RongCloud Call基特

CallKit 是融云音摄像通话成效的 UI 分界面 SDK。(基于罗恩gCloud
CallLib)包涵了单人、多人音摄像通话的分界面包车型客车各类地方和功力。能够高速的集成
CallKit 来兑现增长的音录制通话界面,并开始展览 UI 定制开拓。同时开源了
CallKit,您能够依据你的内需去行使。

        //张开会话分界面

        //张开会话分界面

{

一.一.4:融云 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)

{

1.二.二:手动导入 SDK 并团结管理注重库

    }

    }

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

一.三:融云的报到

//obj 文件中的定义

//obj 文件中的定义

[[RCIM sharedRCIM] setUserInfoDataSource:self];

一.三.1:登陆格局: appKey  从融云开采者平台成立应用后拿走到的App Key,这么些App Key必须和服务端保持1致。不然上边包车型大巴token验证通不过。

[[RCIM sharedRCIM] initWithAppKey:RONGCLOUNDAPP_KEY];
//初步化融云SDK,在APP起始化的时候必须走那么些主意。

 –
(void)onSelectedTableRow:(RCConversationModelType)conversationModelType

 –
(void)onSelectedTableRow:(RCConversationModelType)conversationModelType

}

壹.三.二:登陆方法:Token令牌登录格局 注: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)

【澳门葡京备用网址】0与融云IMKIT开采难题,聊天分界面。一.3.三 :登入前所需做的事务(首若是KoleosCIM 这一个单例类的部分艺术 用来安装某个全局变量)

//全局的导航开关字体颜色

[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;

{

 1.四:轻松达成聊天功效(不关乎业务逻辑和成品供给)

 

 

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

一.肆.一:承继大概运行大切诺基CConversationListViewController那一个调控器就能够展开聊天列表

 //成立试图 直接跳转

 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那几个页面就足以张开聊天页面

//新建二个聊天会话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  勘误后的

swift3.0  改进后的

}

 2:融云集成进阶

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

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

tokenIncorrect:^{

 二.一 :遗留难题

在率先个级次聊天的时候,你会意识在拉扯列表分界面只好显示出未读新闻和未读新闻的数据以及时光。聊天人的真名和头像却是看不见的。

原因是因为:融云自身作为IM达成的工具,不做那一个数据的传导和保存(猜想:一,究竟须求耗流量,能省则省。2,不参加到app逻辑,须求太多满意不断)。所以那七个基本数据的仓库储存,呈现和跟新落就自然的达成了大家APP自个儿随身(包蕴中期产品需要自定义UI数据的显示,—后边那么些主题素材提到到自定义聊天列表了,不在那里商量了)。

    {

    {

//token过期只怕不得法。

2.2:消除方案

地点难题的来源于是头像和姓名那个数量从哪儿来?
分明必须用接口从大家分甘共苦服务器去赢得
,不过思考到无法屡屡呼吁接口调一样数据
,所以APP必须树立数据库,把宗旨音信囤积到地头。为了方便管理和扩张可读性,在项目中本身成立WMGL450CDataManager文件来管理数据存款和储蓄难点。(其实融云当地是做了温馨的数据库,可是不提须要给大家方法。)

单例类的创始

+(WMRCDataManager *) shareManager;

 //userInfoDataSource的代办回调

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

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

澳门葡京备用网址 1

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

    //

    //

//如果设置了token限期并且token过期,请重新请求你的服务器获取新的token

 二.叁:延伸新主题素材

这么做的害处:如若对方刷新新闻,而前者已经缓存了音信,此时不会重复网络请求,导致数据跟新不如时。

焚薮而田方案:依据切磋QQ和微信开掘他们的多少跟新是在进入聊天页面也许查看他们的消息的时候。所以暂定化解办法是,在每二回进入聊天页面时候获得一下对方最新消息。然后跟新地点数据库数据。(弊端:调用接口的次数依旧广大。从质量上讲不成立。可是我们的产品临时髦未那方面包车型客车需求,所以没做)

    }

    }

//若是没有设置token有效期却提醒token错误,请检查你客户端和服务器的appkey是或不是合营,还有检查你收获token的流水生产线。

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

前言:每3个产品都有贰个和好风格和须求,所以融云的闲话列表的UI和聊天详细情形的UI基本上满足不断微脉的要求。那里自定义UI的兑现就很有不可或缺了。

NSLog(@”token错误”);

 3.一:聊天列表的UI的自定义

}];

三.一.一:我们项目中聊天列表WMConversationListViewController 是在继续卡宴CConversationListViewController视图的基础上成立的。那里有望你会问:为啥不协和写1个分界面,不合并他们的分界面?原因如下:固然我们的视图突显退换了,然而依旧亟待运用那个分界面包车型地铁基础代谢逻辑(绝对来讲,专门的学业量小,作用高)。

自定义列表cell需求调用上边多少个点子

 将要加载列表数据源的回调,这几个办法很必尽管1个转换数据类型的效应,起桥接功用

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

@return        修改后的数据源(成分为CR-VCConversationModel对象)

@discussion
您能够在回调中期维修改、加多、删除数据源的元一向定制展现的始末,会话列表会依据你回去的修改后的数据源进行显示。

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

-(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个转移的效应,能够把钦赐的一类信息转换为自定义信息类型。举例:把单聊类型转化为自定义类型。

三.1.3:然后在cellForRowAtIndexPath方法中平昔,创设cell。然后给cell上的控件赋值。(那里的数据从哪里来?)那一年就起来调用WM昂CoraCDataManager
类的getUserInfoWithUserId那么些艺术从本地获取数据,(那里当地如若未有数量,作者会从服务接口去拿,然后缓存到地头,那样就不要么一回都调用接口,给服务端怎成压力了。)

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

三.一.4:数据展示完了,我们直接调用heightForRowAtIndexPath的法子把cell的高展现出来。

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

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

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

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

自此自定义聊天列表已经依据要求满意大家微脉的供给。

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

那一块项目上一时半刻还未兑现。专擅已经走通了轻便新闻的自定义。

3.2.1自定义音信类—WM途睿欧CRichMessage 必须继承与凯雷德CMessageContent
。那样这一条音信才会储并计入未读消息数。

//声美素佳儿(Friso)个申明

#define    WMRCRichMessageTypeIdentifier @”RCD:WMRichMsg”

三.二.二 在融云注册从前先挂号音信类型(申明此类的留存)

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

//RCDTestMessage

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

三.贰.三自定义cell—WMRAV4CRichMessageCell 必须承接与奥迪Q3CMessageCell
。那样那cell才干展现用户新闻和内容的音讯。而且那类cell在注册时候必须和BMWX五CDTestMessage新闻举行绑定。如下:

[self registerClass:[RCDTestMessageCell class]
forCellWithReuseIdentifier:RCDTestMessageTypeIdentifier];

3.二.4参考聊天列表页面UI的自定义 落成以下多个点子

挂号自定义音讯的Cell

@param cellClass  自定义音信的类,该自定义务消防队息供给后续于PRADOCMessageContent

@param identifier  自定义消息Cell的绝无仅有标示符

@discussion
聊天分界面在突显时必要通过identifier唯1标示来拓展Cell重用,以增强质量。

我们提议你在identifier中增加前缀,请勿使用”rc”前缀的字符串,防止与融云内置新闻的Cell争持。

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

自定义音讯Cell展现的回调

@param collectionView  当前CollectionView

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

@return                自定义音信须要彰显的Cell

@discussion
自定义新闻1经急需出示,则必须先通过PRADOCIM的registerMessageType:注册该自定义音信类型,

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

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

cellForItemAtIndexPath:(NSIndexPath *)indexPath;

自定义新闻Cell突显的回调

@param collectionView          当前CollectionView

@param collectionViewLayout    当前CollectionView Layout

@param index帕特h             
该Cell对应的信息Cell数据模型在数据源中的索引值

@return                        自定义音讯Cell要求呈现的中度

@discussion
自定义新闻一经急需出示,则必须先通过讴歌RDXCIM的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);

}

客服分界面,承袭 PRADOCConversationListViewController

[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];

}

相关文章

发表评论

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

*
*
Website