http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3968|回复: 4

[综合] 【iOS开发实用框架】集成融云聊天

[复制链接]
发表于 2019-1-9 16:57:15 | 显示全部楼层 |阅读模式
本帖最后由 竹林风 于 2019-1-9 16:56 编辑


导读

【iOS开发实用框架】基础教程目录    http://www.sufeinet.com/thread-24348-1-1.html
【iOS开发实用框架】实例目录贴    http://www.sufeinet.com/thread-24654-1-1.html


如图:

7A3A46E83E38BF9393BBB2E729B54AA5.png

使用:

1.找到 myApp -> Gerneral -> Headers -> Header-Prefix.h 填写自己申请的融云APPKey:

426CF4E9FE467845D6194E8207ACD016.png

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];
    }
}


这个是单点登录掉线通知方法,我自己写了个弹出框。有两个事件,自己实现。样式如图:

E3228C3B8CF62762208ECEBB663A2023.png

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





1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2019-1-9 17:06:55 | 显示全部楼层
我只是路过打酱油的。
发表于 2019-1-9 17:20:40 | 显示全部楼层
强烈支持楼主ing……
发表于 2019-1-10 09:06:25 | 显示全部楼层
无回帖,不论坛,这才是人道。
发表于 2019-1-10 14:20:59 | 显示全部楼层
强烈支持楼主ing……
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-23 14:01

© 2014-2021

快速回复 返回顶部 返回列表