開源一個結合環(huán)信的iOS聊天框架:ZYChat-擁有很好的擴展性和流暢性坎炼,無與比擬的體驗

ZYChat

是一個實戰(zhàn)項目的聊天UI框架菠净,針對高頻次高速率刷新最近會話列表和實際對話頁面做了緩沖優(yōu)化,經(jīng)過測試會話使用的性能和體驗非常穩(wěn)定禁舷。

UI框架參考MVVM思想設計,并采用自身總結的一些常用設計模式,可以幫助你快速實現(xiàn)搭建多樣式的列表頁面毅往,代碼復用率可以有穩(wěn)定的提升牵咙。

ZYChat-EaseMob 是基于環(huán)信的UI項目應用實戰(zhàn),將ZYChat類庫和實際項目使用結合攀唯。

消息類型目前擴展至: 文本洁桌,語音,音樂侯嘀,網(wǎng)頁另凌,鮮花特效谱轨,短視頻

想更深入的探討學習請加QQ群:219357847

項目運行截圖

項目代碼結構圖

項目新增功能?

直接在聊天界面播放音樂

新增送花功能

項目核心模塊注釋

ChatDetail 具體聊天

*Resource 用到的圖片 *UITableViewCell 聊天所有的cell使用

*Base? ? ? 聊天內(nèi)容基類Cell,負責分發(fā)類型

*ChatCell? 聊天內(nèi)容Cell,? ? 負責處理聊天類型的消息展示

*GJGCChatFriendBaseCell , 基礎內(nèi)容Cell,包含消息顯示的:頭像吠谢,昵稱(根據(jù)會話類型顯示隱藏),氣泡,狀態(tài)

*GJGCChatFriendTextMessageCell, 文本內(nèi)容顯示

*GJGCChatFriendImageMessageCell, 圖片內(nèi)容顯示

*GJGCChatFriendAudioMessageCell, 語音內(nèi)容顯示

*GJGCChatFriendTimeCell, 時間塊顯示

*SystemNoti 系統(tǒng)消息Cell,? 負責展示系統(tǒng)消息

*View 聊天時候用到的自定義視圖和風格控制

*GJGCCommonFontColorStyle 全局風格控制

*GJGCCommonHeadView 全局頭像顯示

*GJGCChatContentEmojiParser 文本解析成圖文內(nèi)容

*GJGCRefreshHeader 下拉刷新

*GJGCRefreshFooter 上拉加載

*GJGCLoadingStatusHUD 加載HUD,基類初始化土童,全局可用

*ViewController

*Base 基礎類,負責分發(fā) 系統(tǒng)消息或者對話消息類型

*MessageExtend 消息類型擴展,基于環(huán)信的消息ext字段來擴展消息工坊,以支持gif等更多類型消息

*Friend 單聊會話献汗,群聊本質(zhì)上也是1v1會話,只是有一些特殊邏輯需要單獨處理王污,為了避免龐大的DataManager和ViewController,需要分開

*GifLoadManager 本地Gif包管理

*Group 群聊管理

*SystemAssist 系統(tǒng)消息管理

RecentChat 最近會話

*GJGCRecentChatViewController 視圖管理層 *GJGCRecentChatCell 單行會話展示 *GJGCRecentChatModel 內(nèi)容模型

*GJGCRecentChatDataManager 模型管理層 *GJGCRecentChatStyle 風格管理 *GJGCRecentChatTitleView 服務器連接狀態(tài)展示

Square 廣場

*CreateGroup 創(chuàng)建群組 *PublicGroup 廣場群組列表

GroupCommonUI 群組資料和個人資料展示

*GJGCGroupInformationViewController 群組資料展示 *GJGCPersonInformationViewController 個人資料展示

如何擴展消息類型

擴展消息類型需要做三件事情

繼承GJGCChatFriendBaseCell 來擴展對話消息

GJGCChatFriendConstans 在關系綁定中將內(nèi)容類型和新擴展的消息類型綁定

在創(chuàng)建內(nèi)容模型的時候罢吃,將內(nèi)容類型設置為新創(chuàng)建的內(nèi)容類型即可綁定

例子

*首先創(chuàng)建內(nèi)容展示的樣子,GJGCCHatFriendGifCell *在內(nèi)容模型中定義 gifLocalId , 在 GJGCChatFriendConstans 中定義內(nèi)容類型 GJGCChatFriendContentTypeGif

在GJGCChatFriendConstans 實現(xiàn) ContentType 和 Cell的綁定 *在創(chuàng)建GJGCChatFriendContentModel的時候?qū)?nèi)容設置為GJGCChatFriendContentTypeGif就可以實現(xiàn)加載對應的gifCell

如何基于環(huán)信的消息擴展字段配合GJGCMessageExtendModel實現(xiàn)擴展消息類型的目的

*userInfo : 用戶信息昭齐,始終從消息中帶過去尿招,根據(jù)App情況,也可以不用傳過去節(jié)省流量阱驾,這里我們是沒有服務器就谜,所以傳過去

*data: 擴展消息的內(nèi)容,看一下我們定義的一些常量key,對應的我們可以把需要擴展的內(nèi)容填充

*message_type: 擴展的消息類型啊易,類似常規(guī)時候的 text,gif,voice這些類型的定義方式

*is_message_extend: 是否是消息擴展吁伺,當不是擴展消息的時候饮睬,我們只讀用戶擴展信息userInfo就可以了

*display_text: 擴展消息應該展示的文本租谈,如果對方源碼不支持此擴展消息,相應這個文本會有變化

*is_support_display: 根據(jù)雙方本地的內(nèi)容協(xié)議支持來確定捆愁,是否支持正常顯示這條擴展消息

工具類庫注釋 (Dependcy)

*Base64 用于壓縮編碼字符串割去,在群信息壓縮的環(huán)節(jié)使用

*EaseMob 環(huán)信聊天服務SDK

*fmdb 最好用的Sqlite,在上面做了一層簡單的封裝,支持對象化CURD操作

*GJCFCachePathMananger 應用層全局的緩存目錄管理

*GJCUProgressView 自定義的一個進度展示

*SDWebImage 最好用的圖片緩存庫昼丑,目前基本全部使用此類庫來加載圖片

*JSONModel 實測使用最穩(wěn)定的Json轉(zhuǎn)模型呻逆,很好的自定義擴展,在項目中Json與模型轉(zhuǎn)化和生成都運用到了

*GJCURoundCornerView 取自另一個作者的一個控件菩帝,可以自定義四個角的圓角和試圖的bord情況

*GJCUCapture 根據(jù)Apple的AVCapture Demo 自定義的一個拍照的組件咖城,母的是解決iOS7.0 iPhone4,5下的拍照黑屏問題

*GJGCChatInputPnael 項目中對話使用的聊天輸入控制面板

*AFNetworking 最好用的網(wǎng)絡庫

*AudioCoder 語音編碼庫,公開的

*DownloadManager 任務化下載組件

*FileUploadManager 任務化上傳組件

*FLAnimateImage 用于Gif表情展示

*GJCFAssetsPicker 自定義圖片選擇

*GJCFAuidoManager 播放和錄音

*GJCFCoreText 自定義圖文混排組件

*GJCFUitils 常用工具函數(shù)

*GJCUAsyncImageView 自定義異步圖片加載呼奢,不是非常穩(wěn)定宜雀,目前底層全部改成SDWebImage加載

*GJCUImageBrowase 大圖瀏覽組件

為什么做這個聊天室?

大家都在做App握础,可能各種需求辐董,各種蛋疼的坑,老板說禀综,我們就是要有個IM消息服務简烘,但是還得能自己定義苔严,那么OK,我們的目標來了孤澎,誰來寫呢届氢,再寫一遍,很麻煩亥至,ZYChat經(jīng)過對話詳情頁瘋狂對發(fā)消息測試悼沈,沒有任何問題,所以姐扮,我們要得是一個真實的對話聊天項目絮供,并且它是開源的,大家都可以來做一些自己想做的擴展茶敏,我們需要關心的就是壤靶,我們要做的是什么,如何使用它惊搏,節(jié)省我們的時間贮乳。所以,ZYChat-EaseMob就誕生了恬惯。

幫助我改進

我知道這個代碼可能在很多大神面前都是不值得一提的東西向拆,但是,我希望幫助到它能夠幫助到得人就可以了酪耳。如果還有需要幫助咨詢的浓恳,可以給我發(fā)郵件1003081775@qq.com,如果感興趣可以聯(lián)系我加入一起開發(fā)完善此項目,謝謝大家支持,更多需要詳細解答問題的請加QQ群:219357847碗暗。

github下載地址:https://github.com/zyprosoft/ZYChat

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颈将,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子言疗,更是在濱河造成了極大的恐慌晴圾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件噪奄,死亡現(xiàn)場離奇詭異死姚,居然都是意外死亡,警方通過查閱死者的電腦和手機勤篮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門都毒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叙谨,你說我怎么就攤上這事温鸽。” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵涤垫,是天一觀的道長姑尺。 經(jīng)常有香客問我,道長蝠猬,這世上最難降的妖魔是什么切蟋? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮榆芦,結果婚禮上柄粹,老公的妹妹穿的比我還像新娘。我一直安慰自己匆绣,他們只是感情好驻右,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崎淳,像睡著了一般堪夭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拣凹,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天森爽,我揣著相機與錄音,去河邊找鬼嚣镜。 笑死爬迟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的菊匿。 我是一名探鬼主播付呕,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捧请!你這毒婦竟也來了凡涩?” 一聲冷哼從身側響起棒搜,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤疹蛉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后力麸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體可款,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年克蚂,在試婚紗的時候發(fā)現(xiàn)自己被綠了闺鲸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡埃叭,死狀恐怖摸恍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤立镶,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布壁袄,位于F島的核電站,受9級特大地震影響媚媒,放射性物質(zhì)發(fā)生泄漏嗜逻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一缭召、第九天 我趴在偏房一處隱蔽的房頂上張望栈顷。 院中可真熱鬧,春花似錦嵌巷、人聲如沸萄凤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛙卤。三九已至,卻和暖如春噩死,著一層夾襖步出監(jiān)牢的瞬間颤难,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工已维, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留行嗤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓垛耳,卻偏偏與公主長得像栅屏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子堂鲜,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容