这是一个使用 Stream Chat SDK for Compose 实现消息系统和 Stream Video SDK for Compose 使用 Jetpack Compose 构建的 WhatsApp 克隆应用。
该存储库的目的是展示以下内容:
- 使用 Jetpack Compose 实现所有 UI 元素。
- 使用 Hilt 和 AppStartup 等 Jetpack 库实现 Android 架构组件。
- 使用 Kotlin 协程执行后台任务。
- 集成 Stream Chat SDK 以进行实时事件处理的聊天系统。
- 集成使用 WebRTC 的 Stream Video SDK 进行视频通话系统。
✍️ 技术内容
如果您对本项目使用的整体架构、各个层级和 Compose 主题感兴趣,请查看以下博客文章:
- 第 1 部分:使用 Jetpack Compose 构建实时 WhatsApp 克隆
- 第 2 部分:使用 Jetpack Compose 为您的 Android WhatsApp 克隆构建视频通话功能
:bulb: 其他存储库
如果您对使用 Jetpack Compose 和 Stream SDK 构建的其他存储库感兴趣,请查看以下存储库:
- ChatGPT Android:📱 ChatGPT Android 使用 Stream Chat SDK for Compose 在 Android 上展示 OpenAI 的 ChatGPT。
- Twitch Clone Compose:🎮 Twitch 克隆项目使用 Jetpack Compose 和 Stream Chat/Video SDK for Compose 展示现代 Android 开发。
- Slack Clone Android:📱 使用 Jetpack Compose 和 Stream Chat SDK 遵循清洁架构原则构建的聊天演示应用。
- Stream Draw Android:🛥 Stream Draw 是一款完全使用 Jetpack Compose 构建的实时多人绘画和聊天游戏应用。
- Meeting Room Compose:🎙️ 使用 Jetpack Compose 构建的实时会议室应用,用于演示视频通信。
- Facebook Messenger Clone:使用 Stream SDK 和 Jetpack Compose 的 Facebook Messenger 克隆。
📲 下载 APK
前往 Releases 下载最新的 APK。
🛥 Stream Chat 和 Video SDK
WhatsApp Clone Compose 使用 Stream Chat SDK for Compose 实现消息系统和 Stream Video SDK for Compose 构建。 如果您有兴趣为您的应用添加强大的应用内消息功能,请查看 Android 聊天消息教程!
Stream Chat
Stream Video
💻 构建您自己的聊天项目
如果您想构建自己的聊天项目,请按照以下说明操作:
- 前往 Stream 登录页面。
- 如果您有 GitHub 帐户,点击 SIGN UP WITH GITHUB 按钮,您可以在几秒钟内完成注册。
- 如果您没有 GitHub 帐户,填写输入框并点击 START FREE TRIAL 按钮。
- 前往 Dashboard 并点击如下所示的 Create App 按钮。
- 填写如下所示的空白处,然后点击 Create App 按钮。
- 您将看到如下图所示的 Key,然后复制它。
- 在项目根目录创建一个
secrets.properties
文件,使用您的 API 密钥填写以下内容:
STREAM_API_KEY=替换为您的 API 密钥
- 构建并运行项目。
📷 预览
🛠 技术栈和开源库
- 最低SDK级别21。
- 100%基于Jetpack Compose + Coroutines + Flow用于异步。
- Compose聊天SDK用于消息传递:Jetpack Compose聊天消息SDK建立在低级聊天客户端之上,提供模块化、可定制的Compose UI组件,可以轻松集成到您的应用中。
- Compose视频SDK用于视频通话)
- Jetpack
- Compose:Android用于构建原生UI的现代工具包。
- ViewModel:UI相关数据持有者和生命周期感知。
- App Startup:提供一种简单高效的方式在应用启动时初始化组件。
- Navigation:用于屏幕导航和Hilt Navigation Compose用于依赖注入。
- Room:通过提供SQLite的抽象层来构建数据库,允许流畅的数据库访问。
- Hilt:依赖注入。
- Landscapist Glide、animation、placeholder:Jetpack Compose图像加载库,使用Glide、Coil和Fresco获取和显示网络图像。
- accompanist:Jetpack Compose的扩展库集合
- Retrofit2 & OkHttp3:构建REST API和分页网络数据。
- Retrofit adapters:Retrofit适配器,用于使用Kotlin Result、Jetpack Paging3和Arrow Either建模网络响应。
- ksp:Kotlin符号处理API。
- sealedx:Kotlin符号处理器,用于自动生成广泛的密封类和接口。
- StreamLog:轻量级且可扩展的Kotlin和Android日志库。
- Baseline Profiles:通过在APK中包含类和方法规范列表来改善应用性能,可供Android Runtime使用。
🏛️ 架构
WhatsApp Clone Compose遵循Google的官方架构指南。
WhatsApp Clone Compose是基于应用架构指南构建的,因此它是展示架构如何在实际项目中工作的绝佳示例。
整体架构由两层组成:UI层和数据层。每层都有专门的组件,它们各自有不同的职责。 箭头表示组件对目标组件有依赖关系,按其方向。
架构概览
每层都有以下不同的职责。基本上,它们遵循单向事件/数据流。
UI层
UI层由UI元素组成,如按钮、菜单、标签等可与用户交互的元素,以及ViewModel,用于保存应用状态并在配置更改时恢复数据。
数据层
数据层由存储库组成,其中包括业务逻辑,例如从本地数据库查询数据和请求远程网络数据。它被实现为离线优先的业务逻辑源,并遵循单一真实来源原则。
有关整体架构的更多信息,请查看**使用Jetpack Compose构建实时WhatsApp克隆**。
模块化
WhatsApp Clone Compose采用了以下模块化策略:
-
可重用性:适当地模块化可重用代码,为代码共享创造机会,同时限制其他模块中的代码可访问性。
-
并行构建:每个模块可以并行运行,从而减少构建时间。
-
分散关注:每个开发团队可以分配他们专门的模块,他们可以专注于自己的模块。
💯 MAD评分
🤝 贡献
除了聊天功能外,大多数功能尚未完成,因此任何人都可以按照贡献指南贡献和改进这个项目。
觉得这个仓库有用吗?💙
通过加入这个仓库的__stargazers来支持它。:star:
另外,在GitHub上关注维护者__,了解我们的下一个创作!🤩
许可证
Copyright 2022 Stream.IO, Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.