שילוב כניסה באמצעות חשבון Google באפליקציית Android

כדי לשלב את 'כניסה באמצעות חשבון Google' באפליקציה ל-Android, צריך להגדיר את 'כניסה באמצעות חשבון Google' ואת להוסיף לחצן לפריסה של האפליקציה שמתחיל את תהליך הכניסה.

לפני שמתחילים

הגדרת פרויקט ב-Google API Console והגדרת הפרויקט ב-Android Studio

הגדרת כניסה באמצעות חשבון Google והאובייקט GoogleSignInClient

  1. בשיטה 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. כדי ליהנות מחוויית המשתמש הטובה ביותר, בכניסה לחשבון, צריך לבקש רק את היקפי ההרשאות שנדרשת לפעולה מינימלית של האפליקציה. שליחת בקשה להיקפים נוספים רק כאשר אתה צריך אותם, כדי שהמשתמשים שלך יראו את מסך ההסכמה ההקשר של הפעולה שהם ביצעו. בקשה להיקפים נוספים

  2. לאחר מכן, בשיטה onCreate של פעילות הכניסה, צריך ליצור אובייקט 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 לאפליקציה

  1. לחצן הכניסה הרגיל לחשבון Google הוספה של SignInButton בפריסה של האפליקציה:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. אופציונלי: אם משתמשים בגרפיקה של לחצן הכניסה שמוגדר כברירת מחדל במקום אם תספקו נכסים משלכם של לחצני כניסה, תוכלו להתאים אישית את גודל באמצעות setSize .

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
  3. בפעילות ב-Android (לדוגמה, בשיטה onCreate), נרשמים OnClickListener של הלחצן שלך כדי להיכנס למשתמש לאחר לחיצה:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

התחלת תהליך הכניסה

  1. תמונה של בורר החשבונות בכניסה ב-method onClick של הפעילות, כדי לטפל בהקשות על לחצן הכניסה, צריך ליצור כוונת כניסה עם getSignInIntent ומתחילים את ה-Intent ב-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);
    }

    כשמפעילים את ה-Intent, המשתמש צריך לבחור חשבון Google כדי להיכנס עם. אם ביקשת היקפים מעבר ל-profile, ל-email ול-openid, המשתמש יתבקש להעניק גם גישה למשאבים המבוקשים.

  2. אחרי שהמשתמש נכנס לחשבון, אפשר לקבל אובייקט 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. אם צריך להעביר את המשתמש שמחובר עכשיו לשרת עורפי, שליחת האסימון המזהה לשרת העורפי שלכם ולאמת את האסימון בשרת.