本帖最后由 竹林风 于 2019-1-9 16:56 编辑
导读
如图:
使用:
1.找到 myApp -> Gerneral -> Headers -> Header-Prefix.h 填写自己申请的融云APPKey:
2.融云相关的初始化工作都在AppDelegate.m 里面
a.用户登录成功后调用 initRongCloud 方法。
[Objective-C] 纯文本查看 复制代码 #pragma mark - 初始化融云SDK
-(void)initRongCloud{
[[RCIM sharedRCIM] initWithAppKey:RONGCLOUD_IM_APPKEY];
//状态监听
[RCIM sharedRCIM].connectionStatusDelegate = self;
[self connectRongCloud];
}
b.connectRongCloud 方法里面需要写请求融云Token的方法,需要从自己的服务器请求。在请求成功的方法里面调用融云连接的方法。
[Objective-C] 纯文本查看 复制代码 #pragma mark - 从服务器获取融云Token并连接融云
-(void)connectRongCloud{
NSMutableDictionary *params = [Utility initPublicParames];
[HttpTool postRequestWithUrl:@"" Params:params success:^(id returnData) {
NSString *rcToken = returnData[@"token"]; //这里要取真实的数据
// 连接融云
//连接融云服务器
[[RCIM sharedRCIM] connectWithToken:rcToken success:^(NSString *userId) {
RCUserInfo *_currentUserInfo = [[RCUserInfo alloc] initWithUserId:userId name:[Utility getUserName] portrait:[Utility getPhotoUrl]];
[RCIMClient sharedRCIMClient].currentUserInfo = _currentUserInfo;
[RCIM sharedRCIM].enableMessageAttachUserInfo = YES;
//会话列表头像默认设置为圆角
// [RCIM sharedRCIM].globalConversationAvatarStyle = RC_USER_AVATAR_CYCLE;
//会话列表头像尺寸默认设置为40*40
// [RCIM sharedRCIM].globalConversationPortraitSize = CGSizeMake(40, 40);
//会话界面的用户头像设置为圆角
// [RCIM sharedRCIM].globalMessageAvatarStyle=RC_USER_AVATAR_CYCLE;
NSLog(@"连接融云服务器 - success");
//设置用户信息提供者,页面展现的用户头像及昵称都会从此代理取
[[RCIM sharedRCIM] setUserInfoDataSource:self];
[self updateBadgeValueForTabBarItem];
} error:^(RCConnectErrorCode status) {
NSLog(@"连接融云服务器 - failed : %ld",(long)status);
} tokenIncorrect:^{// Token 失效的状态处理
NSLog(@"连接融云服务器 - Token 失效,请确保生成token使用的appkey和初始化时的appkey一致");
}];
} error:^(NSString *error, NSInteger errorCode) {
}];
}
说明:[Utility getUserName] 和 [Utility getPhotoUrl] 读取的是保存在本地的当前用户名称和头像地址。注意提前保存。
c.融云:设置信息提供者
[Objective-C] 纯文本查看 复制代码 #pragma mark - 融云:获取用户信息
// 获取用户信息的方法。
-(void)getUserInfoWithUserId:(NSString *)userId completion:(void(^)(RCUserInfo* userInfo))completion
{
// 此处最终代码逻辑实现需要您从本地缓存或服务器端获取用户信息。
//例如
// NSString *myID = [NSString stringWithFormat:@"job%@",FormatInt(currentUserId())];
// if ([userId isEqualToString:myID]) {//获取登录用户信息
// RCUserInfo *user = [RCIMClient sharedRCIMClient].currentUserInfo;
// [[NSNotificationCenter defaultCenter] postNotificationName:NOTICE_ChatRefresh object:nil userInfo:nil];
// return completion(user);
// }
return completion(nil);
}
这个方法需要实现向自己服务器获取用户信息并提供给融云
3.更新未读消息
[Objective-C] 纯文本查看 复制代码 #pragma mark - 更新tabbarItem上的未读消息数
- (void)updateBadgeValueForTabBarItem
{
// __weak typeof(self) __weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:
@[@(ConversationType_PRIVATE),
@(ConversationType_DISCUSSION),
@(ConversationType_APPSERVICE),
@(ConversationType_PUBLICSERVICE),
@(ConversationType_GROUP),@(ConversationType_PUSHSERVICE)]];
// Alice_Debug(@"count = %zi",count);
if (unreadMsgCount>0) {
NSString *strBadgeValue = [NSString stringWithFormat:@"%@",@(unreadMsgCount)];
[self->_mainTabBar.tabBar.items[1] setBadgeValue:strBadgeValue];
}else {
[self->_mainTabBar.tabBar.items[1] setBadgeValue:nil];
}
});
}
这个方法可在聊天页直接调用。
4.掉线通知
[Objective-C] 纯文本查看 复制代码 #pragma mark - 融云掉线提示
/**
* 融云网络状态变化。
*
* @param status 网络状态。
*/
- (void)onRCIMConnectionStatusChanged:(RCConnectionStatus)status {
if (status == ConnectionStatus_KICKED_OFFLINE_BY_OTHER_CLIENT) {
[self.window endEditing:YES];
[[RCIM sharedRCIM] logout];
OffLineRemindVC *offLine = [[OffLineRemindVC alloc]init];
//确定下线
offLine.configBtnAction = ^(){
};
//重新登录
offLine.reLoginBtnAction = ^(){
};
[getKeyWindow() addSubview:offLine.view];
[self.window.rootViewController addChildViewController:offLine];
}
}
这个是单点登录掉线通知方法,我自己写了个弹出框。有两个事件,自己实现。样式如图:
5.聊天列表页 myApp -> Modules -> Message -> MsgListVC。点击列表会话到聊天会话页事件已实现
[Objective-C] 纯文本查看 复制代码 -(void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel *)model atIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"model.targetId = %@",model.targetId);
//默认显示 - 单聊、讨论组
if (conversationModelType == RC_CONVERSATION_MODEL_TYPE_NORMAL) {
ChatVC *_conversationVC = [[ChatVC alloc]init];
_conversationVC.conversationType = model.conversationType;
_conversationVC.targetId = model.targetId;
_conversationVC.title = model.conversationTitle;
_conversationVC.unReadMessage = model.unreadMessageCount;
_conversationVC.enableNewComingMessageIcon=YES;//开启消息提醒
_conversationVC.enableUnreadMessageIcon=YES;
[self.navigationController pushViewController:_conversationVC animated:YES];
}
}
6. 聊天会话页 myApp -> Modules -> Message -> ChatVC。
附件链接:https://pan.baidu.com/s/1GStPo_u-RQ-0ov4ayM_pZA 密码:evhw
|