干貨分享——使用融云通訊能力庫 IMLib 實現單群聊的閱讀回執(zhí)

今天的干貨分享是關于“閱讀回執(zhí)”功能蕉堰,這是一個很普遍的功能台谢,但是針對使用融云的 SDK 去實現张遭,還是有些坑在等著我們的莽龟,下面就開始分(bì)享(kēng)嘍~

  1. 分享之前先做一些準備工作蠕嫁,先找到我們需要調用的接口文檔

  1. 根據不同的會話類型以及消息的發(fā)送方和接收方,要分別處理

    • 單聊

      接收方 :在閱讀消息后毯盈,調用 RCIMClient 類的發(fā)送閱讀回執(zhí)接口剃毒,參數如下:

      ? conversationType 單聊會話類型

      ? targetId 消息的會話 ID

      ? time 會話最后一條消息的發(fā)送時間(sentTime)

      /*!
       發(fā)送某個會話中消息閱讀的回執(zhí)
      
       @param conversationType    會話類型
       @param targetId            會話 ID
       @param timestamp           該會話中已閱讀的最后一條消息的發(fā)送時間戳
       @param successBlock        發(fā)送成功的回調
       @param errorBlock          發(fā)送失敗的回調[nErrorCode: 失敗的錯誤碼]
      
       @discussion 此接口只支持單聊, 如果使用 IMLib 可以注冊監(jiān)聽
       RCLibDispatchReadReceiptNotification 通知,使用 IMKit 直接設置RCIM.h
       中的 enabledReadReceiptConversationTypeList。
      
       @warning 目前僅支持單聊奶镶。
      
       @remarks 高級功能
       */
      - (void)sendReadReceiptMessage:(RCConversationType)conversationType
                            targetId:(NSString *)targetId
                                time:(long long)timestamp
                             success:(void (^)(void))successBlock
                               error:(void (^)(RCErrorCode nErrorCode))errorBlock;
      

      發(fā)送方:監(jiān)聽下面這個通知迟赃,在接收后修改消息的展示

      /*!
       @const 收到已讀回執(zhí)的 Notification
      
       @discussion 收到消息已讀回執(zhí)之后,IMLib 會分發(fā)此通知厂镇。
      
       Notification 的 object 為 nil,userInfo 為 NSDictionary 對象左刽,
       其中 key 值分別為 @"cType"捺信、@"tId"、@"messageTime",
       對應的 value 為會話類型的 NSNumber 對象 、會話的 targetId 迄靠、已閱讀的最后一條消息的 sendTime秒咨。
       如:
       NSNumber *ctype = [notification.userInfo objectForKey:@"cType"];
       NSNumber *time = [notification.userInfo objectForKey:@"messageTime"];
       NSString *targetId = [notification.userInfo objectForKey:@"tId"];
       NSString *fromUserId = [notification.userInfo objectForKey:@"fId"];
      
       收到這個消息之后可以更新這個會話中 messageTime 以前的消息 UI 為已讀(底層數據庫消息狀態(tài)已經改為已讀)。
      
       @remarks 事件監(jiān)聽
       */
      FOUNDATION_EXPORT NSString *const RCLibDispatchReadReceiptNotification;
      
    • 群聊

      發(fā)送方

      ? 在發(fā)送消息 A 后掌挚,需要針對該消息發(fā)送回執(zhí)請求雨席,message 傳之前發(fā)的消息 A

      /*!
       請求消息閱讀回執(zhí)
      
       @param message      要求閱讀回執(zhí)的消息
       @param successBlock 請求成功的回調
       @param errorBlock   請求失敗的回調[nErrorCode: 失敗的錯誤碼]
      
       @discussion 通過此接口,可以要求閱讀了這條消息的用戶發(fā)送閱讀回執(zhí)吠式。
      
       @remarks 高級功能
       */
      - (void)sendReadReceiptRequest:(RCMessage *)message
                             success:(void (^)(void))successBlock
                               error:(void (^)(RCErrorCode nErrorCode))errorBlock;
      

      ? 設置下面代理函數陡厘,在接收到發(fā)送方發(fā)來的閱讀回執(zhí)響應后,修改消息的展示

      /*!
       IMlib消息接收的監(jiān)聽器
      
       @discussion
       設置IMLib的消息接收監(jiān)聽器請參考RCIMClient的setReceiveMessageDelegate:object:方法特占。
      
       @warning 如果您使用IMlib糙置,可以設置并實現此Delegate監(jiān)聽消息接收;
       如果您使用IMKit是目,請使用RCIM中的RCIMReceiveMessageDelegate監(jiān)聽消息接收谤饭,而不要使用此監(jiān)聽器,否則會導致IMKit中無法自動更新UI懊纳!
       */
      @protocol RCIMClientReceiveMessageDelegate <NSObject>
        
      /*!
       消息已讀回執(zhí)響應(收到閱讀回執(zhí)響應揉抵,可以按照 messageUId 更新消息的閱讀數)
       @param messageUId       請求已讀回執(zhí)的消息ID
       @param conversationType conversationType
       @param targetId         targetId
       @param userIdList 已讀userId列表
       */
      - (void)onMessageReceiptResponse:(RCConversationType)conversationType
                              targetId:(NSString *)targetId
                            messageUId:(NSString *)messageUId
                            readerList:(NSMutableDictionary *)userIdList;
      
      

      接收方

      ? 設置下面代理函數,在接收到消息 A 后嗤疯,還會接收到針對消息 A 的閱讀回執(zhí)請求

      /*!
       IMlib消息接收的監(jiān)聽器
      
       @discussion
       設置IMLib的消息接收監(jiān)聽器請參考RCIMClient的setReceiveMessageDelegate:object:方法功舀。
      
       @warning 如果您使用IMlib,可以設置并實現此Delegate監(jiān)聽消息接收身弊;
       如果您使用IMKit辟汰,請使用RCIM中的RCIMReceiveMessageDelegate監(jiān)聽消息接收,而不要使用此監(jiān)聽器阱佛,否則會導致IMKit中無法自動更新UI帖汞!
       */
      @protocol RCIMClientReceiveMessageDelegate <NSObject>
      
      /*!
       請求消息已讀回執(zhí)(收到需要閱讀時發(fā)送回執(zhí)的請求,收到此請求后在會話頁面已經展示該 messageUId 對應的消息或者調用
       getHistoryMessages 獲取消息的時候凑术,包含此 messageUId 的消息翩蘸,需要調用 sendMessageReadReceiptResponse
       接口發(fā)送消息閱讀回執(zhí))
      
       @param messageUId       請求已讀回執(zhí)的消息ID
       @param conversationType conversationType
       @param targetId         targetId
       */
      - (void)onMessageReceiptRequest:(RCConversationType)conversationType
                             targetId:(NSString *)targetId
                           messageUId:(NSString *)messageUId;
      

      ? 在代理方法中,調用下面接口發(fā)送閱讀回執(zhí)響應給發(fā)送方

      /*!
       發(fā)送閱讀回執(zhí)
      
       @param conversationType 會話類型
       @param targetId         會話 ID
       @param messageList      已經閱讀了的消息列表
       @param successBlock     發(fā)送成功的回調
       @param errorBlock       發(fā)送失敗的回調[nErrorCode: 失敗的錯誤碼]
      
       @discussion 當用戶閱讀了需要閱讀回執(zhí)的消息淮逊,可以通過此接口發(fā)送閱讀回執(zhí)催首,消息的發(fā)送方即可直接知道那些人已經閱讀。
      
       @remarks 高級功能
       */
      - (void)sendReadReceiptResponse:(RCConversationType)conversationType
                             targetId:(NSString *)targetId
                          messageList:(NSArray<RCMessage *> *)messageList
                              success:(void (^)(void))successBlock
                                error:(void (^)(RCErrorCode nErrorCode))errorBlock;
      

總結

閱讀回執(zhí)需要區(qū)分會話類型處理泄鹏,且單聊的閱讀回執(zhí)是針對會話的郎任,群聊的閱讀回執(zhí)是針對某一條消息的:

? 單聊:接收方閱讀某個會話的消息后,發(fā)送閱讀回執(zhí) ——發(fā)送方接到閱讀回執(zhí)备籽,更新 UI

? 群聊:發(fā)送方發(fā)送消息 A舶治, 針對該消息,發(fā)送閱讀回執(zhí)請求 —— 接收方實現監(jiān)聽代理,接收到消息 A 的閱讀回執(zhí)請求 —— 接收方發(fā)送閱讀回執(zhí)響應 —— 發(fā)送方收到閱讀回執(zhí)響應霉猛,更新 UI

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末尺锚,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子惜浅,更是在濱河造成了極大的恐慌瘫辩,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坛悉,死亡現場離奇詭異伐厌,居然都是意外死亡,警方通過查閱死者的電腦和手機吹散,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門弧械,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人空民,你說我怎么就攤上這事刃唐。” “怎么了界轩?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵画饥,是天一觀的道長。 經常有香客問我浊猾,道長抖甘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任葫慎,我火速辦了婚禮衔彻,結果婚禮上,老公的妹妹穿的比我還像新娘偷办。我一直安慰自己艰额,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布椒涯。 她就那樣靜靜地躺著柄沮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪废岂。 梳的紋絲不亂的頭發(fā)上祖搓,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音湖苞,去河邊找鬼拯欧。 笑死,一個胖子當著我的面吹牛袒啼,可吹牛的內容都是我干的哈扮。 我是一名探鬼主播纬纪,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蚓再,長吁一口氣:“原來是場噩夢啊……” “哼滑肉!你這毒婦竟也來了?” 一聲冷哼從身側響起摘仅,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤靶庙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后娃属,有當地人在樹林里發(fā)現了一具尸體六荒,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年矾端,在試婚紗的時候發(fā)現自己被綠了掏击。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡秩铆,死狀恐怖砚亭,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情殴玛,我是刑警寧澤捅膘,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站滚粟,受9級特大地震影響寻仗,放射性物質發(fā)生泄漏。R本人自食惡果不足惜凡壤,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一署尤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亚侠,春花似錦曹体、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钢坦,卻和暖如春究孕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背爹凹。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工厨诸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禾酱。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓微酬,卻偏偏與公主長得像绘趋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颗管,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • Android及時通訊之--------融云篇想一想陷遮,世界可能會更好。 ...
    小杜先生閱讀 1,921評論 0 16
  • 緊接著上次 的講,上一次我們說完了騰訊云通訊的簡單集成.這一節(jié)我們講解騰訊云通訊的具體實施. 首先 要進行初始化和...
    進階的蚊子閱讀 1,421評論 3 1
  • 一垦江、iOS 直播聊天室 Demo 說明 1帽馋、源碼結構 2、AppDelegate 在 AppDelegate 中初...
    ajiao焦閱讀 2,829評論 2 7
  • 久違的晴天比吭,家長會绽族。 家長大會開好到教室時,離放學已經沒多少時間了衩藤。班主任說已經安排了三個家長分享經驗吧慢。 放學鈴聲...
    飄雪兒5閱讀 7,513評論 16 22
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友赏表。感恩相遇检诗!感恩不離不棄。 中午開了第一次的黨會底哗,身份的轉變要...
    迷月閃星情閱讀 10,559評論 0 11