項目中包含直播通訊聊天以及客服聊天功能,在這里我集成了融云即時通訊的sdk边苹,當(dāng)然了陵且,也碰到了相應(yīng)的坑點,在這里記錄一下个束。
1.導(dǎo)入sdk包
在這里我用的是cocoapods導(dǎo)入的慕购,簡單無污染,最重要的是不用配置任何環(huán)境變量茬底,舒服沪悲!
pod 'RongCloudIM/IMLib', '~> 2.8.3'
pod 'RongCloudIM/IMKit', '~> 2.8.3'
在這里一定要導(dǎo)入這兩個,再也不要只導(dǎo)入一個了阱表,因為IMLib負(fù)責(zé)通訊殿如,但是IMKit負(fù)責(zé)界面贡珊,如果以后需要添加新功能的話,IMKit是包含于IMLib的涉馁,最好兩個都導(dǎo)入门岔。
2.初始化
問題:我一開始初始化如下
[[RCIMClient sharedRCIMClient] initWithAppKey:RONGYUNAPPKEY];
后來改成了
[[RCDLive sharedRCDLive] initRongCloud:RONGYUNAPPKEY];
但是,如果項目里用到了界面的東西烤送,比如客服聊天這塊寒随,這樣初始化是無法自動更新消息的,所以要用到IMKit包的初始化
[[RCIM sharedRCIM] initWithAppKey:RONGYUNAPPKEY];
用IMKit包初始化帮坚,前臺接受消息默認(rèn)會有聲音妻往,關(guān)掉聲音如下
[[RCIM sharedRCIM] setDisableMessageAlertSound:YES];//關(guān)掉聲音
3.鏈接token
在這里用IMKit包方法連接token,其實用IMLib包貌似也是沒問題的试和,這里不贅述讯泣。
[[RCIM sharedRCIM] connectWithToken:token success:^(NSString *userId) {
JJLog(@"successtOKEN == %@",userId);
AccountModel *model = [AccountTool account];
model.RYUserID = userId;
[AccountTool saveAccount:model];
//登錄成功后,與融云建立連接阅悍,設(shè)置聊天人的屬性
RCUserInfo *user = [[RCUserInfo alloc]init];
user.userId = [AccountTool account].RYUserID;
// user.portraitUri = @"logo_red_ry";
user.portraitUri = [AccountTool account].portraitUri;
// user.name = @"大圣歸來";
user.name = [AccountTool account].name;
[RCIMClient sharedRCIMClient].currentUserInfo = user;
} error:^(RCConnectErrorCode status) {
} tokenIncorrect:^{
}];
4.融云即時通訊(直播聊天部分)
在這里判帮,可以直接去官網(wǎng)下載給的demo,基本上可以按照他上面的來寫溉箕,但是有一個問題是晦墙,demo上用的是IMLib包來接收消息的,這個時候肴茄,你在appdelegate中只有將融云初始化寫成
[[RCDLive sharedRCDLive] initRongCloud:RONGYUNAPPKEY];
才可以正常和別人聊天晌畅,否則永遠(yuǎn)只有你自己在聊天。
但是我們上面的初始化也說了寡痰,要照顧到以后還會有別的拓展性功能抗楔,所以我們沒有用到IMLib包,用了IMKit包的話拦坠,我們就要修改這里通訊接收消息的方法连躏。具體如下:
1.原demo中,在當(dāng)前聊天界面贞滨,設(shè)置了消息監(jiān)聽代理代碼如下
[[RCIMClient sharedRCIMClient]setRCConnectionStatusChangeDelegate:self];
現(xiàn)在要改成IMKit包中的監(jiān)聽代理,如下:
[[RCIM sharedRCIM] setConnectionStatusDelegate:self];
2.再更改了代理后入热,需要實現(xiàn)代理方法中的IMKit連接狀態(tài)的的監(jiān)聽器方法
將原demo中的
/**
* 連接狀態(tài)改變的回調(diào)
*
* @param status <#status description#>
*/
- (void)onConnectionStatusChanged:(RCConnectionStatus)status {
self.currentConnectionStatus = status;
}
修改成
- (void)onRCIMConnectionStatusChanged:(RCConnectionStatus)status {
self.currentConnectionStatus = status;
}
3.在當(dāng)前聊天界面中,找到注冊監(jiān)聽Notification的方法晓铆,原demo方法如下
- (void)registerNotification {
//注冊接收消息
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(didReceiveMessageNotification:)
name:RCDLiveKitDispatchMessageNotification
object:nil];
}
很明顯看到RCDLiveKitDispatchMessageNotification通知名是IMLib包中的東西勺良,所以要改成如下:
/**
* 注冊監(jiān)聽Notification
*/
- (void)registerNotification {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(didReceiveMessageNotification:)
name:RCKitDispatchMessageNotification
object:nil];
}
好了,其余的包括接收歷史消息骄噪,發(fā)送消息尚困,退出斷開連接的都用原dmeo中的即可,不用更改链蕊。
5.融云客服功能
融云客服功能用到的包就是IMKit包的內(nèi)容事甜,在這里界面的UI我們用到了demo中給的UI部分的代碼谬泌,由于demo中的代碼太多,在這里我單獨將我們需要的聊天界面代碼給抽了出來逻谦,點擊下載 掌实。然后直接貼上如下代碼即可
[[RCIM sharedRCIM] setReceiveMessageDelegate:self];
RCDCustomerServiceViewController *chatService = [[RCDCustomerServiceViewController alloc] init];
#define SERVICE_ID @"您在融云后臺開通的客服ID"
chatService.hidesBottomBarWhenPushed = YES;
chatService.conversationType = ConversationType_CUSTOMERSERVICE;
chatService.targetId = RONGYUNKEFUID;
chatService.title = @"客服服務(wù)";
RCCustomerServiceInfo *csInfo = [[RCCustomerServiceInfo alloc] init];
csInfo.nickName = [AccountTool account].name;
csInfo.portraitUrl = [AccountTool account].portraitUri;
chatService.csInfo = csInfo; //用戶的詳細(xì)信息,此數(shù)據(jù)用于上傳用戶信息到客服后臺跨跨,數(shù)據(jù)的nickName和portraitUrl必須填寫潮峦。(目前該字段暫時沒用到囱皿,客服后臺顯示的用戶信息是你獲取token時傳的參數(shù)勇婴,之后會用到)
[self.viewController.navigationController pushViewController :chatService animated:YES];
基本上沒有什么bug了。
再有什么問題嘱腥,可以去融云的知識庫中查詢一下耕渴。
總結(jié):其實融云最坑的不是代碼難易的問題,而是多種功能用的不同的包的問題齿兔,在這里由于項目中用到了這兩種包的東西橱脸,在這里碰到了坑,總結(jié)了一下分苇。寫的可能不是對每個人都有幫助添诉,如果你也贊同的話,請給我點個贊医寿,如果你有問題的話栏赴,可以留言告訴我。