כדי לשלב את הכניסה באמצעות חשבון Google באפליקציית Android, צריך להגדיר את הכניסה באמצעות חשבון Google ולהוסיף פריסה של לחצן לאפליקציה שמתחיל את תהליך הכניסה.
לפני שמתחילים
מגדירים פרויקט במסוף Google Cloud ומגדירים את הפרויקט ב-Android Studio.
הגדרת הכניסה באמצעות חשבון Google והאובייקט GoogleSignInClient
בשיטה
onCreateשל פעילות הכניסה, מגדירים את הכניסה באמצעות חשבון Google כך שתבקש את נתוני המשתמש שנדרשים לאפליקציה. לדוגמה, כדי להגדיר את הכניסה באמצעות חשבון Google כך שתבקש את מזהה המשתמש ופרטים בסיסיים בפרופיל, יוצרים אובייקטGoogleSignInOptionsעם הפרמטרDEFAULT_SIGN_IN. כדי לבקש גם את כתובות האימייל של המשתמשים, יוצרים את האובייקטGoogleSignInOptionsעם האפשרותrequestEmail.// Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build();אם אתם צריכים לבקש היקפי הרשאות נוספים כדי לגשת ל-Google APIs, אתם יכולים לציין אותם באמצעות
requestScopes. כדי לספק את חוויית המשתמש הכי טובה, כשמשתמשים נכנסים לחשבון, צריך לבקש רק את היקפי ההרשאות שנדרשים כדי שהאפליקציה תפעל בצורה מינימלית. כדאי לבקש היקפי הרשאות נוספים רק כשצריך אותם, כדי שהמשתמשים יראו את מסך ההסכמה בהקשר של פעולה שהם ביצעו. איך מבקשים היקפים נוספיםלאחר מכן, גם ב
onCreatemethod של פעילות הכניסה, יוצרים אובייקטGoogleSignInClientעם האפשרויות שצוינו.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
בדיקה אם קיים משתמש שמחובר לחשבון
בשיטה onStart של הפעילות, בודקים אם משתמש כבר נכנס לאפליקציה באמצעות Google.
// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
updateUI(account);
אם הפונקציה GoogleSignIn.getLastSignedInAccount מחזירה אובייקט GoogleSignInAccount (ולא null), סימן שהמשתמש כבר נכנס לאפליקציה באמצעות Google.
מעדכנים את ממשק המשתמש בהתאם – כלומר, מסתירים את לחצן הכניסה, מפעילים את הפעילות הראשית או כל פעולה אחרת שמתאימה לאפליקציה.
אם הפונקציה GoogleSignIn.getLastSignedInAccount מחזירה null, המשתמש עדיין לא נכנס לאפליקציה באמצעות Google. מעדכנים את ממשק המשתמש כדי להציג את לחצן הכניסה לחשבון Google.
הוספה של לחצן הכניסה לחשבון Google לאפליקציה

מוסיפים את
SignInButtonלפריסה של האפליקציה:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />אופציונלי: אם אתם משתמשים בגרפיקה של לחצן הכניסה שמוגדרת כברירת מחדל במקום לספק נכסים משלכם ללחצן הכניסה, אתם יכולים להתאים אישית את הגודל של הלחצן באמצעות השיטה
setSize.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);בפעילות Android (לדוגמה, בשיטה
onCreate), רושמים אתOnClickListenerשל הלחצן כדי שהמשתמש יתחבר כשהוא לוחץ עליו:findViewById(R.id.sign_in_button).setOnClickListener(this);
התחלת תהליך הכניסה
בשיטה onClickשל הפעילות, מטפלים בהקשות על לחצן הכניסה על ידי יצירת כוונת כניסה באמצעות השיטהgetSignInIntentוהפעלת הכוונה באמצעותstartActivityForResult.@Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } }private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); }הפעלת הכוונה גורמת למשתמש לבחור חשבון Google כדי להיכנס אליו. אם ביקשתם היקפים מעבר ל-
profile,emailו-openid, המשתמש יתבקש גם לתת גישה למשאבים המבוקשים.אחרי שהמשתמש נכנס לחשבון, אפשר לקבל אובייקט
GoogleSignInAccountשל המשתמש בשיטהonActivityResultשל הפעילות.@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { // The Task returned from this call is always completed, no need to attach // a listener. Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } }אובייקט
GoogleSignInAccountמכיל מידע על המשתמש שמחובר לחשבון, כמו שם המשתמש.private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. updateUI(account); } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); updateUI(null); } }אפשר גם לקבל את כתובת האימייל של המשתמש באמצעות
getEmail, את מזהה Google של המשתמש (לשימוש בצד הלקוח) באמצעותgetId, ואת טוקן המזהה של המשתמש באמצעותgetIdToken. אם אתם צריכים להעביר את המשתמש המחובר לשרת backend, שולחים את טוקן ה-ID לשרת ה-backend ומאמתים את הטוקן בשרת.