從零開始開發乙個即時通訊專案

2021-09-16 13:49:06 字數 3792 閱讀 5746

關於聊天室專案

聊天室專案,也被稱為即時通訊(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公共模組,對應的是資料庫表對應的實...