כדי לשלב את 'כניסה באמצעות חשבון Google' באפליקציה ל-Android, צריך להגדיר את 'כניסה באמצעות חשבון Google' ולהוסיף לחצן לפריסה של האפליקציה שמתחיל את תהליך הכניסה.
לפני שמתחילים
מגדירים פרויקט במסוף Google API ומגדירים פרויקט Android Studio.
הגדרת כניסה באמצעות חשבון Google והאובייקט GoogleSignInClient
ב-method
onCreate
של פעילות הכניסה, מגדירים את Google'כניסה באמצעות חשבון 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
. כדי ליהנות מחוויית המשתמש הטובה ביותר, בכניסה לחשבון צריך לבקש רק את ההיקפים הנדרשים כדי שהאפליקציה תפעל באופן מינימלי. מבקשים היקפי הרשאות נוספים רק במקרה הצורך, כדי שהמשתמשים יראו את מסך ההסכמה בהקשר של הפעולה שהם ביצעו. ראו בקשה להיקפים נוספים.לאחר מכן, ב-method
onCreate
של פעילות הכניסה, יוצרים אובייקטGoogleSignInClient
עם האפשרויות שציינתם.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
חיפוש משתמש מחובר קיים
בודקים ב-method 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
בפעילות, מטפלים בהקשות על לחצני הכניסה על ידי יצירת Intent של כניסה באמצעות שיטת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
בשביל המשתמש ב-methodonActivityResult
של הפעילות.@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
. אם אתם צריכים להעביר את המשתמש שמחובר כרגע לשרת עורפי, צריך לשלוח את האסימון המזהה לשרת העורפי שלכם ולאמת את האסימון בשרת.