基於IM實現直播禮物效果

首先,想要實現直播禮物效果,是通訊的一種
有兩種方案:
– 基於TCP/IP和UDP的長連線 – 即時通訊IM方案
– 基於HTTP的短連線 並高頻呼叫 – 請求-響應

即時通訊可以選擇,融雲,網易,騰訊,融雲和騰訊的即時通訊是免費的(對使用者量有要求,小公司足夠了)

建議用騰訊吧,畢竟做了這麼多年通訊,效果還是應該問題,利於後期支撐,融雲通訊開始收費了,以前免費的

我這裡用的是網易的,他發資訊的次數有限制,好像是200次/分鐘,大於這個就會自動遮蔽該使用者的訊息,不過也足夠了。

第一種:網易的IM提供傳送文字,傳送圖片,傳送檔案功能·····如圖:

這裡寫圖片描述

我們可以在直播房間傳送任何你想傳送的東西,然後呼叫相關介面,實現接收,不過類似的這種東西需要歸檔和解檔處理,網易是這樣做的

這裡用到的是歸檔操作,想了解歸檔請看這裡

http://blog.csdn.net/xoxo_x/article/details/53313850

這裡寫圖片描述

大家可以參考一下,在你處理的時候需要根據訊息的型別type分類,有一丟丟麻煩,我沒有這樣做。

然而,歸檔是必須的,雖然自定義字串,作為識別,很方便,但是,從長遠來講,歸檔是必須的,因為,自定義字串識別,有太多的冗餘欄位,維護起來並不方便,希望大家不要貪圖一時麻煩,當然,如果對於高併發要求不高的就無所謂了

第二種方法:我是這樣做的,我對傳送禮物,新增一個特殊加密欄位,然後傳送文字資訊,組群使用者接收到之後會判斷處理,當文字資訊為禮物欄位時,進行攔截,然後程式碼進行操作,實現UI變化,一定要攔截到資訊,否則使用者在聊天介面會收到,該加密的特殊字串,那麼老闆就哭了。部分程式碼如下:

因為收費的原因,即使你知道了特殊欄位的含義,然而並沒有什麼用,後臺會進行使用者金錢驗證,沒有錢,扣費不成功依舊發不出禮物

這裡寫圖片描述

關於本地禮物動畫是怎麼寫的,網上有很多Demo,一會兒我會提供給大家一個demo連結

禮物效果也不是那麼簡單,需要用到執行緒的分配,你需要處理高的併發下的收到的大量資訊,是如何井條有序的顯示在螢幕上的,這點需要點功底,我這裡會給大家一個非常不錯的demo。

那麼整個訊息的傳送,,接收,,顯示情況是如何進行的?

首先,你需要自己寫一個禮物的presentBar,用collectiobview來寫,這個不固定,設定點選事件在點選事件中,出發sendmessage操作,如果使用特殊加密欄位。那麼你給每一個禮物新增一個特殊的字串就好了,然後sendMessage操作,傳送的是一個文字資訊。

禮物的展示列表最好用collectionview寫,各大直播平臺用的應該也是,i簡單方便

然後自己寫一個代理,在直播頁面呼叫:

這裡寫圖片描述
效果圖如下:

這裡寫圖片描述

這時候網易的IM內部的方法就有用了,我們用的是他的IM,他喲一個IM的包,header中包含這方法。
當我們傳送訊息時,他會呼叫如下方法:
首先,

這裡寫圖片描述

在這個操作中,我們需要更新本地的UI,需要做一次攔截工作。
然後,他會依次呼叫

這裡寫圖片描述

  • (void)onRecvMessages:(NSArray *)messages;;;;

在這個方法中我們收到訊息,操作攔截,然後使用執行緒處理禮物資訊,具體一點,還需要在這裡處理禮物的模型,將模型資訊儲存到陣列,然後,新增執行緒,執行緒在禮物Demo中已經封裝好,大家不用擔心,這樣UI就處理完畢。

備註:是因為代理寫錯了,不是執行緒的問題

最後附上禮物效果圖!

這裡寫圖片描述

重點:禮物效果動畫,並非我寫,希望大家支援原創
關於這個禮物動畫,涉及到了幀動畫,以及自動釋放池,寫的相當牛逼,效果雖然一般,但是不會卡。
https://github.com/chenzhenJG/PresentAnimation

有人問我扣費在哪裡進行?

答:這個需要在伺服器進行,在本地肯定是不行的,需要保證使用者資料的立即同步,否則會有風險,就像程式中加鎖一樣,不嗯能夠使用者在這個裝置的錢花沒了,另一個裝置還有呢!

此外,我還想說一句,就是要注意高內聚低耦合,冗餘程式碼要控制好,多自定義,不要在一個類中寫幾千行程式碼,後期維護累死你