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

简介

不知道有多少人心中有个梦想(当然我们梦想比较多😝,还想使用虚幻引擎开发一款类似吃鸡和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依赖注入,内存泄漏检测和修复,腾讯即时通讯,腾讯实时音视频。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容