איך משלבים כניסה באמצעות חשבון Google באפליקציה ל-Android
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
כדי לשלב את הכניסה באמצעות חשבון 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.GoogleSignInOptionsgso=newGoogleSignInOptions.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.GoogleSignInAccountaccount=GoogleSignIn.getLastSignedInAccount(this);updateUI(account);
אם הפונקציה GoogleSignIn.getLastSignedInAccount מחזירה אובייקט GoogleSignInAccount (ולא null), סימן שהמשתמש כבר נכנס לאפליקציה באמצעות Google.
מעדכנים את ממשק המשתמש בהתאם – כלומר, מסתירים את לחצן הכניסה, מפעילים את הפעילות הראשית או כל פעולה אחרת שמתאימה לאפליקציה.
אם הפונקציה GoogleSignIn.getLastSignedInAccount מחזירה null, המשתמש עדיין לא נכנס לאפליקציה באמצעות Google. מעדכנים את ממשק המשתמש כדי להציג את לחצן הכניסה לחשבון Google.
אופציונלי: אם אתם משתמשים בגרפיקה של לחצן הכניסה שמוגדרת כברירת מחדל במקום לספק נכסים משלכם ללחצן הכניסה, אתם יכולים להתאים אישית את הגודל של הלחצן באמצעות השיטה setSize.
// Set the dimensions of the sign-in button.SignInButtonsignInButton=findViewById(R.id.sign_in_button);signInButton.setSize(SignInButton.SIZE_STANDARD);
בפעילות Android (לדוגמה, בשיטה onCreate), רושמים את OnClickListener של הלחצן כדי שהמשתמש יתחבר כשהוא לוחץ עליו:
בשיטה onClick של הפעילות, מטפלים בהקשות על לחצן הכניסה על ידי יצירת כוונת כניסה באמצעות השיטה getSignInIntent והפעלת הכוונה באמצעות startActivityForResult.
הפעלת הכוונה גורמת למשתמש לבחור חשבון Google כדי להיכנס איתו. אם ביקשתם היקפים מעבר ל-profile, email ו-openid, המשתמש יתבקש גם להעניק גישה למשאבים המבוקשים.
אחרי שהמשתמש נכנס לחשבון, אפשר לקבל אובייקט GoogleSignInAccount
של המשתמש בשיטה onActivityResult של הפעילות.
אפשר גם לקבל את כתובת האימייל של המשתמש באמצעות getEmail, את מזהה Google של המשתמש (לשימוש בצד הלקוח) באמצעות getId, ואת טוקן המזהה של המשתמש באמצעות getIdToken.
אם אתם צריכים להעביר את המשתמש שמחובר כרגע לשרת קצה עורפי,
שולחים את טוקן ה-ID לשרת הקצה העורפי
ומאמתים את הטוקן בשרת.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Integrate Google Sign-In into Your Android App\n\n| **Warning:**\n|\n| **The Google Sign-In for Android API is outdated and no longer supported.**\n| To ensure the continued security and usability of your app, [migrate your Sign in with\n| Google implementation to Credential Manager](/identity/sign-in/credential-manager-siwg) today. Credential Manager\n| supports passkey, password, and federated identity authentication (such as\n| Sign-in with Google), stronger security, and a more consistent user\n| experience.\n|\n| **For Wear developers:** Credential Manager will be supported in Wear OS\n| 5.1 and later on selected watches. Developers actively supporting Wear OS 3, 4\n| and 5.0 devices with Sign in with Google should continue using Google Sign-in\n| for Android for your Wear applications. Sign in with Google support will be\n| available on Credential Manager APIs for these versions of WearOS at a later\n| date.\n\nTo integrate Google Sign-In into your Android app, configure Google Sign-In and\nadd a button to your app's layout that starts the sign-in flow.\n\nBefore you begin\n----------------\n\nConfigure a Google API Console project and set up your Android Studio project.\n\nConfigure Google Sign-in and the GoogleSignInClient object\n----------------------------------------------------------\n\n1. In your sign-in activity's `onCreate` method, configure Google Sign-In to\n request the user data required by your app. For example, to configure\n Google Sign-In to request users' ID and basic profile information, create a\n [`GoogleSignInOptions`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInOptions.Builder.html#GoogleSignInOptions.Builder())\n object with the `DEFAULT_SIGN_IN` parameter. To request users' email\n addresses as well, create the `GoogleSignInOptions` object with the\n `requestEmail` option.\n\n ```carbon\n // Configure sign-in to request the user's ID, email address, and basic\n // profile. ID and basic profile are included in DEFAULT_SIGN_IN.\n GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)\n .requestEmail()\n .build();\n ```\n\n If you need to request additional scopes to access Google APIs, specify them\n with [`requestScopes`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInOptions.Builder.html#requestScopes(com.google.android.gms.common.api.Scope,%20com.google.android.gms.common.api.Scope...)).\n For the best user experience, on sign-in, only request the scopes that are\n required for your app to minimally function. Request any additional scopes\n only when you need them, so that your users see the consent screen in the\n context of an action they performed.\n See [Requesting Additional Scopes](https://developers.google.com/identity/sign-in/android/additional-scopes).\n2. Then, also in your sign-in activity's `onCreate` method, create a\n `GoogleSignInClient` object with the options you specified.\n\n ```scilab\n // Build a GoogleSignInClient with the options specified by gso.\n mGoogleSignInClient = GoogleSignIn.getClient(this, gso);\n ```\n\nCheck for an existing signed-in user\n------------------------------------\n\nIn your activity's `onStart` method, check if a user has already signed in to\nyour app with Google. \n\n```scilab\n// Check for existing Google Sign In account, if the user is already signed in\n// the GoogleSignInAccount will be non-null.\nGoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);\nupdateUI(account);\n```\n\nIf `GoogleSignIn.getLastSignedInAccount` returns a `GoogleSignInAccount` object\n(rather than `null`), the user has already signed in to your app with Google.\nUpdate your UI accordingly---that is, hide the sign-in button, launch your\nmain activity, or whatever is appropriate for your app.\n\nIf `GoogleSignIn.getLastSignedInAccount` returns `null`, the user has not yet\nsigned in to your app with Google. Update your UI to display the Google Sign-in\nbutton.\n| **Note:** If you need to detect changes to a user's auth state that happen outside your app, such as access token or ID token revocation, or to perform cross-device sign-in, you might also call `GoogleSignInClient.silentSignIn` when your app starts.\n\nAdd the Google Sign-in button to your app\n-----------------------------------------\n\n1.\n Add the [`SignInButton`](https://developers.google.com/android/reference/com/google/android/gms/common/SignInButton)\n in your application's layout:\n\n \u003ccom.google.android.gms.common.SignInButton\n android:id=\"@+id/sign_in_button\"\n android:layout_width=\"wrap_content\"\n android:layout_height=\"wrap_content\" /\u003e\n\n2. **Optional** : If you are using the default sign-in button graphic instead of\n providing your own sign-in button assets, you can customize the button's\n size with the [`setSize`](https://developers.google.com/android/reference/com/google/android/gms/common/SignInButton.html#setSize(int))\n method.\n\n ```scilab\n // Set the dimensions of the sign-in button.\n SignInButton signInButton = findViewById(R.id.sign_in_button);\n signInButton.setSize(SignInButton.SIZE_STANDARD);\n ```\n3. In the Android activity (for example, in the `onCreate` method), register\n your button's `OnClickListener` to sign in the user when clicked:\n\n findViewById(R.id.sign_in_button).setOnClickListener(this);\n\nStart the sign-in flow\n----------------------\n\n1.\n In the activity's `onClick` method, handle sign-in button taps by creating a\n sign-in intent with the [`getSignInIntent`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInClient#getSignInIntent())\n method, and starting the intent with `startActivityForResult`.\n\n @Override\n public void onClick(View v) {\n switch (v.getId()) {\n case R.id.sign_in_button:\n signIn();\n break;\n // ...\n }\n }\n\n ```scdoc\n private void signIn() {\n Intent signInIntent = mGoogleSignInClient.getSignInIntent();\n startActivityForResult(signInIntent, RC_SIGN_IN);\n }\n ```\n\n Starting the intent prompts the user to select a Google Account to sign in\n with. If you requested scopes beyond `profile`, `email`, and `openid`, the\n user is also prompted to grant access to the requested resources.\n2. After the user signs in, you can get a [`GoogleSignInAccount`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInAccount.html)\n object for the user in the activity's `onActivityResult` method.\n\n ```transact-sql\n @Override\n public void onActivityResult(int requestCode, int resultCode, Intent data) {\n super.onActivityResult(requestCode, resultCode, data);\n\n // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);\n if (requestCode == RC_SIGN_IN) {\n // The Task returned from this call is always completed, no need to attach\n // a listener.\n Task\u003cGoogleSignInAccount\u003e task = GoogleSignIn.getSignedInAccountFromIntent(data);\n handleSignInResult(task);\n }\n }\n ```\n\n The `GoogleSignInAccount` object contains information about the signed-in\n user, such as the user's name. \n\n ```css+lasso\n private void handleSignInResult(Task\u003cGoogleSignInAccount\u003e completedTask) {\n try {\n GoogleSignInAccount account = completedTask.getResult(ApiException.class);\n\n // Signed in successfully, show authenticated UI.\n updateUI(account);\n } catch (ApiException e) {\n // The ApiException status code indicates the detailed failure reason.\n // Please refer to the GoogleSignInStatusCodes class reference for more information.\n Log.w(TAG, \"signInResult:failed code=\" + e.getStatusCode());\n updateUI(null);\n }\n }\n ```\n\n You can also get the user's email address with [`getEmail`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInAccount.html#getEmail()),\n the user's Google ID (for client-side use) with [`getId`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInAccount.html#getId()),\n and an ID token for the user with [`getIdToken`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInAccount.html#getIdToken()).\n If you need to pass the currently signed-in user to a backend server,\n [send the ID token to your backend server](https://developers.google.com/identity/sign-in/android/backend-auth)\n and validate the token on the server."]]