基于 HarmonyOS NEXT 的 Telegram 客户端,使用 ArkTS/ArkUI 开发,实现完整的 MTProto 2.0 协议。
- ✅ 完整的 MTProto 2.0 协议实现 (Layer 214)
- ✅ 手机号登录/注册
- ✅ 聊天列表和消息
- ✅ 发送/接收文本消息
- ✅ 图片和视频的发送/接收/预览
- ✅ 语音消息
- ✅ 文件传输
- ✅ 跨数据中心文件下载
- ✅ 会话持久化
git clone https://github.com/ForestBook/TelegramHarmony.git
cd TelegramHarmony你需要获取自己的 Telegram API 凭证才能运行此应用。
- 访问 https://my.telegram.org/apps
- 登录你的 Telegram 账号
- 创建一个新应用,获取
api_id和api_hash - 复制凭证模板文件:
cp entry/src/main/ets/core/mtproto/ApiCredentials.template.ets \
entry/src/main/ets/core/mtproto/ApiCredentials.ets- 编辑
ApiCredentials.ets,填入你的凭证:
export const PROD_API_ID: number = 你的API_ID
export const PROD_API_HASH: string = '你的API_HASH'- 启动 DevEco Studio 5.0+
- 选择 "Open Project" 并选择 TelegramHarmony 目录
- 同步项目依赖 (Sync Project)
- 连接 HarmonyOS 设备或启动模拟器
- 点击 Run 按钮
TelegramHarmony/
├── AppScope/ # 应用级配置
│ ├── app.json5 # 应用配置
│ └── resources/ # 应用级资源
│
├── entry/ # 主入口模块
│ └── src/main/
│ ├── ets/
│ │ ├── entryability/ # 入口 Ability
│ │ ├── pages/ # 页面
│ │ │ ├── Index.ets # 启动页
│ │ │ ├── LoginPage.ets # 登录页
│ │ │ ├── VerifyCodePage.ets # 验证码页
│ │ │ ├── ChatListPage.ets # 聊天列表页
│ │ │ └── ChatPage.ets # 聊天详情页
│ │ ├── viewmodel/ # 视图模型
│ │ │ ├── LoginViewModel.ets
│ │ │ ├── ChatListViewModel.ets
│ │ │ └── ChatViewModel.ets
│ │ ├── components/ # UI 组件
│ │ │ ├── Avatar.ets
│ │ │ ├── ChatListItemView.ets
│ │ │ ├── MessageBubble.ets
│ │ │ └── InputBar.ets
│ │ └── app/ # 应用状态
│ │ └── AppState.ets
│ └── resources/ # 模块资源
│
├── common/
│ └── signalkit/ # 响应式框架 (HAR)
│ └── src/main/ets/
│ ├── Signal.ets # 信号类
│ ├── ValueSignal.ets # 值信号
│ └── Disposable.ets # 资源管理
│
└── core/
├── models/ # 数据模型 (HAR)
│ └── src/main/ets/
│ ├── Peer.ets # 用户/群组模型
│ ├── Message.ets # 消息模型
│ ├── ChatListItem.ets # 聊天列表项
│ └── User.ets # 当前用户模型
│
├── services/ # 服务接口 (HAR)
│ └── src/main/ets/
│ ├── IAuthService.ets # 认证服务接口
│ ├── IMessageService.ets # 消息服务接口
│ ├── IChatListService.ets # 聊天列表服务接口
│ └── ServiceLocator.ets # 服务定位器
│
└── mock/ # Mock 服务实现 (HAR)
└── src/main/ets/
├── MockDataGenerator.ets # 模拟数据生成
├── MockAuthService.ets # 模拟认证服务
├── MockMessageService.ets # 模拟消息服务
└── MockChatListService.ets # 模拟聊天列表服务
ApiCredentials.ets包含敏感信息,已添加到.gitignore,不会被提交到仓库- 请勿将 API 凭证提交到公开仓库
- 测试环境凭证是 Telegram 官方公开的,可以用于测试
- HarmonyOS NEXT API 12+
- ArkTS / ArkUI 声明式 UI 框架
- SignalKit 响应式状态管理 (自研)
- Service Locator 依赖注入模式
- DevEco Studio 5.0+
- HarmonyOS NEXT SDK (API 12)
- 真机或模拟器
- 使用 DevEco Studio 打开项目
- 同步项目依赖 (Sync Project)
- 选择目标设备
- 点击运行
Mock 模式下固定验证码为:12345
SignalKit 是基于 iOS Telegram 的 SwiftSignalKit 移植的响应式框架:
// 创建信号
const signal = Signal.single('hello')
// 变换操作
signal
.map(s => s.toUpperCase())
.filter(s => s.length > 0)
.start(
(value) => console.log(value),
(error) => console.error(error),
() => console.log('completed')
)使用 ServiceLocator 模式实现依赖注入,便于在 Mock 和真实服务之间切换:
// 注册服务
ServiceLocator.getInstance().register(ServiceType.Auth, new MockAuthService())
// 获取服务
const authService = getAuthService()本项目仅供学习和研究目的。Telegram 是 Telegram Messenger Inc. 的商标。