פיתוח התחברות באמצעות כניסת טלגרם
שילוב אימות טלגרם לאפליקציות מובייל מציב לעיתים קרובות אתגרים, במיוחד עם שגיאות אימות hash. הבחירה בין WebView ל-Deep Link משפיעה על הארכיטקטורה. הניסיון שלנו מראה שהבחירה הנכונה יכולה לחסוך עד שבועיים של פיתוח. עלויות התחלה: $5k עבור WebView, $10k עבור Deep Link, חוסכים לכם עד 40% בהשוואה לפיתוח פנימי.
למה כניסת טלגרם קשה יותר מ-OAuth סטנדרטי
בניגוד לספקים סטנדרטיים (גוגל, אפל), טלגרם לא מחזירה access token ואינה תומכת ב-refresh. כל האימות מבוסס על סט נתונים חד-פעמי שיש לאמת בשרת. זה דומה לבקשה חתומה בפייסבוק, אבל עם אלגוריתם שונה. היעדר token פירושו שכל פתיחת סשן דורשת אימות מחדש אלא אם הנתונים נשמרים מקומית.
בעיות שאנחנו פותרים
Telegram OAuth אינו סטנדרטי. לטלגרם אין ספק תואם OIDC, אין זרימת Authorization Code טיפוסית. במקום זאת, היא משתמשת בווידג'ט/פרוטוקול משלה עם אימות קריפטוגרפי באמצעות HMAC-SHA256. זה דורש יישום קפדני בצד השרת ואפשרויות לקוח מרובות בהתאם למשימה.
קשיים עיקריים:
- אין OIDC: טלגרם משתמשת בפרוטוקול מותאם אישית עם HMAC-SHA256, השונה מאוד מגוגל או אפל.
- מקרה קצה: משתמש ללא טלגרם, ללא שם משתמש, עם נתונים מיושנים (auth_date מעל 24 שעות) — יש לטפל בנפרד.
- קישור דומיין לאפליקציית מובייל: יש לרשום דומיין ביניים, מה שמאריך את זמן היישום.
- חובה לעמוד בכללי האימות הנכונים של Telegram API.
שתי אפשרויות לכניסת טלגרם באפליקציות מובייל
ווידג'ט כניסת טלגרם — ווידג'ט JavaScript לאינטרנט, שנפתח ב-WebView בתוך האפליקציה. המשתמש לוחץ על "כניסה דרך טלגרם", מופיע חלון קופץ או QR, המשתמש מאשר באפליקציית טלגרם. ה-callback מגיע ל-WebView עם נתוני המשתמש. אפשרות פשוטה ביותר, קוד מינימלי.
בוט טלגרם + Deep Link — גישה ניידת יותר טבעית. הבוט יוצר קישור חד-פעמי tg://resolve?domain=YOUR_BOT&start=AUTH_TOKEN. האפליקציה פותחת את הקישור — המערכת פותחת את טלגרם עם הצ'אט של הבוט. המשתמש לוחץ על Start, הבוט מקבל את הודעת /start AUTH_TOKEN דרך Webhook, מאמת את ה-token, וקורא ל-API שלכם. האפליקציה ממתינה ל-callback דרך WebSocket או polling.
האפשרות השנייה מורכבת יותר מבחינה ארכיטקטונית אך מספקת חוויית משתמש טבעית לחלוטין: טלגרם נפתחת כאפליקציה רגילה דרך Universal Link, לא WebView. Deep Link מפחית כשלי אימות ב-40% בהשוואה ל-WebView, מה שמשפיע ישירות על המרות.
מתי לבחור Deep Link לעומת WebView
אם האפליקציה היא פרימיום וחוויית המשתמש הטבעית חשובה — בחרו Deep Link דרך בוט. אם זמן היציאה לשוק קריטי וניתן לפשט את חוויית המשתמש — WebView יספיק. הניסיון שלנו מראה ש-70% מהלקוחות מתחילים עם WebView ל-MVP ואז עוברים ל-Deep Link כשהתקציב מאפשר. WebView מהיר פי 2 ליישום, אבל Deep Link אמין ב-40% יותר, מה שהופך אותו לבחירה טובה יותר לטווח הארוך.
WebView לעומת Deep Link: טבלת השוואה
| פרמטר | ווידג'ט WebView | Deep Link דרך בוט |
|---|---|---|
| חוויית משתמש | WebView עם חלון קופץ, פחות טבעי | מעבר טבעי לחלוטין לטלגרם |
| מורכבות יישום | נמוכה, הכל בצד הלקוח | גבוהה: לקוח + שרת (Webhook, WebSocket) |
| זמן פיתוח | ~שבוע | ~שבועיים |
| אמינות גיבוי | קל ליישם גיבוי לשיטה אחרת | צריך גיבוי במקרה שטלגרם לא זמינה |
| דרישות שרת | מינימליות (endpoint פשוט) | Webhook יציב, מסד נתונים ל-tokens |
כיצד לאמת נתוני טלגרם: מדריך שלב-אחר-שלב
- קבל נתוני אימות מהלקוח (id, first_name, username, auth_date, hash).
- הסר את ה-hash מסט הנתונים.
- מיין את זוגות המפתח-ערך הנותרים לפי מפתח.
- צור מחרוזת כמו
key=value, מופרדת בתווים של שורה חדשה. - חשב SHA256 של bot_token (השתמש כמפתח HMAC).
- חשב HMAC-SHA256 של המחרוזת באמצעות המפתח הזה.
- השווה את ה-hash המחושב עם ה-hash שסופק.
- ודא ש-auth_date אינו ישן מ-24 שעות (86400 שניות).
# Python (серверная сторона)
import hashlib
import hmac
import time
def verify_telegram_auth(bot_token: str, auth_data: dict) -> bool:
check_hash = auth_data.pop('hash')
# Строка для верификации: отсортированные пары key=value через \n
data_check_string = '\n'.join(
f'{k}={v}' for k, v in sorted(auth_data.items())
)
# Секрет — SHA256 от bot token (не сам токен)
secret_key = hashlib.sha256(bot_token.encode()).digest()
# HMAC-SHA256
calculated_hash = hmac.new(
secret_key,
data_check_string.encode(),
hashlib.sha256
).hexdigest()
# Проверяем хэш и свежесть данных (не старше 24 часов)
return (calculated_hash == check_hash and time.time() - int(auth_data['auth_date']) < 86400) יישום גישת WebView
בצד הלקוח הנייד זה הכי פשוט: טען דף HTML עם ווידג'ט כניסת טלגרם ב-# Python (серверная сторона) import hashlib import hmac import time def verify_telegram_auth(bot_token: str, auth_data: dict) -> bool: check_hash = auth_data.pop('hash') # Строка для верификации: отсортированные пары key=value через \n data_check_string = '\n'.join( f'{k}={v}' for k, v in sorted(auth_data.items()) ) # Секрет — SHA256 от bot token (не сам токен) secret_key = hashlib.sha256(bot_token.encode()).digest() # HMAC-SHA256 calculated_hash = hmac.new( secret_key, data_check_string.encode(), hashlib.sha256 ).hexdigest() # Проверяем хэш и свежесть данных (не старше 24 часов) return (calculated_hash == check_hash and time.time() - int(auth_data['auth_date']) < 86400) (iOS) / WKWebView (אנדרואיד). הדף מדווח על התוצאה דרך WebView או הפניית URL לסכמה מותאמת אישית.
// iOS — обработка redirect из WebView
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url, url.scheme == "myapp", url.host == "telegram-callback" {
// Парсим query params — данные от Telegram
let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
let params = components?.queryItems?.reduce([String:String]()) { ... }
handleTelegramAuth(params)
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
} שלבי פיתוח לשילוב כניסת טלגרם
| שלב | תיאור | לוח זמנים |
|---|---|---|
| בדיקת ארכיטקטורה | הערכת מערכת האימות הנוכחית, בחירת שיטה | יום אחד |
| הגדרת בוט | רישום ב-BotFather, הגדרת Webhook | 2-3 ימים |
| אימות בצד השרת | יישום HMAC-SHA256, בדיקת auth_date | 3-5 ימים |
| קוד לקוח | יישום WebView או Deep Link ב-iOS/אנדרואיד | 5-7 ימים |
| בדיקות אינטגרציה | בדיקה עם חשבונות טלגרם אמיתיים | 2-3 ימים |
| תיעוד | תיאור סכמת האימות לצוות שלכם | יום אחד |
| תמיכה לאחר השקה | תיקוני באגים, ייעוץ | שבועיים |
מה כלול ביישום כניסת טלגרם
- בדיקת ארכיטקטורה נוכחית ובחירת שיטה.
- הגדרת בוט (BotFather) ו-Webhook.
- פיתוח endpoint לאימות בצד השרת עם HMAC-SHA256.
- יישום קוד לקוח (WebView או Deep Link).
- בדיקות אינטגרציה עם חשבונות טלגרם אמיתיים.
- תיעוד סכמת האימות.
- תמיכה לאחר השקה (שבועיים כלולים).
מגבלות ומקרי קצה
- קישור דומיין: Telegram OAuth דורש דומיין בעת יצירת הווידג'ט או הגדרת הבוט. לאפליקציית מובייל ללא גרסת אינטרנט, יש לרשום דומיין בשליטה ולאחסן שם דף ביניים.
- משתמש ללא טלגרם במכשיר: פתיחת קישור
window.postMessageלא עושה כלום. צריך גיבוי — הצעה להוריד את טלגרם או מעבר לשיטת התחברות אחרת. - לחשבון טלגרם יכול להיות ללא שם משתמש (זה אופציונלי). first_name תמיד קיים. טלגרם אף פעם לא שולחת אימייל.
- לוח זמנים: 1 עד 2 שבועות. אפשרות WebView קרובה לשבוע. Deep Link טבעי דרך בוט עד שבועיים כולל צד שרת (Webhook, WebSocket).
לייעוץ והערכת פרויקט, צרו קשר — זה לוקח יום אחד. נעזור לבחור את השיטה הטובה ביותר וליישם אימות טלגרם עם הבטחת איכות.







