融云RCIMKit使用小結

11111.gif

目錄:
1.會話列表頁沒有回話聊天的時候顯示內容自定義
2.實現(xiàn)收到消息時候,位于tabbar自定義小紅點的出現(xiàn)(并及時出現(xiàn))
3.#import "IQKeyboardManager.h"與會話聊天鍵盤彈出的沖突
4.介紹一個做的時候比較麻煩的功能,關于消息的處理與查看的消息小紅點
5.當首次進入聊天時候,默認發(fā)送一條信息

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

當然這是非常簡單的功能甚至在融云開發(fā)文檔中com + f 搜索關鍵字就能找到

2.實現(xiàn)收到消息時候,位于tabbar自定義小紅點的出現(xiàn)(并及時出現(xiàn))

小紅點的消失與出現(xiàn) | 項目隱私做了遮擋

本人這里的實現(xiàn)是直接在tabbar上添加的原點圖片只要調整好frame完全沒有問題,而且采用[tabbar addSubView]的方法不用擔心每次收到消息都會覆蓋添加的問題,所以移除的時候也是只需要移除一次就可以

// 創(chuàng)建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];
    }];

這里的重點就是一定要利用線程才能達到及時添加的效果, 否則大概每次出現(xiàn)UI上的更新要有30s的延遲,個人猜測這個可能和運行循環(huán)有關,所以這里加線程來做就可以了.關于接收消息會調用的方法,大家看融云的開發(fā)文檔就可以了,而且如果你想加上數(shù)字角標也是可以的.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小紅點 | 保護項目隱私這里做了遮擋

這是一個個人感覺比較麻煩的處理地方,因為要實現(xiàn)一旦接受到消息所有界面右上角的聊天入口都要顯示小紅點,而且任意一個界面進入消息列表頁面查看過消息,其他頁面的小紅點都要消失,就像gif圖里這種效果,當然這是一個不是很完美的效果,按照QQ微信這種做法應該是進入到具體的消息會話中消息提醒才會消息,這里做的是只要進入到消息列表頁就視為消息查看過的狀態(tài)取消小紅點.

a,發(fā)送消息的時機,當我們的聊天列表頁面出現(xiàn)在與我們的主Window重合的時候就可以視為跳轉到了此頁面,即相當于此消息已處理,發(fā)送一個通知消息供其他頁面接收做UI上的處理

/// 判斷聊天頁面是不是跟主窗口重疊 ,如果是就發(fā)送已經處理了信息的消息
- (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;
-----------------------
    /// 融云監(jiān)聽是否改變聊天入口的狀態(tài)
    [[NSNotificationCenter defaultCenter] addObserverForName:KRCMessage object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        self.messageNew = YES;
    }];
    /// 融云監(jiān)聽是否改變聊天入口的狀態(tài)
    [[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值做處理

///  導航欄根據(jù)融云消息按鈕
    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.實時監(jiān)聽頁面消息的變化

    /// 融云消息實時改變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.當首次進入聊天時候,默認發(fā)送一條信息,比如我們需要知道買家查看的哪個商品并從哪個商品的詳情進入到與賣家的聊天的,這樣方便知道買家對哪個商品感興趣

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    //判斷是否與剛剛查看的商品是同一個,避免每次進入都發(fā)送同樣的內容
    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:@"遠程推送消息"];
    });
}

上面這個是我在百度查到的因為官方文檔里這里有個坑,如下:

這里提示消息要和發(fā)送的消息區(qū)分開

這里提示消息要和發(fā)送的消息區(qū)分開,因為提示消息僅僅買家能夠看得到,僅僅相當于給買家一個提示,而并非也會發(fā)給賣家

到此基本完成了.整體思路僅供參考交流,暫無demo.大神勿噴.如有不足或者錯誤望斧正.原創(chuàng),轉載請注明.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市员寇,隨后出現(xiàn)的幾起案子弄慰,更是在濱河造成了極大的恐慌,老刑警劉巖蝶锋,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陆爽,死亡現(xiàn)場離奇詭異,居然都是意外死亡扳缕,警方通過查閱死者的電腦和手機慌闭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來躯舔,“玉大人驴剔,你說我怎么就攤上這事≈嘧” “怎么了丧失?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惜互。 經常有香客問我布讹,道長琳拭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任描验,我火速辦了婚禮白嘁,結果婚禮上,老公的妹妹穿的比我還像新娘膘流。我一直安慰自己絮缅,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布呼股。 她就那樣靜靜地躺著盟蚣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卖怜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天阐枣,我揣著相機與錄音马靠,去河邊找鬼。 笑死蔼两,一個胖子當著我的面吹牛甩鳄,可吹牛的內容都是我干的。 我是一名探鬼主播额划,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妙啃,長吁一口氣:“原來是場噩夢啊……” “哼西疤!你這毒婦竟也來了寨躁?” 一聲冷哼從身側響起汉柒,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杨何,失蹤者是張志新(化名)和其女友劉穎忧勿,沒想到半個月后叠殷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肆良,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡香罐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年阿逃,在試婚紗的時候發(fā)現(xiàn)自己被綠了铭拧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡恃锉,死狀恐怖搀菩,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情破托,我是刑警寧澤肪跋,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站炼团,受9級特大地震影響澎嚣,放射性物質發(fā)生泄漏疏尿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一易桃、第九天 我趴在偏房一處隱蔽的房頂上張望褥琐。 院中可真熱鬧,春花似錦晤郑、人聲如沸敌呈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磕洪。三九已至,卻和暖如春诫龙,著一層夾襖步出監(jiān)牢的瞬間析显,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工签赃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谷异,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓锦聊,卻偏偏與公主長得像歹嘹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孔庭,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容

  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網易云信 SDK 為 Web 應用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 13,761評論 0 15
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫尺上、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 飄雪的冬季圆到, 潔白的大地像底片怎抛, 陽光給樹梢剪影, 卻留下一地的碎金构资。
    嘉龍閱讀 206評論 0 2
  • 恬淺閱讀 250評論 0 0