《開源精選》是我們分享Github、Gitee等開源社區(qū)中優(yōu)質(zhì)項目的欄目,包括技術、學習、實用與各種有趣的內(nèi)容。本期推薦的Telegram是一款專注于速度和安全性的消息傳遞應用程序,它超快、簡單且免費。
我們歡迎所有開發(fā)者使用我們的 API 和源代碼在我們的平臺上創(chuàng)建應用程序。
- 為您的應用程序獲取您自己的 api_id。
- 請不要為您的應用使用 Telegram 名稱——或確保您的用戶明白它是非官方的。
- 請不要使用我們的標準徽標(藍色圓圈中的白紙平面)作為您應用的徽標。
- 請閱讀我們的安全指南,并妥善保管您用戶的數(shù)據(jù)和隱私。
- 請記住也發(fā)布您的代碼以遵守許可證。
入門
創(chuàng)建您的電報應用程序
我們歡迎所有開發(fā)者使用我們的API和源代碼在我們的平臺上免費創(chuàng)建類似 Telegram 的消息應用程序。
獲取 api_id
為了獲取API id并使用 Telegram API 開發(fā)您自己的應用程序,您需要執(zhí)行以下操作:
- 使用任何應用程序注冊 Telegram。
- 登錄到您的 Telegram 核心:https ://my.telegram.org 。
- 轉到“API 開發(fā)工具”并填寫表格。
- 您將獲得基本地址以及用戶授權所需的api_id和api_hash參數(shù)。
- 目前每個號碼只能有一個 api_id 連接到它。
我們將向您在此過程中使用的電話號碼發(fā)送重要的開發(fā)者通知,因此請使用連接到您的有效 Telegram 帳戶的最新號碼。
使用 api_id
在使用 MTProto Telegram API 之前,請注意所有 API 客戶端庫都受到嚴格監(jiān)控以防止濫用。
如果您使用 Telegram API 進行泛濫、發(fā)送垃圾郵件、偽造訂閱者和查看頻道計數(shù)器,您將被永久禁止。
由于對 Telegram API 的過度濫用,所有使用非官方 Telegram API 客戶端注冊或登錄的帳戶都會被自動置于監(jiān)控之下,以避免違反服務條款。
如果您沒有違反服務條款,但您 的帳戶在使用 API 后確實被禁止,請寫信至[email protected] ,說明您打算如何使用 API,要求解除您的帳戶。請注意,電子郵件由人工檢查,因此將檢測并禁止自動生成的電子郵件。
使用 Telegram 的開源代碼
歡迎大家使用我們的開源代碼。我們在代碼中包含了一個示例 API id。此 API id 在服務器端受到限制,不適合發(fā)布給最終用戶的應用程序 – 將其用于任何測試目的都會導致您的用戶出現(xiàn) API_ID_PUBLISHED_FLOOD 錯誤。在發(fā)布應用程序之前,您必須獲取自己的 API id 。
用戶授權
授權與客戶端的加密密鑰標識符相關聯(lián):auth_key_id。授權后無需將其他參數(shù)傳遞給方法。
發(fā)送驗證碼
示例實現(xiàn):用于 android 的電報,tdlib。
要顯示格式良好且經(jīng)過驗證的電話號碼字段,可以使用help.getCountriesList方法獲取help.countriesList構造函數(shù)。 然后按照此處所述使用help.countriesList配置。
然后,使用auth.sendCode將包含授權碼的短信發(fā)送到用戶的手機。但是,如果使用注銷令牌,情況并非總是如此:
注銷令牌
在啟用 2FA 的先前授權會話上調(diào)用auth.logOutfuture_auth_token時,服務器可能會返回 a ,它應該存儲在本地數(shù)據(jù)庫中。在任何時候,注銷令牌數(shù)據(jù)庫都應包含最多 20 個令牌:在添加新令牌時驅逐舊令牌。調(diào)用auth.sendCode時,應將數(shù)據(jù)庫中存在的所有注銷令牌提供給codeSettings.logout_tokens.如果任何注銷令牌與我們嘗試登錄的帳戶匹配并且令牌尚未過期,則 auth.sendCode將直接返回一個SESSION_PASSWORD_NEEDEDRPC 錯誤,直接要求用戶輸入 2FA 密碼,而不發(fā)送任何授權碼。
否則,系統(tǒng)將使用以下邏輯發(fā)送授權碼:
代碼類型
系統(tǒng)會自動選擇授權碼的發(fā)送方式;代碼可以通過多種可能的方式到達:
- 注銷令牌
- 電報代碼
- 短信代碼
- 電話:合成語音會告訴用戶輸入哪個驗證碼。
- Flash電話:代碼將通過Flash電話發(fā)送,該電話將立即關閉。在最后一種情況下,電話代碼將是電話號碼本身,只需確保電話號碼與指定的模式匹配(請參閱auth.sentCodeTypeFlashCall)。
- 未接電話:代碼將通過閃電話發(fā)送,將立即關閉。呼叫的電話號碼的最后一位是必須由用戶手動輸入的代碼。
auth.sendCode方法還具有用于啟用/禁用使用緊急呼叫和未接呼叫的參數(shù),并允許傳遞將包含在已發(fā)送 SMS 中的 SMS 令牌。例如,在較新版本的 android 中需要后者,才能使用android SMS 接收器 API。
通過二維碼登錄
導出登錄令牌
首先,要登錄現(xiàn)有 Telegram 帳戶的應用程序必須調(diào)用auth.exportLoginToken 。該方法將返回一個auth.loginToken構造函數(shù),其中包含二進制登錄token和到期日期(通常為 30 秒)。
登錄token必須使用base64url進行編碼,嵌入在tg://login?token=base64encodedtokenURL 中并以QR 碼的形式顯示給用戶。當前二維碼到期后,必須調(diào)用auth.exportLoginToken方法,并自動生成新的二維碼。
接受登錄令牌
為了登錄,必須使用auth.acceptLoginToken由已登錄的 Telegram 應用程序掃描并接受 QR 碼。在方法中使用令牌之前,必須從tg://loginURI 中提取令牌并進行 base64url 解碼。
該方法可能返回的錯誤是:
- 400 -AUTH_TOKEN_INVALID提供了無效的授權令牌
- 400 – AUTH_TOKEN_EXPIRED,提供的授權令牌已過期,必須重新掃描更新的二維碼
- 400 -AUTH_TOKEN_ALREADY_ACCEPTED授權令牌已被使用
該方法將返回一個授權對象,其中包含有關我們剛剛授權的應用程序和會話的信息。
確認(導入)登錄令牌
登錄的應用程序調(diào)用auth.acceptLoginToken并接受登錄令牌后,嘗試登錄的應用程序將收到updateLoginToken更新,這將觸發(fā)對auth.exportLoginToken方法 的第二次調(diào)用。
然后,第二次調(diào)用應該返回一個auth.loginTokenSuccess構造函數(shù),指示登錄成功,本質(zhì)上允許與 API 進行進一步的授權交互。
但是,如果兩個應用程序之間存在 DC 不匹配,則返回auth.loginTokenMigrateTo,嘗試登錄的應用程序應通過調(diào)用指定的auth.importLoginTokentoken來響應指定的 DC。
這個調(diào)用最終應該返回一個auth.loginTokenSuccess構造函數(shù)。
消息草稿
消息草稿
Telegram 中的消息草稿允許在設備之間同步輸入到消息字段中的文本。
草稿
草稿由DraftMessage構造函數(shù)表示。在編寫要發(fā)送給特定對等方的消息時,應使用特定對等草稿的參數(shù)作為默認值(在媒體的情況下,仍應使用相同的草稿作為基礎,消息將成為標題)。如果用戶在發(fā)送消息之前退出應用程序,則消息應保存為草稿:
保存草稿
可以使用messages.saveDraft方法保存草稿。
下載草稿
新草稿會通過updateDraftMessage更新自動發(fā)送到所有設備。
通過 API 獲取的對話對象也包含與對話相關的草稿。
開源協(xié)議:GPL-2.0 license
開源地址:https://github.com/DrKLO/Telegram