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

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

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

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