这是一个[Twitch](https://www.twitch.tv/)克隆应用,使用__[Stream Chat SDK for Compose](https://getstream.io/tutorials/android-chat?utm_source=Github&utm_medium=Jaewoong_OSS&utm_content=Developer&utm_campaign=Github_Dec2023_Jaewoong_TwitchCompose&utm_term=DevRelOss)__实现消息系统,并使用__[Stream Video SDK for Compose](https://getstream.io/video/sdk/android/tutorial/livestreaming?utm_source=Github&utm_medium=Jaewoong_OSS&utm_content=Developer&utm_campaign=Github_Dec2023_Jaewoong_TwitchCompose&utm_term=DevRelOss)__基于Jetpack Compose构建。
本仓库旨在展示以下内容:
- 使用Jetpack Compose实现所有UI元素。
- 使用Hilt和AppStartup等Jetpack库实现Android架构组件。
- 使用Kotlin协程执行后台任务。
- 集成Stream Chat SDK以处理实时事件的聊天系统。
- 集成Stream Video SDK,使用底层WebRTC技术实现视频通话系统。
:bulb: 额外的仓库
如果你对使用Jetpack Compose和Stream SDK构建的其他仓库感兴趣,可以查看以下仓库:
📲 下载APK
前往发布页面下载最新的APK。
📷 预览
## 🛥 Stream 聊天和视频 SDK
Twitch Clone Compose 使用 Stream Chat SDK for Compose 实现消息系统和 Stream Video SDK for Compose。
如果你对在应用中添加强大的应用内消息功能感兴趣,请查看 Android 聊天消息教程 或 Android 视频聊天教程。
Stream 聊天
Stream 视频
💻 构建您自己的Twitch项目
如果您想构建自己的聊天项目,请按以下说明操作:
- 前往 Stream登录页面。
- 如果您有GitHub账号,点击 使用GITHUB登录 按钮,几秒钟内即可完成注册。
- 如果您没有GitHub账号,填写输入框并点击 开始免费试用 按钮。
- 进入 仪表板 并如下图所示点击 创建应用 按钮。
- 如下图所示填写空白处,然后点击 创建应用 按钮。
- 您将看到如下图所示的 密钥,然后复制它。
- 在项目根目录创建一个
secrets.properties
文件,使用您的API密钥填写以下内容:
STREAM_API_KEY=替换为您的API密钥
- 构建并运行项目。
## 🛠 技术栈和开源库
- 最低 SDK 级别 24。
- 100% 基于 [Jetpack Compose](https://developer.android.com/jetpack/compose) + [协程](https://github.com/Kotlin/kotlinx.coroutines) + [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/) 用于异步操作。
- [Compose 聊天 SDK 用于消息传递](https://getstream.io/chat/sdk/compose?utm_source=Github&utm_medium=Jaewoong_OSS&utm_content=Developer&utm_campaign=Github_Dec2023_Jaewoong_TwitchCompose&utm_term=DevRelOss):Jetpack Compose 聊天消息 SDK 基于低级聊天客户端构建,提供模块化、可定制的 Compose UI 组件,可轻松集成到您的应用中。
- [Compose 视频 SDK 用于直播](https://getstream.io/video/docs/android/tutorials/livestream?utm_source=Github&utm_medium=Jaewoong_OSS&utm_content=Developer&utm_campaign=Github_Dec2023_Jaewoong_TwitchCompose&utm_term=DevRelOss):这是 Stream Video 的官方 Android SDK,用于构建视频通话、音频聊天室和直播应用程序。
- Jetpack
- Compose:Android 用于构建原生 UI 的现代工具包。
- ViewModel:UI 相关数据持有者和生命周期感知组件。
- App Startup:提供一种直接、高效的方式在应用启动时初始化组件。
- Navigation:用于屏幕导航,以及 [Hilt Navigation Compose](https://developer.android.com/jetpack/compose/libraries#hilt) 用于依赖注入。
- Room:通过提供 SQLite 的抽象层来构建数据库,实现流畅的数据库访问。
- [Hilt](https://dagger.dev/hilt/):依赖注入。
- [Landscapist Coil](https://github.com/skydoves/landscapist#coil)、[animation](https://github.com/skydoves/landscapist#animation)、[placeholder](https://github.com/skydoves/landscapist#placeholder):Jetpack Compose 图片加载库,使用 Glide、Coil 和 Fresco 获取并显示网络图片。
- [accompanist](https://github.com/google/accompanist):Jetpack Compose 的扩展库集合。
- [Retrofit2 & OkHttp3](https://github.com/square/retrofit):构建 REST API 和分页网络数据。
- [Sandwich](https://github.com/skydoves/sandwich):Sandwich 是一个可适应的轻量级密封 API 库,专为处理 Kotlin 中的 API 响应和异常而设计,适用于 Retrofit、Ktor 和 Kotlin Multiplatform。
- [ksp](https://github.com/google/ksp):Kotlin 符号处理 API。
- [StreamLog](https://github.com/GetStream/stream-log):一个轻量级且可扩展的 Kotlin 和 Android 日志库。
- 基准配置文件:通过在 APK 中包含类和方法规范列表来提高应用性能,这些规范可被 Android Runtime 使用。
## 🏛️ 架构
**Twitch Clone Compose** 遵循[Google的官方架构指南](https://developer.android.com/topic/architecture)。
![架构](https://yellow-cdn.veclightyear.com/835a84d5/4f12f4a0-8e74-46bb-aebf-50d33f8188c5.png)
**Twitch Clone Compose** 是按照[应用架构指南](https://developer.android.com/topic/architecture)构建的,因此它是展示架构如何在实际项目中运作的绝佳样例。
整体架构由两层组成:UI层和数据层。每一层都有专门的组件,各自承担不同的职责。
箭头表示组件依赖于其指向的目标组件。
架构概览
每一层都有以下不同的职责。基本上,它们遵循单向事件/数据流。
UI层
UI层由可与用户交互的UI元素(如按钮、菜单、标签页)和ViewModel组成,ViewModel用于保持应用状态并在配置变更时恢复数据。
数据层
数据层由仓库组成,包含业务逻辑,如从本地数据库查询数据和从网络请求远程数据。它实现为离线优先的业务逻辑源,并遵循单一数据源原则。
有关整体架构的更多信息,请查看**使用Jetpack Compose构建实时WhatsApp克隆**。
💯 MAD 评分
🤝 贡献
除了聊天功能外,大多数功能尚未完成,因此任何人都可以按照贡献指南为这个项目做出贡献并改进。
觉得这个仓库有用吗? 💙
通过加入此仓库的 星标用户 来支持它。 :star:
同时,在 GitHub 上关注 维护者 ,期待我们的下一个作品! 🤩
许可证
版权所有 2023 Stream.IO, Inc. 保留所有权利。
根据 Apache 许可证 2.0 版("许可证")授权;
除非遵守许可证,否则您不得使用此文件。
您可以在以下网址获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可证分发的软件是基于"按原样"分发的,
不附带任何明示或暗示的担保或条件。
有关许可证下的特定语言管理权限和限制,请参阅许可证。