iOS 融云即时通信

// 注册成为开发者 创建自己的app 获取AppKey
// 按照融云的集成步骤集将IMKit 集成至自己的App 内

// iOS 快速集成 http://www.rongcloud.cn/docs/ios.html
// 融云官网 http://www.rongcloud.cn

// 集成时遇到的问题

  1. 发送者 和 被发送者的头像及用户名信息显示问题
    刚开始以为是在融云官网创建测试账号填写测试账号的name 和 头像url 后,使用测试账号token 进行登录时融云会自动获取用户及聊天对象的详细信息(头像url 及 用户名),后来发现融云并不会主动帮用户获取这些详细信息 而是给用户提供了接口需要用户将信息返回给指定接口 , 融云接收到用户传递的信息后会去刷新UI (填充用户名和 头像信息)
 [[RCIM sharedRCIM] connectWithToken:token success:^(NSString *userId) {
       
   //设置用户信息提供者(最近联系人及聊天界面需要用到的用户名和头像链接都会从代理方法获取)
        [[RCIM sharedRCIM] setUserInfoDataSource:self];
   
   // 可能建立连接时是在子线程需要回到主线程
  //  若不回到主线程会导致界面无法跳转

        dispatch_async(dispatch_get_main_queue(), ^{

// 登录成功后跳转到 最近联系的好友界面
            ChatListViewController *chatListViewController =         [[ChatListViewController alloc]init];
            chatListViewController.hidesBottomBarWhenPushed = YES ;
            [self.navigationController pushViewController:chatListViewController animated:YES];
        });
        
    } error:^(RCConnectErrorCode status) {
        NSLog(@"login error status: %ld.", (long)status);
    } tokenIncorrect:^{

        NSLog(@"token 无效 ,请确保生成token 使用的appkey 和初始化时的appkey 一致");
    }];

// 实现获取最近联系人及聊天界面需要用到的用户名和 头像信息的代理方法

- (void)getUserInfoWithUserId:(NSString *)userId completion:(void(^)(RCUserInfo* userInfo))completion
{

// 所有的用户名 和 头像url 信息均需要通过自己的服务器去获取 
// 登录用户的id 请替换成自己的id
    NSString *myid = [GetUserInfo getUserID];  
    if ([userId isEqualToString:myid]) {
        
     //  返回登录用户的详细信息
       NSString *picUrl = [GetUserInfo getUserPic];
       NSString *name = [GetUserInfo getUseName];

        RCUserInfo *user = [[RCUserInfo alloc]init];       
        user.userId = myid;
        user.name =  name ;
        user.portraitUri = picUrl  ;
        return completion(user);
    }else{
    
        // 返回除登录用户以外 其它聊天对象的信息
      // 注意 如果是通过服务器 获取用户信息 可以在 为获取前设置默认的返回值                       //  获取到返回值后 重新调用融云的接口刷新用户信息
        NSString *path = [[NSBundle mainBundle]     pathForResource:@"default_avator" ofType:@".png"];
                user.userId = userId ;
                 user.name   = userId ;
                 user.portraitUri = path ;
                 completion(user);
  [UserInfoWebManage getUserInfoWithUserId:userId WithSuccess:^(NSDictionary *dic) {
            
// 获取到信息后刷新用户信息
            RCUserInfo *user = [[RCUserInfo alloc]init];
                    user.userId = userId ;
                    user.name   = userId ;
                    user.portraitUri = path ;
                    return completion(user);

        } filure:^(NSError *error) {
             
// 获取用户信息失败
        }];          
    }
}

2 在聊天界面中点击下方工具条上的加号 可以选择发送照片 拍照 及发送位置信息的功能 如果某项功能不需要可以通过以下方法删除

// 自己创建聊天界面控制器 要继承 RCConversationViewController
// 然后在viewDidLoad 方法中 添加以下代码

[self.chatSessionInputBarControl.pluginBoardView removeItemAtIndex:index];

3 添加badageNum
3.1 tabbar 加载的时候设置badageNum
3.2 接收到新消息后更新badageNum
3.3阅读消息后重设badageNum

//  获取未读消息个数
// 在需要获取未读消息个数的类中引入融云头文件
#import <RongIMKit/RongIMKit.h>
// 获取未读消息个数的方法
-(NSInteger)getUnreadCount{
    int unreadMsgCount = [[RCIMClient sharedRCIMClient] getUnreadCount:@[
                                                                         @(ConversationType_PRIVATE),
                                                                         @(ConversationType_DISCUSSION),
                                                                         @(ConversationType_APPSERVICE),
                                                                         @(ConversationType_PUBLICSERVICE),
                                                                         @(ConversationType_GROUP)
                                                                         ]];
    return unreadMsgCount ;
}

// 收到消息重设badageNum 实现监听接收信息的代理方法 程序内收到消息会调用代理方法

//遵守协议

 RCIMReceiveMessageDelegate

// 设置代理

    [[RCIM sharedRCIM] setReceiveMessageDelegate:self];

// 实现代理方法 在代理方法中处理UI 要回到主线程进行操作,刚开始没有在主线程操作设置badageNum会有很长的延时控制台会有警告出现

-(void)onRCIMReceiveMessage:(RCMessage *)message left:(int)left{
     dispatch_async(dispatch_get_main_queue(), ^{
                   [self setBadageNum];
        });
}

-(void)setBadageNum{
    
    NSInteger unreadMessageCount = [self getUnreadCount];
    
    // 设置tabbar 的icon
    UITabBarController *tabbar = (UITabBarController *)[UIApplication sharedApplication].keyWindow.rootViewController ;
    if ([tabbar isKindOfClass:[UITabBarController class]]) {
        
        UITabBarItem *item = [tabbar.tabBar.items objectAtIndex:1];
        
// 如果没有未读消息返回值为nil
        if (unreadMessageCount == 0 || unreadMessageCount == nil) {
            item.badgeValue = nil ;           
            return ;
        }
        
        item.badgeValue = [NSString stringWithFormat:@"%d",unreadMessageCount];
       
    }

}

3.2 阅读消息后重设badage 只需要在需要的地方调用setBadageNum 方法即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容