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

ZYChat

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

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

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

消息類型目前擴展至: 文本,語音,音樂,網頁,鮮花特效,短視頻

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

項目運行截圖

項目代碼結構圖

項目新增功能?

直接在聊天界面播放音樂

新增送花功能

項目核心模塊注釋

ChatDetail 具體聊天

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

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

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

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

*GJGCChatFriendTextMessageCell, 文本內容顯示

*GJGCChatFriendImageMessageCell, 圖片內容顯示

*GJGCChatFriendAudioMessageCell, 語音內容顯示

*GJGCChatFriendTimeCell, 時間塊顯示

*SystemNoti 系統消息Cell,? 負責展示系統消息

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

*GJGCCommonFontColorStyle 全局風格控制

*GJGCCommonHeadView 全局頭像顯示

*GJGCChatContentEmojiParser 文本解析成圖文內容

*GJGCRefreshHeader 下拉刷新

*GJGCRefreshFooter 上拉加載

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

*ViewController

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

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

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

*GifLoadManager 本地Gif包管理

*Group 群聊管理

*SystemAssist 系統消息管理

RecentChat 最近會話

*GJGCRecentChatViewController 視圖管理層 *GJGCRecentChatCell 單行會話展示 *GJGCRecentChatModel 內容模型

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

Square 廣場

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

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

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

如何擴展消息類型

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

繼承GJGCChatFriendBaseCell 來擴展對話消息

GJGCChatFriendConstans 在關系綁定中將內容類型和新擴展的消息類型綁定

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

例子

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

在GJGCChatFriendConstans 實現 ContentType 和 Cell的綁定 *在創(chuàng)建GJGCChatFriendContentModel的時候將內容設置為GJGCChatFriendContentTypeGif就可以實現加載對應的gifCell

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

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

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

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

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

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

*is_support_display: 根據雙方本地的內容協議支持來確定,是否支持正常顯示這條擴展消息

工具類庫注釋 (Dependcy)

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

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

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

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

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

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

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

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

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

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

*AFNetworking 最好用的網絡庫

*AudioCoder 語音編碼庫,公開的

*DownloadManager 任務化下載組件

*FileUploadManager 任務化上傳組件

*FLAnimateImage 用于Gif表情展示

*GJCFAssetsPicker 自定義圖片選擇

*GJCFAuidoManager 播放和錄音

*GJCFCoreText 自定義圖文混排組件

*GJCFUitils 常用工具函數

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

*GJCUImageBrowase 大圖瀏覽組件

為什么做這個聊天室?

大家都在做App,可能各種需求,各種蛋疼的坑,老板說,我們就是要有個IM消息服務,但是還得能自己定義,那么OK,我們的目標來了,誰來寫呢,再寫一遍,很麻煩,ZYChat經過對話詳情頁瘋狂對發(fā)消息測試,沒有任何問題,所以,我們要得是一個真實的對話聊天項目,并且它是開源的,大家都可以來做一些自己想做的擴展,我們需要關心的就是,我們要做的是什么,如何使用它,節(jié)省我們的時間。所以,ZYChat-EaseMob就誕生了。

幫助我改進

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

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容