項目地址
主項目: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 互相爲好友關係
【添加好友流程】
情景一,新的添加工具
- A經過暱稱或其餘信息搜索到用戶B
- A調用接口申請添加好友B
- 服務端先判斷好友關係數據庫中AB是否有關係
- 若是已是好友,則返回已添加提示
- 若是A曾經向B提交過申請,則返回成功申請提示,可是數據庫中再也不重複添加好友關係
- 若是是B已經向A提交過申請,則直接relation=1雙方改成好友
- 若是雙方不要緊,則表中插入一條信息 AUser BUser -1,表明A向B發出了好友申請。同時向B發送一條IM系統消息「xxx申請添加您爲好友」
情景二,贊成設計
- B收到A的好友申請,在新的好友中顯示
- 贊成添加好友
服務端接受到B的贊成請求後,將A和B的關係修改成好友,即表中的對應數據修改成 AUser BUser 1
【新的好友】
只有兩種狀況:對方加我了,顯示「贊成」、贊成後顯示「已添加」
注意,我申請加別人不在新的好友中顯示
因此獲取新的好友列表的服務端設計爲:3d
- 查詢tarUser是個人全部關係列表數據,且relation=-1表明其餘人對當前用戶提交的好友申請,而後返回全部的申請用戶
- 「已添加」狀況來源於本地數據庫,只有在收到請求且贊成後才修改展現(本功能2.0實現)
展現頁面