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

Google Identity Services (GIS) הוא סדרה חדשה של ממשקי API שמאפשרת למשתמשים להיכנס לחשבון ולהירשם בקלות ובצורה מאובטחת, בחבילה קלה להטמעה למפתחים. המסמך הזה כולל הסבר על ממשק API חדש לכניסה באמצעות חשבון Google (חלק מ-GIS), שבו תוכלו להשתמש כדי להתחיל את תהליך הכניסה או ההרשמה כשהמשתמש מקיש על הלחצן 'כניסה באמצעות חשבון Google'. אפשר להשתמש ב-API הזה במקום בממשקי ה-API הקיימים לכניסה באמצעות חשבון Google לתהליכי הכניסה.

עליכם להשתמש ב-API הזה רק כשהמשתמש מראה בצורה מפורשת כוונה להיכנס באמצעות חשבון Google. לדוגמה, תוכלו להשתמש ב-API הזה כשהם לוחצים על לחצן "Sign in with Google" באפליקציה שלכם.

אין להשתמש ב-API הזה כדי לבקש מהמשתמש להיכנס לחשבון במהלך הפעלת האפליקציה או בתגובה לגורם אחר, כמו הוספת פריט לעגלת הקניות. בתרחישים לדוגמה האלה, השתמשו בכניסה והרשמה בהקשה אחת.

כשתתחילו את תהליך הכניסה באמצעות חשבון Google לממשק החדש של ה-API, ממשק המשתמש הזה יוצג:

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

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

מגדירים פרויקט ב-Google API Console ומגדירים את פרויקט Android Studio.

שליחה של בקשת כניסה

כדי להפעיל תהליך כניסה באמצעות חשבון Google באמצעות Identity API, יוצרים אובייקט GetSignInRequest. לאחר מכן, בקריאה לאובייקט SignInClient getSignInIntent. הקריאה הזו אסינכרונית, ולאחר ביצוע ההפעלה היא תספק PendingIntent כדי לפתוח את תיבת הדו-שיח.

    private static final int REQUEST_CODE_GOOGLE_SIGN_IN = 1; /* unique request id */

    private void signIn() {
        GetSignInIntentRequest request =
            GetSignInIntentRequest.builder()
                .setServerClientId(getString(R.string.server_client_id))
                .build();

        Identity.getSignInClient(activity)
            .getSignInIntent(request)
            .addOnSuccessListener(
                    result -> {
                        try {
                            startIntentSenderForResult(
                                    result.getIntentSender(),
                                    REQUEST_CODE_GOOGLE_SIGN_IN,
                                    /* fillInIntent= */ null,
                                    /* flagsMask= */ 0,
                                    /* flagsValue= */ 0,
                                    /* extraFlags= */ 0,
                                    /* options= */ null);
                        } catch (IntentSender.SendIntentException e) {
                            Log.e(TAG, "Google Sign-in failed");
                        }
                    })
            .addOnFailureListener(
                    e -> {
                        Log.e(TAG, "Google Sign-in failed", e);
                    });
    }

טיפול בתוצאות הכניסה

ב-onActivityResult מאחזרים SignInCredential. האובייקט SignInCredential שמוחזר מ-getSignInCredentialFromIntent מכיל מידע על התחברות חוקית. אם המשתמש לא מצליח להתחבר מסיבה כלשהי, יורק ApiException.

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
                try {
                    SignInCredential credential = Identity.getSignInClient(this).getSignInCredentialFromIntent(data);
                    // Signed in successfully - show authenticated UI
                    updateUI(credential);
                } catch (ApiException e) {
                    // The ApiException status code indicates the detailed failure reason.
                }
            }
        }
    }
private ActivityResultLauncher<IntentSenderRequest> loginResultHandler = registerForActivityResult(new ActivityResultContracts.StartIntentSenderForResult(), result -> {
    // handle intent result here
});

התוצאה של כניסה מוצלחת תמיד מחזירה למשתמשים את השם המלא, כתובת האימייל וכתובת ה-URL של תמונת הפרופיל. אם אתם זקוקים למידע נוסף, תוכלו להפנות את המשתמשים לתהליך מלא של פרטי הפרופיל.