1孙乖、前期準(zhǔn)備:需要在融云注冊(cè)app戒幔,獲取appkey在AppDelegate中進(jìn)行注冊(cè)吠谢。環(huán)境分為開發(fā)環(huán)境和生產(chǎn)環(huán)境,調(diào)試可以用開發(fā)環(huán)境诗茎,app上線需要注冊(cè)生產(chǎn)環(huán)境工坊。
2、獲取用戶token(用來用戶身份認(rèn)證的敢订,通過用戶的token王污,獲取用戶的信息)的過程:
如果沒有服務(wù)器,融云提供了調(diào)試的接口楚午,點(diǎn)擊提交即可獲取token來進(jìn)行測(cè)試:
3昭齐、獲取到token之后就可以調(diào)用-connectWithToken:success:error:tokenIncorrect:? 方法與融云服務(wù)器建立連接,這個(gè)方法在程序運(yùn)行過程中只需要調(diào)用一次矾柜,在網(wǎng)絡(luò)斷開或者前后臺(tái)切換的情況下阱驾,會(huì)自動(dòng)重連,除非是手動(dòng)斷開連接怪蔑,是需要再次調(diào)用該方法進(jìn)行重連里覆。
需要注意兩點(diǎn):
? ? ? 一、該方法有一個(gè)成功的回調(diào)和一個(gè)錯(cuò)誤的回調(diào)缆瓣,在錯(cuò)誤回調(diào)中喧枷,有一種錯(cuò)誤狀態(tài)是本來已經(jīng)連接成功的,需要進(jìn)行判斷:
? ? 二弓坞、登陸成功之后隧甚,可以將token存到沙盒偏好設(shè)置中進(jìn)行存儲(chǔ)。需要注意昼丑,該方法的回調(diào)是在子線程中進(jìn)行的呻逆,如果需要進(jìn)行ui操作夸赫,需要切換到主線程菩帝。
4、登陸成功茬腿,跳轉(zhuǎn)到會(huì)話列表控制器呼奢,融云已經(jīng)提供了一個(gè)會(huì)話列表控制器 (RCConversationListViewController),我們可以創(chuàng)建一個(gè)控制器繼承自RCConversationListViewController切平。屬性displayConversationTypeArray可以設(shè)置顯示的聊天類型(單聊握础、討論組、群聊悴品、聊天室禀综、客服等)简烘。
會(huì)發(fā)現(xiàn)會(huì)話列表中的用戶頭像和用戶名字不顯示,為了解決這個(gè)問題定枷,需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的類孤澎,遵守協(xié)議RCIMUserInfoDateSource,這個(gè)類用來管理用戶信息的欠窒,用戶信息可以從服務(wù)器或者緩存中讀取覆旭,可以獲取用戶信息、緩存用戶信息岖妄、刪除用戶信息型将。然后將這個(gè)類初始化,傳給[RCIM sharedRCIM]荐虐,RCIM就可以從該類中讀取用戶信息七兜。
5、會(huì)話界面福扬,融云也提供了一個(gè)控制器類(RCConversationViewController)惊搏,同樣創(chuàng)建一個(gè)控制器繼承自它,初始化方法中需要傳遞displayConversationTypeArray和targetId(和誰進(jìn)行會(huì)話)忧换。
自定義消息cell(文字恬惯、表情、紅包亚茬、位置酪耳、語音)等:
分兩步:
第一步:自定義消息并注冊(cè)消息類型:需要繼承自RCMessageContent類,實(shí)現(xiàn)三個(gè)協(xié)議:
消息發(fā)送的流程:
消息接收流程刹缝,下圖主要介紹的是離線接收消息:
第二步:自定義cell并注冊(cè)cell(繼承自融云提供的RCMessageBaseCell或RCMessageCell(布局更復(fù)雜))
這兩種cell的區(qū)別:第二種有頭像和名字碗暗,第一種沒有。
自定義cell需要有三步梢夯,第一步注冊(cè)cell(register方法言疗,和collectionView注冊(cè)方法相似),第二步返回cell item實(shí)例的方法
這個(gè)方法當(dāng)只有自定義cell的時(shí)候才會(huì)調(diào)用颂砸,例如文本消息噪奄、圖片消息、語音消息不是自定義的就不會(huì)走這個(gè)方法人乓。
第三步勤篮,實(shí)現(xiàn)返回cell大小的方法。
6色罚、發(fā)送紅包功能
在會(huì)話控制器的父類RCConversationViewController中有一個(gè)屬性 RCPluhinBoardView * pluginBoardView碰缔,擴(kuò)展功能板view,可以擴(kuò)展發(fā)送地理位置戳护、圖片金抡、紅包等功能瀑焦。
使用該view下面的方法,可以添加擴(kuò)展項(xiàng)梗肝。
實(shí)現(xiàn)該view的代理方法蝠猬,在代理方法中監(jiān)聽到點(diǎn)擊某個(gè)擴(kuò)展項(xiàng)的回調(diào),可以根據(jù)上面方法中的tag值進(jìn)行相應(yīng)的處理统捶。
發(fā)送消息時(shí)會(huì)調(diào)用下面的方法
方法中的參數(shù)說明和注意事項(xiàng)如下:
自定義紅包消息類榆芦,繼承自第五條提到的RCMessageContent,紅包需要有兩個(gè)屬性喘鸟,amount(紅包金額)匆绣,desc(描述)。然后實(shí)現(xiàn)RCMessageContent中的三個(gè)協(xié)議的方法什黑,第一個(gè)協(xié)議RCMessageCoding崎淳,進(jìn)行json之間的編碼和解碼;第二個(gè)協(xié)議RCMessagePersistentCompatible愕把,是否需要存入本地和計(jì)入未讀數(shù)拣凹,紅包消息是需要進(jìn)行本地存儲(chǔ)和進(jìn)行未讀數(shù)的,只要返回枚舉的第三個(gè)選項(xiàng)即可恨豁;第三個(gè)協(xié)議RCMessageContentView嚣镜,在會(huì)話列表中顯示的紅包消息摘要內(nèi)容。
自定義紅包c(diǎn)ell類橘蜜,繼承自RCMessageCell類菊匿,這個(gè)cell類中有一個(gè)messageContentView,是用來放消息內(nèi)容的視圖计福,這個(gè)視圖有一個(gè)setEventBlock:跌捆,cell大小發(fā)生改變的時(shí)候調(diào)用該方法,可以給消息中子視圖重新布局象颖。
7佩厚、撤回消息:
撤回消息的實(shí)現(xiàn)流程,長按消息说订,消息上方出現(xiàn)復(fù)制/刪除/撤回的視圖抄瓦,點(diǎn)擊撤回,刪除該條消息本地存儲(chǔ)克蚂,發(fā)送給融云服務(wù)器闺鲸,服務(wù)器告訴對(duì)方客戶端這是一條撤回消息筋讨,進(jìn)行撤回埃叭。
當(dāng)點(diǎn)擊消息cell時(shí),會(huì)觸發(fā)下面的方法悉罕,在UIMenuControlle為消息上方出現(xiàn)的消息處理視圖
在recall: 方法中需要做的處理是發(fā)送一條撤回消息赤屋,撤回消息cell和紅包消息cell一樣需要自定義立镶,也需要一個(gè)繼承自RCMessageContent的messageContent類,但是撤回消息需要進(jìn)行本地存儲(chǔ)类早,但不需要計(jì)入未讀數(shù)媚媒。
然后將該撤回消息發(fā)送給對(duì)方客戶端,把當(dāng)前的長按消息刪除掉涩僻。本地消息刪除掉了缭召,遠(yuǎn)程的怎么刪除:
實(shí)現(xiàn)上面的代碼,在下面的代碼中接收撤回消息
先判斷是否是撤回消息逆日,然后從當(dāng)前消息列表中找是否有該消息嵌巷,然后進(jìn)行刪除
自定義撤回消息cell,只需要繼承自RCMessageBaseCell室抽,自定義里面的內(nèi)容搪哪。