基於【LeanCloud + 融雲】的IM聊天應用 v1.0

項目地址

主項目:github.com/boredream/B…
依賴主model:github.com/boredream/b…
服務端代碼:github.com/boredream/B…git

歡迎 Star和Follow~
注意:
  • 網絡框架、經常使用工具類封裝在了依賴主model:bdcodehelper中了,是單獨放在一個git項目裏的,所以須要手動下載而後複製到主項目目錄下。
  • 服務端代碼須要登陸LeanCloud才能部署,所以若是須要自定義修改從新部署請參考LeanCloud相關文檔自行申請帳號替換配置而後部署。

項目總結

開發週期:2.5周

7.3 ~ 7.20
(實際開發天數:10 天)github

頁面:15個

  • Splash頁面
  • 登陸頁面
  • 忘記密碼
  • 註冊頁面
  • 會話列表(融雲)
  • 通信錄
  • 個人
  • 會話頁面(融雲基礎上稍微修改)
  • 會話詳情
  • 成員列表修改頁面
  • 新的朋友
  • 添加好友
  • 好友詳情
  • 修改信息
  • 修改暱稱

接口:14個

其中雲引擎方法5個(服務端須要些代碼)數據庫

存在的問題

  • 相似的頁面好比通信錄和添加好友時候的好友列表,不知道咋提取封裝更好。
    是直接複用同一個頁面?同一個Adapter?仍是隻同一個ViewHolder
  • RxJava使用不夠熟練
  • 數據返回頁面若是不在了,怎麼處理更好?不太想用RxLifeCycler的那套
  • 圖片壓縮的東西,由於是用到了Glide因此須要Context對象,咋放到presetner裏呢~

複雜的業務分析

最核心的部分實際上是會話列表聊天頁面啥的,可是融雲已經封裝好了,這裏本着實用的角度就不重複造輪子了,直接使用~網絡

我的以爲最麻煩的點在於好友關係的處理
就是申請添加、接受、新的好友等相關業務上框架

好友關係設計

服務端保存一個好友關係FriendRelation表,仨字段,srcUser, targetUser, relation
其中relation字段:ide

  • -1 src申請加target好友
  • 1 互相爲好友關係

【添加好友流程】
情景一,新的添加工具

  1. A經過暱稱或其餘信息搜索到用戶B
  2. A調用接口申請添加好友B
  3. 服務端先判斷好友關係數據庫中AB是否有關係
    1. 若是已是好友,則返回已添加提示
    2. 若是A曾經向B提交過申請,則返回成功申請提示,可是數據庫中再也不重複添加好友關係
    3. 若是是B已經向A提交過申請,則直接relation=1雙方改成好友
    4. 若是雙方不要緊,則表中插入一條信息 AUser BUser -1,表明A向B發出了好友申請。同時向B發送一條IM系統消息「xxx申請添加您爲好友」

情景二,贊成設計

  1. B收到A的好友申請,在新的好友中顯示
  2. 贊成添加好友
    服務端接受到B的贊成請求後,將A和B的關係修改成好友,即表中的對應數據修改成 AUser BUser 1

【新的好友】
只有兩種狀況:對方加我了,顯示「贊成」、贊成後顯示「已添加」
注意,我申請加別人不在新的好友中顯示
因此獲取新的好友列表的服務端設計爲:3d

  • 查詢tarUser是個人全部關係列表數據,且relation=-1表明其餘人對當前用戶提交的好友申請,而後返回全部的申請用戶
  • 「已添加」狀況來源於本地數據庫,只有在收到請求且贊成後才修改展現(本功能2.0實現)

展現頁面

登錄.png
登錄.png

會話列表.png
會話列表.png

會話頁面.png
會話頁面.png

會話詳情.png
會話詳情.png

發起羣聊.png
發起羣聊.png

搜索好友.png
搜索好友.png

新的朋友.png
新的朋友.png

詳細資料.png
詳細資料.png

個人.png
個人.png
相關文章
相關標籤/搜索