tdlib/td
GitHub: tdlib/td
Telegram官方跨平台客户端开发库,封装了网络通信和加密存储,提供多语言绑定和高性能异步API。
Stars: 8539 | Forks: 1965
# TDLib
TDLib (Telegram Database library) 是一个用于构建 [Telegram](https://telegram.org) 客户端的跨平台库。它几乎可以轻松地从任何编程语言中使用。
## 目录
- [功能](#features)
- [示例和文档](#usage)
- [依赖项](#dependencies)
- [构建](#building)
- [在 CMake C++ 项目中使用](#using-cxx)
- [在 Java 项目中使用](#using-java)
- [在 .NET 项目中使用](#using-dotnet)
- [在其他编程语言中使用](#using-json)
- [许可证](#license)
## 功能
`TDLib` 具有许多优势。值得注意的是 `TDLib`:
* **跨平台**:`TDLib` 可用于 Android、iOS、Windows、macOS、Linux、FreeBSD、OpenBSD、NetBSD、illumos、Windows Phone、WebAssembly、watchOS、tvOS、visionOS、Tizen、Cygwin。它也应该能在其他 *nix 系统上以极少的修改或无需修改运行。
* **多语言**:`TDLib` 可以轻松地与任何能够执行 C 函数的编程语言一起使用。此外,它已经有原生 Java(使用 `JNI`)绑定和 .NET(使用 `C++/CLI` 和 `C++/CX`)绑定。
* **易于使用**:`TDLib` 负责处理所有网络实现细节、加密和本地数据存储。
* **高性能**:在 [Telegram Bot API](https://core.telegram.org/bots/api) 中,每个 `TDLib` 实例同时处理超过 25000 个活跃机器人。
* **文档齐全**:所有 `TDLib` API 方法和公共接口都有完整的文档记录。
* **一致性**:`TDLib` 保证所有更新都按正确的顺序交付。
* **可靠**:`TDLib` 在缓慢且不可靠的 Internet 连接上保持稳定。
* **安全**:所有本地数据均使用用户提供的加密密钥进行加密。
* **完全异步**:对 `TDLib` 的请求不会互相阻塞或阻塞其他任何东西,响应在可用时发送。
## 示例和文档
请参阅我们的 [入门](https://core.telegram.org/tdlib/getting-started) 教程,了解 TDLib 基本概念的描述。
看看我们的 [示例](https://github.com/tdlib/td/blob/master/example/README.md#tdlib-usage-and-build-examples)。
有关如何构建 TDLib 的详细说明,请参阅 [TDLib 构建说明生成器](https://tdlib.github.io/td/build.html)。
请参阅我们的 [JSON](#using-json)、[C++](#using-cxx)、[Java](#using-java) 和 [.NET](#using-dotnet) 接口说明。
请参阅 [td_api.tl](https://github.com/tdlib/td/blob/master/td/generate/scheme/td_api.tl) 方案或自动生成的 [HTML 文档](https://core.telegram.org/tdlib/docs/td__api_8h.html)
以获取所有可用 `TDLib` [方法](https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1_function.html) 和 [类](https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1_object.html) 的列表。
## 依赖项
`TDLib` 依赖于:
* C++17 兼容编译器 (Clang 5.0+, GCC 7.0+, MSVC 19.1+ (Visual Studio 2017.7+), Intel C++ Compiler 19+)
* OpenSSL
* zlib
* gperf (仅构建时)
* CMake (3.10+, 仅构建时)
* PHP (可选,用于文档生成)
## 构建
构建 `TDLib` 最简单的方法是使用我们的 [TDLib 构建说明生成器](https://tdlib.github.io/td/build.html)。
您只需要选择您的编程语言和目标操作系统,即可接收完整的构建说明。
通常,您需要安装所有 `TDLib` [依赖项](#dependencies),进入包含 `TDLib` 源代码的目录并使用 CMake 编译它们:
```
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
```
要在低内存设备上构建 `TDLib`,您可以运行 [SplitSource.php](https://github.com/tdlib/td/blob/master/SplitSource.php) 脚本
在编译 `TDLib` 源代码之前,并且只编译所需的目标:
```
php SplitSource.php
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --target tdjson
cmake --build . --target tdjson_static
cd ..
php SplitSource.php --undo
```
在我们的测试中,带有 libc++ 的 clang 6.0 每个文件需要不到 500 MB 的 RAM,而 GCC 4.9/6.3 每个文件使用不到 1 GB 的 RAM。
## 在 CMake C++ 项目中使用
对于使用 CMake 的 C++ 项目,最好的方法是将 `TDLib` 作为项目的一部分构建,或者将其安装到系统范围内。
您可以在 CMake 项目中使用以下几个库:
* Td::TdJson, Td::TdJsonStatic — JSON 接口的动态和静态版本。这具有简单的 C 接口,因此可以轻松地与任何能够执行 C 函数的编程语言一起使用。
有关更多信息,请参阅 [td_json_client](https://core.telegram.org/tdlib/docs/td__json__client_8h.html) 文档。
* Td::TdStatic — 具有用于一般用途的 C++ 接口的静态库。
有关更多信息,请参阅 [ClientManager](https://core.telegram.org/tdlib/docs/classtd_1_1_client_manager.html) 和 [Client](https://core.telegram.org/tdlib/docs/classtd_1_1_client.html) 文档。
例如,您的 CMakeLists.txt 部分可能如下所示:
```
add_subdirectory(td)
target_link_libraries(YourTarget PRIVATE Td::TdStatic)
```
或者您可以安装 `TDLib`,然后在您的 CMakeLists.txt 中像这样引用它:
```
find_package(Td 1.8.62 REQUIRED)
target_link_libraries(YourTarget PRIVATE Td::TdStatic)
```
参见 [example/cpp/CMakeLists.txt](https://github.com/tdlib/td/blob/master/example/cpp/CMakeLists.txt)。
## 在 Java 项目中使用
`TDLib` 通过 JNI 提供原生 Java 接口。要启用它,请向 CMake 指定选项 `-DTD_ENABLE_JNI=ON`。
有关从 Java 使用 `TDLib` 的示例以及详细的构建和使用说明,请参见 [example/java](https://github.com/tdlib/td/tree/master/example/java)。
## 在 .NET 项目中使用
`TDLib` 通过 `C++/CLI` 和 `C++/CX` 提供原生 .NET 接口。要启用它,请分别向 CMake 指定选项 `-DTD_ENABLE_DOTNET=ON` 或 `-DTD_ENABLE_DOTNET=CX`。
.NET Core 仅从 3.1 版本开始支持 `C++/CLI`,并且仅在 Windows 上支持,因此如果使用较旧的 .NET Core 或需要可移植性,则应通过 P/Invoke 使用 `TDLib` JSON 接口。
有关从 C# 使用 `TDLib` 的示例以及详细的构建和使用说明,请参见 [example/csharp](https://github.com/tdlib/td/tree/master/example/csharp)。
有关从 C# UWP 应用程序使用 `TDLib` 的示例以及 Visual Studio 扩展“TDLib for Universal Windows Platform”的详细构建和使用说明,请参见 [example/uwp](https://github.com/tdlib/td/tree/master/example/uwp)。
当启用了 `TD_ENABLE_DOTNET` 选项构建 `TDLib` 时,某些文件中的 `C++` 文档会被移除。您需要检出这些文件以恢复 `C++` 文档:
```
git checkout td/telegram/Client.h td/telegram/Log.h td/tl/TlObject.h
```
## 在其他编程语言中使用
`TDLib` 提供高效的原生 C++、Java 和 .NET 接口。
但对于大多数用例,我们建议使用 JSON 接口,该接口可以轻松地与任何能够执行 C 函数的编程语言一起使用。
有关详细的 JSON 接口描述,请参阅 [td_json_client](https://core.telegram.org/tdlib/docs/td__json__client_8h.html) 文档,
[td_api.tl](https://github.com/tdlib/td/blob/master/td/generate/scheme/td_api.tl) 方案或自动生成的 [HTML 文档](https://core.telegram.org/tdlib/docs/td__api_8h.html) 以获取
所有可用 `TDLib` [方法](https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1_function.html) 和 [类](https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1_object.html) 的列表。
`TDLib` JSON 接口遵循语义化版本控制,具有相同主版本号的版本是二进制兼容和向后兼容的,但底层 `TDLib` API 在不同的次要版本甚至补丁版本中可能不同。
如果您需要支持不同的 `TDLib` 版本,则可以使用 `version` 选项的值来查找确切的 `TDLib` 版本,以使用适当的 API 方法。
有关此类用法的示例,请参见 [example/python/tdjson_example.py](https://github.com/tdlib/td/blob/master/example/python/tdjson_example.py)。
## 许可证
`TDLib` 根据 Boost Software License 的条款获得许可。有关更多信息,请参见 [LICENSE_1_0.txt](http://www.boost.org/LICENSE_1_0.txt)。
标签:AI工具, API, Bash脚本, Bot API, C++, Homebrew安装, IM, NET, Social Media, TDLib, Telegram, WebAssembly, 加密, 即时通讯, 多人体追踪, 多语言支持, 安全测试工具, 安全测试框架, 客户端开发, 库, 应急响应, 开源, 异步, 数据擦除, 桌面开发, 漏洞扫描器, 移动开发, 聊天