| 本帖最后由 竹林风 于 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
 
 
 
 
 |