פיתוח אימות באמצעות Google Sign-In
Google Sign-In הוא ספק ה-OAuth הנפוץ ביותר עבור אפליקציות מובייל OAuth 2.0. באנדרואיד, הוא עובד בצורה חלקה במיוחד דרך ה-API של Credential Manager (הגישה הנוכחית בגרסאות אנדרואיד מודרניות); ב-iOS, הוא דורש את ה-SDK הנפרד GoogleSignIn-iOS והגדרת URL Scheme. מורכבות: 1 מתוך 5, אבל יש כמה מלכודות טיפוסיות שאנשים נתקלים בהן במהלך האינטגרציה הראשונה. יישמנו את Google Sign-In בעשרות פרויקטים ואנחנו מכירים את כל הניואנסים — מבלבול עם Web Client ID ועד טיפול בהיעדר Google Play Services. קבלו ייעוץ על הפרויקט שלכם — נעריך את המורכבות.
המצב הנוכחי של ה-SDK
באנדרואיד, ה-SDK המיושן GoogleSignIn (com.google.android.gms:play-services-auth) מוחלף על ידי Credential Manager עם GetGoogleIdOption. ה-API הישן עדיין עובד, אבל גוגל ממליצה על מעבר. ה-API החדש מציג Bottom Sheet עם חשבונות Google של המכשיר — ממשק מקורי ללא הפניית דפדפן.
| API | גרסת אנדרואיד | ממשק משתמש | מחזור חיים |
|---|---|---|---|
| GoogleSignIn (מיושן) | אנדרואיד 4.0+ | דפדפן / WebView | התמיכה הסתיימה |
| Credential Manager | גרסאות מודרניות | Bottom Sheet מקורי | פעיל, מומלץ |
ב-iOS — SDK של GoogleSignIn-iOS (pod GoogleSignIn, SPM google-signin-ios). דורש הוספת GIDClientID ל-Info.plist והגדרת URL Scheme להפניה חזרה לאחר האימות.
טעות נפוצה ב-iOS: URL Scheme שנשכח
בעת הגדרת GoogleSignIn-iOS, יש להוסיף URL Scheme ל-Info.plist בפורמט com.googleusercontent.apps.CLIENT_ID. ללא זה, האימות פותח את הדפדפן אך לא יכול לחזור לאפליקציה. פתרון: הוסיפו את המפתח CFBundleURLTypes ל-Info.plist עם מערך של schemes.
איך ליישם את Google Sign-In באנדרואיד?
// Credential Manager (современные версии Android)
val googleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(WEB_CLIENT_ID) // Не Android client ID, а Web client ID
.build()
val request = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
val result = credentialManager.getCredential(context, request)
val credential = result.credential as? CustomCredential
// Обрабатываем GoogleIdTokenCredential
// Credential Manager (современные версии Android) val googleIdOption = GetGoogleIdOption.Builder() .setFilterByAuthorizedAccounts(false) .setServerClientId(WEB_CLIENT_ID) // Не Android client ID, а Web client ID .build() val request = GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build() val result = credentialManager.getCredential(context, request) val credential = result.credential as? CustomCredential // Обрабатываем GoogleIdTokenCredential הוא ה-Client ID עבור יישום האינטרנט ב-Google Cloud Console, לא עבור אנדרואיד. הבלבול הזה הוא מקור לשגיאת DEVELOPER_ERROR בריצה הראשונה.
אימות ID Token בשרת
הלקוח מעביר את WEB_CLIENT_ID לשרת. השרת מאמת אותו דרך נקודת הקצה tokeninfo של גוגל או מקומית באמצעות google-auth-library. ID Token מכיל sub (מזהה משתמש Google יציב), אימייל, שם, תמונה. sub הוא המפתח הראשי לזיהוי משתמש; האימייל יכול להשתנות.
למה Google Sign-In הוא הסטנדרט לאפליקציות מובייל?
חשבון Google קיים עבור 90% מבעלי מכשירי אנדרואיד. אינטגרציה דרך OAuth 2.0 מספקת נקודת כניסה אחת: משתמשים מאמתים ללא סיסמה, ואתם מקבלים נתונים מאומתים (אימייל, שם). זה מפחית את הנשירה בשלב ההרשמה ב-20–30% בהשוואה לטופס אימייל+סיסמה. בנוסף, גוגל מבטיחה אבטחה — ID Token חתום עם RSA SHA-256, המונע זיוף. זה חוסך עד 40% מזמן הפיתוח בהשוואה ליישום OAuth בעצמכם. מפחית עלויות תמיכה למשתמשים — פחות סיסמאות שנשכחות.
איך אנחנו משלבים את Google Sign-In במפתח פתוח
הצוות שלנו, עם ניסיון של 5+ שנים בפיתוח מובייל, ניגש למשימה באופן מקיף:
- ניתוח ועיצוב: קביעה אילו scopes נדרשים (אימייל, פרופיל, בתוספת scopes מותאמים אישית אם נדרשת גישה ל-Google Drive וכו'). הגדרת הפרויקט ב-Google Cloud Console (Web Client ID לאנדרואיד, iOS Client ID, Service Account לשרת).
-
אינטגרציה בצד הלקוח:
- אנדרואיד: חיבור API של Credential Manager, עיבוד התוצאה, חילוץ GoogleIdTokenCredential.
- iOS: הגדרת GoogleSignIn-iOS, טיפול ב-callback דרך UIApplication.shared.open + URL Scheme.
- טיפול במקרה קצה: אם Google Play Services חסרים (מכשירים ללא GMS), שימוש בפתרון חלופי להזנה ידנית.
- צד שרת: יישום אימות ID Token בשרת (Python / JavaScript / Kotlin). שמירת sub ואימייל, עדכון בכל התחברות.
- בדיקות: כתיבת בדיקות יחידה בצד הלקוח (mock ל-CredentialManager) ובדיקות אינטגרציה בשרת. תרחישי בדיקה: ביטול, token לא חוקי, פקיעת תוקף.
- פריסה וניטור: הגדרת רישום התחברויות דרך Firebase Analytics או Metrica. הוספת מסך טרום-בנייה למשתמשים עם שגיאות אימות.
| פרמטר | אנדרואיד (Credential Manager) | iOS (GoogleSignIn-iOS) |
|---|---|---|
| מורכבות אינטגרציה | נמוכה (API מקורי) | בינונית (הגדרת URL Scheme, Info.plist) |
| ממשק אימות | Bottom Sheet מקורי | דפדפן / WebView |
| דורש Google Play Services | כן | לא |
| תמיכה במצב לא מקוון | כן (מטמון token) | כן (מטמון token) |
מה כלול בעבודה
- הגדרת הפרויקט ב-Google Cloud Console (Client ID לכל סביבה).
- אינטגרציה באנדרואיד (Credential Manager) ו-iOS (GoogleSignIn-iOS) עם טיפול מלא בשגיאות.
- אימות ID Token בשרת עם תיעוד API.
- סביבת בדיקה עם יכולת סימולציית אימות.
- העברה מה-API הישן (אם כבר יש לכם GoogleSignIn מיושם) — ללא אובדן סשנים של משתמשים.
- שבועיים של תמיכה לאחר המסירה — אנחנו מתקנים באגים בחינם.
לוח זמנים: 4–7 ימי עסקים לאינטגרציה בסיסית (לקוח אחד + שרת). אם נדרשות מספר פלטפורמות (אנדרואיד, iOS, Web), עד 10 ימים. נעריך את הפרויקט שלכם ביום אחד.
הניסיון והערבויות שלנו
יישמנו את Google Sign-In ביותר מ-50 אפליקציות מובייל — מסטארטאפים ועד פתרונות ארגוניים (פינטק, מסחר אלקטרוני, רשתות חברתיות). מהנדסים מוסמכים (Google Associate Android Developer, Apple iOS Developer). אנחנו מבטיחים שהאינטגרציה עובדת: אם מתגלות שגיאות קריטיות בחלק שלנו לאחר המסירה, אנחנו מתקנים אותן תוך 24 שעות.
צרו קשר — קבלו ייעוץ על אינטגרציית Google Sign-In. נספר לכם אילו מלכודות קיימות בפרויקט שלכם ואיך להימנע מהן.







