基于【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
相关文章
相关标签/搜索