1.appdelegate.m 遵循協議RCIMConnectionStatusDelegate+RCIMReceiveMessageDelegate
/*! 連接狀態監聽器: RCIMConnectionStatusDelegate
IMKit連接狀態的的監聽器
@discussion 設置IMKit的連接狀態監聽器,請參考RCIM的connectionStatusDelegate屬性。
@warning 如果您使用IMKit,可以設置並實現此Delegate監聽消息接收;
如果您使用IMLib,請使用RCIMClient中的RCIMClientReceiveMessageDelegate監聽消息接收,而不要使用此監聽器。
*/
/*!消息接收監聽器:RCIMReceiveMessageDelegate
IMKit消息接收的監聽器
@discussion 設置IMKit的消息接收監聽器請參考RCIM的receiveMessageDelegate屬性。
@warning 如果您使用IMKit,可以設置並實現此Delegate監聽消息接收;
如果您使用IMLib,請使用RCIMClient中的RCIMClientReceiveMessageDelegate監聽消息接收,而不要使用此監聽器。
1.1[[RCIM sharedRCIM] initWithAppKey:kRongYunAppKey];
// 登陸成功之後,建立容雲與服務器之間的關聯
[[RCIM sharedRCIM] setGlobalMessageAvatarStyle:RC_USER_AVATAR_CYCLE];
[[RCIM sharedRCIM] setGlobalConversationAvatarStyle:RC_USER_AVATAR_CYCLE];
[[RCIM sharedRCIM] setConnectionStatusDelegate:self];
[[RCIM sharedRCIM] setEnableMessageAttachUserInfo:YES];
if (iPhone6Plus) {
[RCIM sharedRCIM].globalConversationPortraitSize = CGSizeMake(56, 56);
} else {
[RCIM sharedRCIM].globalConversationPortraitSize = CGSizeMake(46, 46);
}
//設置用戶信息源和羣組信息源
//RCDDataSource 是用戶信息的提供者SDK需要通過您實現的用戶信息提供者,獲取用戶信息並顯示。
[RCIM sharedRCIM].userInfoDataSource = RCDDataSource;
//羣組信息提供者,SDK需要通過您實現的羣組信息提供者,獲取羣組信息並顯示。
[RCIM sharedRCIM].groupInfoDataSource = RCDDataSource;
//設置羣組內用戶信息源。如果不使用羣名片功能,可以不設置
[RCIM sharedRCIM].groupUserInfoDataSource = RCDDataSource;
//設置接收消息代理
[RCIM sharedRCIM].receiveMessageDelegate=self;
//token 從您服務器端獲取的token(用戶身份令牌)
if (token.length && userId.length && password.length) {
//當前登錄的用戶的用戶信息 與融雲服務器建立連接之後,應該設置當前用戶的用戶信息,用於SDK顯示和發送。_currentUserInfo
RCUserInfo *_currentUserInfo =
[[RCUserInfo alloc] initWithUserId:userId
name:userNickName
portrait:userPortraitUri];
[RCIM sharedRCIM].currentUserInfo = _currentUserInfo;
// 整個程序只調用一次
[[RCIM sharedRCIM] connectWithToken:token
success:^(NSString *userId) {
//與容雲服務器建立連接成功之後返回的當前用戶的id
NSLog(@"%@",userId);
}
error:^(RCConnectErrorCode status) {
}
tokenIncorrect:^{
NSLog(@"已過期");
}];
}
}
2.RCDDataSource 是用戶信息的提供者SDK需要通過您實現的用戶信息提供者,獲取用戶信息並顯示。RCDataSource類
#define RCDDataSource [RCDataSource shareInstance]
RCDDataSource 遵循三個協議RCIMUserInfoDataSource,RCIMGroupInfoDataSource,RCIMGroupUserInfoDataSource
#pragma mark - RCIMUserInfoDataSource
- (void)getUserInfoWithUserId:(NSString *)userId completion:(void (^)(RCUserInfo *))completion {
NSLog(@"getUserInfoWithUserId ----- %@", userId);
if (userId == nil || [userId length] == 0 )
{
RCUserInfo *user = [RCUserInfo new];
user.userId = userId;
user.portraitUri = @"";
user.name = @"";
completion(user);
return ;
}
if([userId isEqualToString:@"kefu114"])
{
RCUserInfo *user=[[RCUserInfo alloc]initWithUserId:@"kefu114" name:@"客服" portrait:@""];
completion(user);
return;
}
//開發者調自己的服務器接口根據userID異步請求數據
。。。。。。
}
#pragma mark - GroupInfoFetcherDelegate
- (void)getGroupInfoWithGroupId:(NSString *)groupId completion:(void (^)(RCGroup *))completion {
if (groupId.length == 0) {
return;
}
//開發者調自己的服務器接口根據groupId異步請求數據
。。。。。。
}
#pragma mark RCIMGroupUserInfoDataSource
/**
* 獲取羣組內的用戶信息。
* 如果羣組內沒有設置用戶信息,請注意:
1,不要調用別的接口返回全局用戶信息,直接回調給我們nil就行,SDK會自己巧用用戶信息提供者;
2一定要調用completion(nil),這樣SDK才能繼續往下操作。
*
* @param groupId 羣組ID.
* @param completion 獲取完成調用的BLOCK.
*/
- (void)getUserInfoWithUserId:(NSString *)userId inGroup:(NSString *)groupId completion:(void (^)(RCUserInfo *))completion {
completion(nil);
}
@end
3.聊天界面新建控制器 繼承 RCConversationViewController 就OK。
需要傳遞的屬性值conversationType(會話類型:單聊羣聊這種)+ 目標會話IDtargetId;
聊天界面遵循RCMessageCellDelegate ,點擊頭像的回調方法。
- (void)didTapCellPortrait:(NSString *)userId