《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Telegram是一款专注于速度和安全性的消息传递应用程序,它超快、简单且免费。
我们欢迎所有开发者使用我们的 API 和源代码在我们的平台上创建应用程序。
- 为您的应用程序获取您自己的 api_id。
- 请不要为您的应用使用 Telegram 名称——或确保您的用户明白它是非官方的。
- 请不要使用我们的标准徽标(蓝色圆圈中的白纸平面)作为您应用的徽标。
- 请阅读我们的安全指南,并妥善保管您用户的数据和隐私。
- 请记住也发布您的代码以遵守许可证。
入门
创建您的电报应用程序
我们欢迎所有开发者使用我们的API和源代码在我们的平台上免费创建类似 Telegram 的消息应用程序。
获取 api_id
为了获取API id并使用 Telegram API 开发您自己的应用程序,您需要执行以下操作:
- 使用任何应用程序注册 Telegram。
- 登录到您的 Telegram 核心:https ://my.telegram.org 。
- 转到“API 开发工具”并填写表格。
- 您将获得基本地址以及用户授权所需的api_id和api_hash参数。
- 目前每个号码只能有一个 api_id 连接到它。
我们将向您在此过程中使用的电话号码发送重要的开发者通知,因此请使用连接到您的有效 Telegram 帐户的最新号码。
使用 api_id
在使用 MTProto Telegram API 之前,请注意所有 API 客户端库都受到严格监控以防止滥用。
如果您使用 Telegram API 进行泛滥、发送垃圾邮件、伪造订阅者和查看频道计数器,您将被永久禁止。
由于对 Telegram API 的过度滥用,所有使用非官方 Telegram API 客户端注册或登录的帐户都会被自动置于监控之下,以避免违反服务条款。
如果您没有违反服务条款,但您 的帐户在使用 API 后确实被禁止,请写信至recovery@telegram.org ,说明您打算如何使用 API,要求解除您的帐户。请注意,电子邮件由人工检查,因此将检测并禁止自动生成的电子邮件。
使用 Telegram 的开源代码
欢迎大家使用我们的开源代码。我们在代码中包含了一个示例 API id。此 API id 在服务器端受到限制,不适合发布给最终用户的应用程序 – 将其用于任何测试目的都会导致您的用户出现 API_ID_PUBLISHED_FLOOD 错误。在发布应用程序之前,您必须获取自己的 API id 。
用户授权
授权与客户端的加密密钥标识符相关联:auth_key_id。授权后无需将其他参数传递给方法。
发送验证码
示例实现:用于 android 的电报,tdlib。
要显示格式良好且经过验证的电话号码字段,可以使用help.getCountriesList方法获取help.countriesList构造函数。 然后按照此处所述使用help.countriesList配置。
然后,使用auth.sendCode将包含授权码的短信发送到用户的手机。但是,如果使用注销令牌,情况并非总是如此:
注销令牌
在启用 2FA 的先前授权会话上调用auth.logOutfuture_auth_token时,服务器可能会返回 a ,它应该存储在本地数据库中。在任何时候,注销令牌数据库都应包含最多 20 个令牌:在添加新令牌时驱逐旧令牌。调用auth.sendCode时,应将数据库中存在的所有注销令牌提供给codeSettings.logout_tokens.如果任何注销令牌与我们尝试登录的帐户匹配并且令牌尚未过期,则 auth.sendCode将直接返回一个SESSION_PASSWORD_NEEDEDRPC 错误,直接要求用户输入 2FA 密码,而不发送任何授权码。
否则,系统将使用以下逻辑发送授权码:
代码类型
系统会自动选择授权码的发送方式;代码可以通过多种可能的方式到达:
- 注销令牌
- 电报代码
- 短信代码
- 电话:合成语音会告诉用户输入哪个验证码。
- Flash电话:代码将通过Flash电话发送,该电话将立即关闭。在最后一种情况下,电话代码将是电话号码本身,只需确保电话号码与指定的模式匹配(请参阅auth.sentCodeTypeFlashCall)。
- 未接电话:代码将通过闪电话发送,将立即关闭。呼叫的电话号码的最后一位是必须由用户手动输入的代码。
auth.sendCode方法还具有用于启用/禁用使用紧急呼叫和未接呼叫的参数,并允许传递将包含在已发送 SMS 中的 SMS 令牌。例如,在较新版本的 android 中需要后者,才能使用android SMS 接收器 API。
通过二维码登录
导出登录令牌
首先,要登录现有 Telegram 帐户的应用程序必须调用auth.exportLoginToken 。该方法将返回一个auth.loginToken构造函数,其中包含二进制登录token和到期日期(通常为 30 秒)。
登录token必须使用base64url进行编码,嵌入在tg://login?token=base64encodedtokenURL 中并以QR 码的形式显示给用户。当前二维码到期后,必须调用auth.exportLoginToken方法,并自动生成新的二维码。
接受登录令牌
为了登录,必须使用auth.acceptLoginToken由已登录的 Telegram 应用程序扫描并接受 QR 码。在方法中使用令牌之前,必须从tg://loginURI 中提取令牌并进行 base64url 解码。
该方法可能返回的错误是:
- 400 -AUTH_TOKEN_INVALID提供了无效的授权令牌
- 400 – AUTH_TOKEN_EXPIRED,提供的授权令牌已过期,必须重新扫描更新的二维码
- 400 -AUTH_TOKEN_ALREADY_ACCEPTED授权令牌已被使用
该方法将返回一个授权对象,其中包含有关我们刚刚授权的应用程序和会话的信息。
确认(导入)登录令牌
登录的应用程序调用auth.acceptLoginToken并接受登录令牌后,尝试登录的应用程序将收到updateLoginToken更新,这将触发对auth.exportLoginToken方法 的第二次调用。
然后,第二次调用应该返回一个auth.loginTokenSuccess构造函数,指示登录成功,本质上允许与 API 进行进一步的授权交互。
但是,如果两个应用程序之间存在 DC 不匹配,则返回auth.loginTokenMigrateTo,尝试登录的应用程序应通过调用指定的auth.importLoginTokentoken来响应指定的 DC。
这个调用最终应该返回一个auth.loginTokenSuccess构造函数。
消息草稿
消息草稿
Telegram 中的消息草稿允许在设备之间同步输入到消息字段中的文本。
草稿
草稿由DraftMessage构造函数表示。在编写要发送给特定对等方的消息时,应使用特定对等草稿的参数作为默认值(在媒体的情况下,仍应使用相同的草稿作为基础,消息将成为标题)。如果用户在发送消息之前退出应用程序,则消息应保存为草稿:
保存草稿
可以使用messages.saveDraft方法保存草稿。
下载草稿
新草稿会通过updateDraftMessage更新自动发送到所有设备。
通过 API 获取的对话对象也包含与对话相关的草稿。
开源协议:GPL-2.0 license
开源地址:https://github.com/DrKLO/Telegram