使用Kotlin+Jetpack+Flow高仿微信商业级聊天项目-基于腾讯即时通讯和实时音视频服务

·  阅读 288

简介

不知道有多少人心中有个梦想(当然我们梦想比较多😝,还想使用虚幻引擎开发一款类似吃鸡和COD16结合的游戏,Windows/Mac版本我饿云音乐等),要开发一款类型微信,QQ,钉钉等即时通讯软件,可以自己部署,也能公司内部使用,甚至能上线运营(显然目前很少有公司会做这样一个软件运营,因为这些市场都被这几大软件占领了),界面一定要美观,因为这都21世纪了,项目的交互大体和微信差不多,因为我们个人觉得微信大部分配色,交互都不错;当然大家应该也非常熟悉即时通讯聊天软件了,虽然看着大部分功能不复杂,但有很多细节要处理,例如:聊天界面,消息容器宽度,消息类型,还要有多选等等,当然也有一些功能比较复杂,还没有找到好的实现方法,如果大家有好的方法可以联系我们一起交流,例如:聊天界面长按消息显示像微信,QQ,钉钉那样的自定义菜单;还有像音视频通话界面可以关闭,然后显示一个悬浮窗,甚至直接杀死微信,还会显示悬浮窗,通话无任何影响;还有就是像微信,QQ,钉钉等软件那样,收到音视频通话请求,直接在后台显示一个界面;还有就是如何让自己写的应用不被国内大部分手机厂商折叠通知等等,期望的是后面能达到直接上线运营的效果,但目前还有很多功能,以及细节,同时受限于第三方SDK有些功能还没有实现,或者不好实现。

效果图

登录/会话界面/通讯录/聊天界面/自定义表情/更多界面

群聊详情/好友详情/添加朋友/发送位置

深色模式/音视频通话界面

已有功能

  • 登录注册,退出
  • 更改用户昵称,头像
  • 添加好友,群
  • 发送消息:支持文本,图片,视频,文件,Emoji,大表情,位置,语音
  • 支持单聊,群聊音视频通话
  • 群聊功能:创建群聊,解散群聊,更改群聊资料,设置禁言,设置管理员,邀请/移除成员,设置群名片
  • 消息离线推送:目前集成了小米推送
  • 转发消息:因为SDK不支持,目前只能转发文本消息
  • 引用消息:因为SDK不支持,目前只能引用文本消息
  • 全局搜索:因为SDK不知道,目前只能本地搜索我添加的好友,添加的群聊
  • 二维码:显示我的,好友,群聊二维码,并支持扫描二维码
  • 其他聊天功能:会话置顶,会话免打扰(因为SDK不支持,单聊离线消息无效),标记未读,设置聊天界面背景
  • 统计服务:集成了Umeng,支持总用户,活跃,崩溃统计
  • 其他功能:文件预览,深色模式

已经实现的功能

  • 重构音视频通话封装:目前封装用的官方Demo提供的代码,个人觉得他们封装的不是很好,期望封装后,能实现支持关闭通话界面:类似微信那样,同时通话中邀请人加入,在群里界面能主动加入等。
  • 聊天界面表情和键盘切换会有跳动,可以参考这个两个开源项目(好像没有这问题):SmartKeyboardManagerMyEmjkeyBoard
  • 预览当前位置媒体文件,其他位置视频媒体会播放。
  • 重写图片选择框架,主要是重构代码,和布局,让功能更完善,界面更美观,扩展性更强,期望最后能单独开源。
  • 重构对话框功能,主要是重构代码,和布局,让功能更完善,界面更美观,扩展性更强,期望最后能单独开源。
  • 重构选择文件功能,主要是重构代码,和布局,让功能更完善,界面更美观,扩展性更强,期望最后能单独开源。
  • 重构群聊天界面,和我不相关的音视频通话消息,消息为加群那样的简单提示。
  • 重构项目,将大部分功能更改为更适合Jetpack规范的实现。
  • 内测泄露和性能优化:目前项目还有些地方有内存泄露,部分功能写法性能也不是很好。
  • 禁言后不能在转发消息到该会话。
  • 应用后台,如果应用被系统杀死,再返回,直接调用腾讯SDK会报错未登陆,需要腾讯SDK,但如果每次调用前都检查是否登录,会比较复杂,目前还没找到好的解决方法。
  • 如果是点击音视频通话通知进入启动界面,不要显示等待时间。

还未实现的功能

  • 转发消息时能预览消息,类似微信,QQ转发消息效果。
  • 播放语音消息时,实现类型微信,钉钉那样靠近耳朵时切换听筒播放。
  • 实现能从系统分享各种型类型消息到我们应用,类型微信,QQ等。
  • 集成其他厂商离线推送通话。
  • 支持转账,发送红包。
  • 实现类型微信公众号基础功能:例如:后台可以设置某个账号为公众号,然后可以配置菜单,并能自动做出一些回复。

期望最终效果

  • 除了第三方SDK无法实现,或者不好实现的功能外,其他功能都能使用,并且能稳定,达到可以上线运营的状态。
  • 后面还有用融云即时通讯服务/WebSocket单独实现两个版本。

用途

  • 学习,毕业设计,面试项目
  • 基于该项目上线运营,或者做外包,或者内部私有聊天(这个版本音视使用第三方SDK,无法使用部署,后面WebSocket实现的版本才能);交互请勿直接商用。

开发环境

Android客户端:Android Studio 4.1 + Kotlin 1.4 + Gradle 6.5 Spring Boot服务端:IntelliJ IDEA 2020 + Java 15 + Gradle 6.7 服务端数据库:MySQL,开发环境8.0 + 线上环境5.7 项目开发环境:macOS 11.2 + Java 15

核心知识点

Kotlin,Jetpack,MVVM,Flow,MVC,矢量图,Lifecycle,动态权限,Emoji,EventBus,高德地图,视频播放,Hilt依赖注入,内存泄漏检测和修复,腾讯即时通讯,腾讯实时音视频。

分类:
Android
标签:
分类:
Android
标签:
收藏成功!
已添加到「」, 点击更改