關於聊天室專案
聊天室專案,也被稱為即時通訊(im)。
比如極光 im
因為之前用的比較多的是極光的推送服務,也對極光的一些服務和開發文件比較熟悉,所以該專案就是完全使用極光的 sdk。
im 的應用場景
介紹:該場景只需要一些基礎的聊天功能,直接繼承第三方 im 的優點是不需要後台去實現一大堆東西,前端可以直接根據極光im文件去使用定義好的方法,就可以實現相關功能,開發起來非常快。
應用示例:脈脈、內涵段子
介紹:這類軟體是乙個完整的即時通訊專案,功能已經不僅僅侷限於簡單的訊息的收發。可以滿足乙個即時通訊類的絕大部分功能。極光官方提供的有即時通訊 demo1,包括 ui 等都實現了,只需要簡單配置就可以用。這個專案已經在github 開源。可以參考開發或者在此基礎上做另外的功能開發都會比較方便。
極光 message 整體特性:
平台支援:android, ios,web 多平台互通。
使用者維護:註冊、登入、頭像、使用者其他資訊。
群組維護:建立群組、**、退群。
離線訊息:可選擇是否需要儲存離線訊息
關係模式:有好友模式和無好友模式
跨應用聊天:不同應用下的使用者可相互通訊
我的專案——整體 ui 介面概述
目前已經實現的功能大致就這麼多
所有的聊天都基於登入狀態操作,也就是說未登入是不能操作的。
1、註冊和登陸
兩種方式: 註冊並登陸或者直接登入。
如果第一次登入過,就會把賬號等資料快取到本地,再次開啟就可以自動登入。
使用者名稱和密碼規範限制長度限制 byte(4~128) 使用者名稱:以字母或者數字開頭。支援字母、數字、下劃線、英文點、減號、 @。 密碼:不限2、新增好友兩種方式:好友通知是本地資料庫快取的訊息通知,也就是只有在收到好友請求時,才會把傳送過來的請求資訊存放到本地。當然如果清空了資料,那就查不到申請記錄了。
3、聯絡人建立
這裡是根據極光文件建立的好友關係,其實官方提供的說明是 不需要建立好友關係就能會話,但是這裡為了專案的一些需要,使用了極光提供的一套聯絡人介面來操作好友。
4、更新資料
修改個人資料,頭像相關操作,對好友的備註、黑名單等功能還未開發。
在第一次註冊的時候,在註冊成功的情況下會預設自動登陸,並且預設設定個人資料的一些引數。比如頭像,暱稱等。防止在更新資料的時候部分字段提示空的錯誤。
5、設定
設定會在安裝的時候初始化,預設只開啟漫遊的開關。其他開關需要手動,修改密碼也是。
技術開發路線
除了對朋友圈的功能,其他都可以借助極光 im 的 sdk 實現,這一塊會放到最後,具體實現方法還未確定。
包括基本的註冊登入功能,可以開始正常會話。
賬號是基礎,所有的會話都是建立在兩個賬號之間的通訊,而服務端(jmessage)只是作為兩端之間訊息傳播的橋梁和媒介。
所以賬號是建立兩個點的基石。
當這個基礎建立起來之後,為了區分各自的不同,如過單靠 id,相信沒人知道對方是誰。為了區分需要我們對這個 id 進行特徵設定,這些特徵包括頭像、暱稱、年齡、性別、地域等。
當使用者角色屬性建立起來之後,就是建立關係,在極光中預設是不需要建立好友關係就可以會話。但是我們前台需要展現給使用方,作為乙個標識來區分好友。
所以這裡是要做手動關聯好友,既然做了好友系統,那麼必不可少的就是申請好友和通過申請。
好友系統建立起來之後,需要開始進行會話,只有建立了會話之後,才會出來聊天視窗。
注意這裡會話和聊天是兩個概念。有會話不一定有聊天記錄。同樣刪除了所有的聊天記錄,會話視窗還是存在。
所以還要對訊息操作的時候,選擇清空訊息記錄,或者清空並刪除會話。
乙個產品的開端一定是乙個最主要的基礎功能,而這個最基礎的功能就是聊天在前四個階段已經可以完成正常的會話,後面的就屬於拓展階段。
如果進度比較快的話,還可以把好友新增備註等。
群組作為另乙個大的功能,作為之前版本穩定,並且大部分功能能完善之後開發的版本。
而且群組涉及的技術,**操作,並不比單聊少。所以從時間上來看,放在後面開發也是應該的。
目前也只有這塊需要單獨的去開發相應的功能。或者技術上有問題,也可以開發乙個類似諮詢的介面。
在這裡需要用到分享、載入、重新整理等。
技術框架選擇
由於是個人快速開發,為了提高開發速度和效率,所以在很多地方都是用了第三方框架。
其中用的最多的是極光,不僅僅是依賴於極光即時通訊服務,後期還會引入統計、分享等相關的 sdk 。
即時通訊im
這也是整個專案的核心功能。
推送
不過後面才知道,整合了 jmessage 之後,就不需要整合推送了,但是兩者之前並沒有什麼衝突,如果後面有新需求的話,需要推送再說吧。
儲存
主要使用了兩種方式:
用來儲存一些資料多的,在專案中主要應用的地方是好友請求的儲存,和搜尋歷史的儲存。
網路相關
由於第三方已經封裝過了網路載入,所以這裡僅僅需要乙個載入的方法,當然用 glide 也是一樣的。
picasso 在載入的時候需要的引數可以是 file、string、uri、int。而在請求返回的結果也無非是這幾種,所以完全可以滿足載入的需要。
工具
ui庫
如果說前面的第三方庫是為了減少資料的操作,那麼ui則是減少介面的複雜性,增加擴充套件性。增強視覺效果。
目前對話列表的布局已經支援自定義的 viewholder
後期需要增加的庫
總結專案已經上線,部分功能還未完善,後期還需要增**組聊天,資訊等功能。
可以持續關注本專案 wapchief/android-im4
由於個人也是第一次開發即時通訊類的專案,所以部分邏輯還不夠嚴謹,在使用中可能會多多少少遇到一些問題,如果某些地方有 bug,還望能指正。
需要優化細節的地方還有很多,在有時間的情況下會一一完善。
如果想測試聊天效果的話也可以新增1006機械人。
專案中用的 icon 基本上都來自阿里巴巴向量圖,感謝相關作者的貢獻
從零開始利用XMPP做即時通訊ios篇(二)
一 即時通訊技術簡介 2.有許多的im系統,如aol im yahooim msn以及qq,它們最大的區別在於各自通訊協議的實現,所以即時通訊技術的核心在於它的傳輸協議 4.人們多次努力,試圖統一各大主要im 商的標準 aol yahoo及microsoft 但無一成功,且每一種im仍然繼續使用自己...
如何用Eggjs從零開始開發乙個專案(3)
獲取token中的資料 通過model來同步資料庫。使用者登入的時候我們已經使用者的一些基本資訊加密儲存到token中,通過路由配置我們能簡單的去控制哪些介面需要登入,哪些介面不需要登入,但是如果再細化到使用者或者使用者角色,只是從路由層面就難以控制了,我們需要拿到使用者資訊,並將使用者資訊儲存在s...
怎麼從零開始寫乙個秒殺專案
一,環境搭建 技術選型,該秒殺專案是採用springboot2.0和springcloud來開發的 1首先搭建父專案,所有的模組都是依賴該父專案 2搭建服務註冊中心模組 eureka 3秒殺使用者模組 整合mybatis,web,thymeleaf等 相當於買家 4公共模組,對應的是資料庫表對應的實...