דף זה תורגם על ידי Cloud Translation API.
Switch to English

שילוב כניסה של 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();

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

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

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

התחל את זרימת הכניסה

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

  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 מכיל מידע אודות המשתמש 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, שלח את אסימון הזיהוי לשרת backend שלך ואמת את האסימון בשרת.