融云RCIMKit使用小结

11111.gif

目录:
1.会话列表页没有回话聊天的时候显示内容自定义
2.实现收到消息时候,位于tabbar自定义小红点的出现(并及时出现)
3.#import "IQKeyboardManager.h"与会话聊天键盘弹出的冲突
4.介绍一个做的时候比较麻烦的功能,关于消息的处理与查看的消息小红点
5.当首次进入聊天时候,默认发送一条信息

1.会话列表页没有回话聊天的时候显示内容自定义

对比图

只需要在继承了RCConversationListViewController这个类中,赋值这个emptyConversationView属性即可

- (void)setupEmptyConversationView {
    
    UIImageView *emptyImageView = [[UIImageView alloc] init];
    emptyImageView.image = [UIImage imageNamed:@"facai"];
    emptyImageView.size = CGSizeMake(kScreenWidth, kScreenHeight);
    emptyImageView.center = self.view.center;
    UIView * emptyView = [[UIView alloc] initWithFrame:self.view.bounds];
    UILabel * emptyLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 350, 200, 50)];
    emptyLabel.text = @"都没有人跟我聊天";
    UILabel * emptyLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(55, 200, 200, 50)];
    emptyLabel1.text = @"蓝瘦~";
    UILabel * emptyLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 250, 200, 50)];
    emptyLabel2.text = @"香菇~~";
    [emptyView addSubview:emptyImageView];
    [emptyView addSubview:emptyLabel];
    [emptyView addSubview:emptyLabel1];
    [emptyView addSubview:emptyLabel2];
    self.emptyConversationView = emptyView;
}

当然这是非常简单的功能甚至在融云开发文档中com + f 搜索关键字就能找到

2.实现收到消息时候,位于tabbar自定义小红点的出现(并及时出现)

小红点的消失与出现 | 项目隐私做了遮挡

本人这里的实现是直接在tabbar上添加的原点图片只要调整好frame完全没有问题,而且采用[tabbar addSubView]的方法不用担心每次收到消息都会覆盖添加的问题,所以移除的时候也是只需要移除一次就可以

// 创建imageView
_imageViewMessage = [[UIImageView alloc] init];
    _imageViewMessage.frame = CGRectMake(kScreenWidth * 0.5, 8, 10, 10);
    [_imageViewMessage setImage:[UIImage imageNamed:@"jindudian"]];
/// 接收到融云消息时调用
- (void)addRcMessage {
    if (self.selectedIndex == 2) {
        return;
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        
        [self.tabBar addSubview:_imageViewMessage];
    });
}

    /// 其他地方处理融云消息,移除tabbar上的小红点
    [[NSNotificationCenter defaultCenter] addObserverForName:KRCMessageOver object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
        [_imageViewMessage removeFromSuperview];
    }];

这里的重点就是一定要利用线程才能达到及时添加的效果, 否则大概每次出现UI上的更新要有30s的延迟,个人猜测这个可能和运行循环有关,所以这里加线程来做就可以了.关于接收消息会调用的方法,大家看融云的开发文档就可以了,而且如果你想加上数字角标也是可以的.self.tabBarItem.badgeValue = @"3";

ps:这里贴一个自己查资料时候的小乌龙 .. 算是绝处逢生吧

这个时间...

心里苦啊

3.记录一个自己遇到的犯二的小点,关于#import "IQKeyboardManager.h"这个是很好用的框架具体使用方法的帖子介绍

导入IQKeyboardManager后,默认所有的页面都有了这个功能,如果你在哪一个界面不想有这个效果可以在当前界面控制器的生命周期方法中进行设置:
#import <IQKeyboardManager.h>

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated]; 
[IQKeyboardManager sharedManager].enable = NO;
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
 [IQKeyboardManager sharedManager].enable = YES;
}

这里需要自定义一个继承RCConversationViewController的类MKConversationViewController进行跳转并在自定义的类的视图生命周期里写上面的方法

//重写RCConversationListViewController的onSelectedTableRow事件
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
         conversationModel:(RCConversationModel *)model
               atIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%@%@",model.conversationTitle,model.targetId);
    RCConversationViewController *conversationVC = [[MKConversationViewController alloc]init];
    conversationVC.conversationType = model.conversationType;
    conversationVC.targetId = model.targetId;
    conversationVC.title = model.conversationTitle;
    [self.navigationController pushViewController:conversationVC animated:YES];
}

4.这里介绍一个做的时候比较麻烦的功能,就是关于消息的处理与查看

注意右上角的小红点和tabbar小红点 | 保护项目隐私这里做了遮挡

这是一个个人感觉比较麻烦的处理地方,因为要实现一旦接受到消息所有界面右上角的聊天入口都要显示小红点,而且任意一个界面进入消息列表页面查看过消息,其他页面的小红点都要消失,就像gif图里这种效果,当然这是一个不是很完美的效果,按照QQ微信这种做法应该是进入到具体的消息会话中消息提醒才会消息,这里做的是只要进入到消息列表页就视为消息查看过的状态取消小红点.

a,发送消息的时机,当我们的聊天列表页面出现在与我们的主Window重合的时候就可以视为跳转到了此页面,即相当于此消息已处理,发送一个通知消息供其他页面接收做UI上的处理

/// 判断聊天页面是不是跟主窗口重叠 ,如果是就发送已经处理了信息的消息
- (void)setupMessageRead {
    
    CGRect windowRect = [UIApplication sharedApplication].keyWindow.bounds;
    CGRect myViewRect = [self.view convertRect:self.view.bounds toView:nil];
    BOOL overlap = CGRectIntersectsRect(windowRect, myViewRect);
    if (overlap) {
        //        NSLog(@"======chongdie ====重叠 ====");
        [[NSNotificationCenter defaultCenter] postNotificationName:KRCMessageOver object:nil];
    }
}

这里涉及到坐标系转换的方法来判断是否跳转相关页面,很方便

b.给要跳转的页面增加一个BOOL属性来判断消息处理的情况,达到第一次进入界面的时候做是否有红点的处理

// 判断是否有为添加的新消息 调整rightItembar
@property(assign,nonatomic ) BOOL messageNew;
-----------------------
    /// 融云监听是否改变聊天入口的状态
    [[NSNotificationCenter defaultCenter] addObserverForName:KRCMessage object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        self.messageNew = YES;
    }];
    /// 融云监听是否改变聊天入口的状态
    [[NSNotificationCenter defaultCenter] addObserverForName:KRCMessageOver object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        self.messageNew = NO;
    }];
    /// 融云信息查看传到下一个界面
    details.messageNew = self.messageNew;
    [self.navigationController pushViewController:details animated:YES];

c.然后在即将显示的见面里通过_messageNew这个BOOL值做处理

///  导航栏根据融云消息按钮
    if (self.messageNew) {
        
        _message = [UIBarButtonItem BarButtonItemWithBackgroudImageName:@"xiaoxitixing" highBackgroudImageName:nil target:self action:@selector(messageCenter)];
    }else {
        
        _message = [UIBarButtonItem BarButtonItemWithBackgroudImageName:@"xiaoxi" highBackgroudImageName:nil target:self action:@selector(messageCenter)];
    }
    self.navigationItem.rightBarButtonItem = _message;

这里做的是切换rightBarButtonItem的图片,不再是加小圆点了.效果是一样的.

d.实时监听页面消息的变化

    /// 融云消息实时改变UIBarButtonItem的显示
    [[NSNotificationCenter defaultCenter] addObserverForName:KRCMessage object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        [self setupRCMessageImageDetail];
    }];
    [[NSNotificationCenter defaultCenter] addObserverForName:KRCMessageOver object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        [self readRCMessageImageDetail];
    }];

/// 未查看消息要做的事.| 同样在改变`rightBarButtonItem`时候也要注意线程
- (void)setupRCMessageImageDetail {
    dispatch_sync(dispatch_get_main_queue(), ^{
    
        _message = [UIBarButtonItem BarButtonItemWithBackgroudImageName:@"xiaoxitixing" highBackgroudImageName:nil target:self action:@selector(messageCenter)];
    });
}

/// 已查看消息要做的事.
- (void)readRCMessageImageDetail {
    
    _message = [UIBarButtonItem BarButtonItemWithBackgroudImageName:@"xiaoxi" highBackgroudImageName:nil target:self action:@selector(messageCenter)];
    
}

e.移除通知

#pragma mark - 移除通知
- (void)dealloc {
    
    [[NSNotificationCenter defaultCenter] removeObserver:self name:KRCMessageOver object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:KRCMessage object:nil];
    NSLog(@"===详情页死了====");
}

5.当首次进入聊天时候,默认发送一条信息,比如我们需要知道买家查看的哪个商品并从哪个商品的详情进入到与卖家的聊天的,这样方便知道买家对哪个商品感兴趣

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    //判断是否与刚刚查看的商品是同一个,避免每次进入都发送同样的内容
    if (self.isSame) {
        return;
    }
    RCTextMessage * text = [RCTextMessage new];
    text.content = [NSString stringWithFormat:@"正在查看: %@  价格: %@元/米",_modell.group_title,_modell.group_price];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
        [self sendMessage:text pushContent:@"远程推送消息"];
    });
}

上面这个是我在百度查到的因为官方文档里这里有个坑,如下:

这里提示消息要和发送的消息区分开

这里提示消息要和发送的消息区分开,因为提示消息仅仅买家能够看得到,仅仅相当于给买家一个提示,而并非也会发给卖家

到此基本完成了.整体思路仅供参考交流,暂无demo.大神勿喷.如有不足或者错误望斧正.原创,转载请注明.

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

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,767评论 0 15
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,166评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,105评论 4 62
  • 飘雪的冬季, 洁白的大地像底片, 阳光给树梢剪影, 却留下一地的碎金。
    嘉龙阅读 207评论 0 2
  • 恬浅阅读 250评论 0 0