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