6

表示要获取用户的令牌,我需要发送请求

auth.sentCode#efed51d9 phone_registered:Bool phone_code_hash:string send_call_timeout:int is_password:Bool = auth.SentCode;

某处?我读过它是一个 MTProto 请求,但我不知道如何发送它。可以用postman寄吗?与teletgrambots 图书馆rubenlagus?_

4

1 回答 1

9

电报协议

MTProto 嵌入到传输协议(TCP、HTTP、...)中,所以使用 Postman 并非不可能,但我真的很难做到(所以它不是最好的选择)。认为您的 http 调用必须实现MTProto 2.0,因此您的 http 消息必须具有以下结构/格式:结构

  • 64 位 key_fingerprint
  • 128 位消息密钥
  • 加密数据

参见消息的示意图

只有非常有限数量的特殊类型的消息可以作为纯文本传输。

电报机器人

关于TelegramBots是一个帮助使用Telegram Bots Api构建 Bot 的库。

它支持两种技术:长轮询Webhook

该项目有一个很好的教程,您可以尝试:快速入门

此外,如果您是 Spring Boot 用户,它也有一个Spring Boot 启动器spring boot starter

如何实现自己的身份验证客户端?

如果您想了解如何与电报 api 交互以进行身份​​验证,您需要阅读以下内容:auth section

之后,您可以了解如何与 Telegram 交互以进行身份​​验证... 我建议您阅读真实应用程序如何使用 Telegram API。查看此示例实现中 Telegram Api 的所有用法(对包类的引用:org.telegram.api.requests.TLRequestAuth*):

激活控制器实现

正如您在上面的示例中看到的,通常电报客户端使用 TDLib。

基本上,Telegram 提供了两个 API:

电报 API 和 TDLib

此 API 允许您构建自己的自定义 Telegram 客户端。它对所有希望在我们的平台上创建 Telegram 应用程序的开发人员 100% 开放。随意研究现有 Telegram 应用程序的开源代码,以了解这里的工作原理。不要忘记在我们的系统中注册您的应用程序。

机器人 API

此 API 允许您将机器人连接到我们的系统。电报机器人是不需要额外电话号码来设置的特殊帐户。这些帐户用作在服务器上某处运行的代码的接口。

如果您想创建或使用 Telegram 作为服务来发送和接收消息并与服务器交互(不需要电话号码)...... Bot API 应该是您的选择。

如果您想创建自己的定制电报应用程序(您的用户将需要一个电话号码来注册,就像在手机中使用电报一样)...电报 API/TDLib 应该是您的选择。

TDLib是:

第三方开发人员的工具,可以轻松构建快速、安全且功能丰富的 Telegram 应用程序。TDLib 负责所有网络实现细节、加密和本地数据存储,因此您可以将更多时间用于设计、响应式界面和漂亮的动画。

TDLib 支持所有 Telegram 功能,使在任何平台上开发 Telegram 应用程序变得轻而易举。它可以在 Android、iOS、Windows、macOS、Linux 和几乎任何其他系统上使用。该库是开源的,几乎与任何编程语言兼容。

所以你不需要关心像 MTProtocol 协议、网络、加密等底层细节。你只需要在这种情况下使用 TDLib。

我发送给您的示例类是 Android 电报应用程序(电报应用程序)。它使用 TDLib。

如果您想学习如何创建自己的 TDLib... 源代码在这里: tdlib 源代码

它是用 C 语言开发的,可以与 Java、.NET 和其他语言一起使用。

基本上,它通过传输协议(http、tcp 或 udp)发送消息。例如,对于 http 使用 post 请求来提交具有上述 MTProto 格式的消息。消息用于编码。

关于 MTProto 支持的传输如何工作的文本:支持的传输

其他参考:

电报 API:电报 API TDLib:TDLib


TDLib 在 Java 中的使用示例

Java 示例 repo:TDLib 示例客户端

  1. 首先checkout TDLib repo TDLib repo 正如我所说的,TDLib是用C语言开发的,所以需要使用JNI(Java Native Interface)与之交互。因此,您需要编译 TDLib(使用 cmake)。

  2. 按照示例说明 (readme.md) 在您的平台 ( readme ) 中构建/预构建 TDLib。

TDLib 应预先构建以与 Java 一起使用并安装到本地子目录td/,如下所示:

cd <path to TDLib sources>
mkdir jnibuild
cd jnibuild
cmake -DCMAKE_BUILD_TYPE=Release -DTD_ENABLE_JNI=ON -DCMAKE_INSTALL_PREFIX:PATH=../example/java/td ..
cmake --build . --target install

如果您想使用 MSVC 在 Windows 上为 64 位 Java 编译 TDLib,您还需要-A x64向 CMake 添加选项。

在 Windows 中,通过添加参数 -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake 来使用 Vcpkg 工具链文件

然后你可以构建这个例子:

cd <path to TDLib sources>/example/java
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DTd_DIR=<full path to TDLib sources>/example/java/td/lib/cmake/Td -DCMAKE_INSTALL_PREFIX:PATH=.. ..
cmake --build . --target install

编译好的 TDLib 共享库和之后的 Java 示例将放在 bin/ 中,Javadoc 文档在docs/.

  1. 然后就可以运行 Java 示例了
cd <path to TDLib sources>/example/java/bin
java '-Djava.library.path=.' org/drinkless/tdlib/example/Example

如果您从 CMake 收到“Could NOT find JNI ...”错误,则需要指定已安装 JDK 的 CMake 路径,例如“-DJAVA_HOME=/usr/lib/jvm/java-8-oracle/”。

如果您收到 java.lang.UnsatisfiedLinkError 并显示“找不到依赖库”,您可能还需要将一些依赖的共享 OpenSSL 和 zlib 库复制到bin/.

如果您将示例编译为 32 位版本,您可能需要为 Java 提供 -d32 参数。

如果您想使用 IntelliJ 之类的 IDE 打开或在您的项目中导入此示例,请查看此票证:如何将 IntelliJ 与 TDLib 一起使用

尝试运行示例!非常简单,它只有三个 Java 类(Example、Client 和 Log)。

客户端:使用“本机”方法与 TDLib 交互。
示例:使用客户端的应用程序。

例如查看如何发送授权请求: auth request

于 2019-08-30T05:48:44.720 回答