一、 融云設(shè)置頭像和昵稱
1. 給自己設(shè)置頭像和昵
給自己設(shè)置頭像和昵稱的時(shí)候,一般都是在所有要要登錄融云的地方(我公司項(xiàng)目有幾種登錄方式,每一種登錄成功后,才可以連接融云,所以有幾個(gè)地方調(diào)用到),登錄成功后就給自己設(shè)置頭像和昵稱的。
// 連接融云
[[RCIM sharedRCIM] connectWithToken:@"LqWuHyw639I+N/NxLK1vgd364tkAAG9LQ/noLNtW9iD4dLdnOfiMK/5rEO5+6+EyUkCYC8DW6mAOpABTN7DJlB4S8yEP3s3V" success:^(NSString *userId) {
NSLog(@"登陸成功。當(dāng)前登錄的用戶ID:%@", userId);
[[RCIM sharedRCIM] setUserInfoDataSource:self];
RCUserInfo *myUser = [[RCUserInfo alloc]init];
myUser.userId = @"#123456";
myUser.portraitUri = @"http://p2.wmpic.me/article/2014/09/26/1411703269_MyeEjKTf.jpeg";
myUser.name = @"自己";
[RCIM sharedRCIM].currentUserInfo = myUser;
} error:^(RCConnectErrorCode status) {
NSLog(@"登陸的錯(cuò)誤碼為:%ld", status);
} tokenIncorrect:^{
//token過期或者不正確。
//如果設(shè)置了token有效期并且token過期,請(qǐng)重新請(qǐng)求您的服務(wù)器獲取新的token
//如果沒有設(shè)置token有效期卻提示token錯(cuò)誤,請(qǐng)檢查您客戶端和服務(wù)器的appkey是否匹配,還有檢查您獲取token的流程。
NSLog(@"token錯(cuò)誤");
}];
2. 給其他人設(shè)置頭像和昵稱
融云給了一個(gè)代理讓我們給相應(yīng)的用戶ID賦值頭像,這個(gè)代理是只要有新的用戶ID給你發(fā)消息,就會(huì)走一次的,數(shù)據(jù)源是全局的只需要在一個(gè)地方賦值,其他地方就不用賦值了,我這里是在Appdelegate做的
①添加代理
@interface AppDelegate ()<RCIMUserInfoDataSource>
②設(shè)置代理
[[RCIM sharedRCIM] setUserInfoDataSource:self];
③實(shí)現(xiàn)代理
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion {
if ([userId isEqualToString:@"#11111"])
{
RCUserInfo *userInfo = [[RCUserInfo alloc]init];
userInfo.userId = userId;
userInfo.name = @"小美";
userInfo.portraitUri = @"http://www.hinews.cn/pic/0/16/23/56/16235619_993606.jpg";
return completion(userInfo);
}
else if([userId isEqualToString:@"#22222"])
{
RCUserInfo *otherUser = [[RCUserInfo alloc]init];
otherUser.userId = userId;
otherUser.portraitUri = @"http://img.jf258.com/uploads/2013-07-13/064651670.jpg";
otherUser.name = @"大頭";
return completion(otherUser);
}
else if ([userId isEqualToString:@"#33333"])
{
RCUserInfo *otherUser = [[RCUserInfo alloc]init];
otherUser.userId = userId;
otherUser.portraitUri = @"http://p2.wmpic.me/article/2014/09/26/1411703269_MyeEjKTf.jpeg";
otherUser.name = @"客服1";
return completion(otherUser);
}
//上面三組是測(cè)試用的,實(shí)際開發(fā)的時(shí)候應(yīng)該是后臺(tái)提供一條接口,傳入U(xiǎn)serid 能夠返回對(duì)應(yīng)Userid 的昵稱和頭像
[manager POST:kGetUserBaseInfo parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSDictionary *repData = (NSDictionary *)responseObject;
UCUNewBaseClass *baseData = [UCUNewBaseClass modelObjectWithDictionary:repData];
if ([baseData.status isEqualToString:xRequestStatusOK])
{
RCUserInfo *userInfo = [[RCUserInfo alloc]init];
userInfo.userId = baseData.data.dataIdentifier;
userInfo.name = baseData.data.nickName;
userInfo.portraitUri = baseData.data.profilePhoto;
// 刷新融云對(duì)應(yīng)用戶信息 ,一定要記得寫上這句代碼,否則無法刷新,因?yàn)槭钱惒降? [[RCIM sharedRCIM] refreshUserInfoCache:userInfo withUserId:userId];
return completion(userInfo);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
二、所有未讀消息的顯示
不管你集成多簡(jiǎn)單的單聊都會(huì)跟著要集成一個(gè)會(huì)話列表的,有了會(huì)話列表就要做所有的對(duì)話未讀的信息數(shù)量,會(huì)話列表就不用多說了,看官網(wǎng)就可以集成,現(xiàn)在主要說說如何顯示未讀信息數(shù)。
從官網(wǎng)的文檔上可以知道,通過下面這個(gè)方法可以獲取所有的未讀消息數(shù),是動(dòng)態(tài)的,
int totalUnreadCount = [[RCIMClient sharedRCIMClient] getTotalUnreadCount]
獲得的未讀消息數(shù),什么時(shí)候去刷新未讀消息數(shù)呢,SDK 提供了兩個(gè)代理分別是代理①和代理②,可以監(jiān)聽什么時(shí)候有消息過來。者兩個(gè)代理長(zhǎng)得很像,如果用錯(cuò)了,將會(huì)導(dǎo)致嚴(yán)重的 bug , 會(huì)話界面用戶將不能主動(dòng)接受消息,如果你是集成的 IMKit 的東西,就不要用代理②,一定要用代理①,一定要用代理①,一定要用代理①?。?!
代理①
<RCIMReceiveMessageDelegate>
[[RCIM sharedRCIM] setReceiveMessageDelegate:self];
- (void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left {
// 這個(gè)代理是在分線層的, 刷新數(shù)據(jù)要在主線程進(jìn)行哦,我的工程未讀消息是在一個(gè) cell 上的,所以我刷新數(shù)據(jù)就可以了。
dispatch_async(dispatch_get_main_queue(), ^{
[self.mainTableView reloadData];
});
}
代理②
<RCIMClientReceiveMessageDelegate>
[[RCIMClient sharedRCIMClient] setReceiveMessageDelegate:self object:nil];
- (void)onReceived:(RCMessage *)message left:(int)nLeft object:(id)object {
}
三、 集成客服
官網(wǎng)寫的很簡(jiǎn)單,我就按照官網(wǎng)的寫了,可是不管是機(jī)器人,還是人工的按鈕,為啥都不會(huì)跳出來呢,客服ID 也沒有寫錯(cuò),原來是當(dāng)你去融云后臺(tái)開通客服后,至少要等上2個(gè)小時(shí)甚至是半天才能生效,生效之后你點(diǎn)擊聊天,就會(huì)有個(gè)蠢蠢的機(jī)器人跟你聊天了,當(dāng)你在客服后臺(tái)登錄賬號(hào)之后,即可以測(cè)試人工聊天啦
- (IBAction)serviceBtnClicked:(id)sender {
RCConversationViewController *conversationVC = [[RCConversationViewController alloc]init];
conversationVC.conversationType = ConversationType_CUSTOMERSERVICE;
#define SERVICE_ID @"KEFU152332895163221"
conversationVC.targetId = SERVICE_ID;
conversationVC.title = @"客服";
self.tabBarController.tabBar.hidden = YES;
[self.navigationController pushViewController:conversationVC animated:YES];
}