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