Nowy interfejs Google Sign-In API

Google Identity Services (GIS) to nowy zestaw interfejsów API, który zapewnia użytkownikom łatwe i bezpieczne logowanie oraz rejestrację. Pakiet jest dostępny w ramach łatwego do wdrożenia pakietu dla deweloperów. Ten dokument zawiera szczegółowe informacje o nowym interfejsie Google Sign-In API (części GIS), którego można używać do rozpoczynania procesu logowania lub rejestracji, gdy użytkownik kliknie przycisk „Zaloguj się przez Google”. Na potrzeby przepływów logowania można używać tego interfejsu API zamiast istniejących interfejsów Google Sign-In API.

Tego interfejsu API należy używać tylko wtedy, gdy użytkownik wyraźnie pokazuje zamiar zalogowania się przez Google. Możesz użyć tego interfejsu API na przykład, gdy użytkownik kliknie przycisk „Zaloguj się przez Google” w swojej aplikacji.

Nie należy używać tego interfejsu API, aby prosić użytkownika o zalogowanie się podczas uruchamiania aplikacji lub w odpowiedzi na inny aktywator, np. dodanie produktu do koszyka. W tych przypadkach użyj logowania i rejestracji jednym dotknięciem.

Gdy uruchomisz proces logowania się przez Google za pomocą nowego interfejsu API, wyświetli się taki interfejs:

Logowanie przez Google

Zanim zaczniesz

Skonfiguruj projekt Konsoli interfejsów API Google i skonfiguruj projekt Android Studio.

Przesyłanie prośby o zalogowanie

Aby uruchomić proces logowania się przez Google za pomocą interfejsu Identity API, utwórz obiekt GetSignInRequest. Następnie użyj wywołania getSignInIntent do wywołania obiektu SignInClient. To wywołanie jest asynchroniczne, a w przypadku powodzenia może użyć elementu PendingIntent, który umożliwi uruchomienie okna.

    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);
                    });
    }

Obsługa wyników logowania

W onActivityResult pobierz SignInCredential. Obiekt SignInCredential zwrócony z getSignInCredentialFromIntent zawiera informacje o prawidłowym logowaniu. Jeśli z jakiegoś powodu użytkownik się nie zaloguje, zostanie zwrócony błąd 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
});

Wynik udanego logowania zawsze zawiera imię i nazwisko użytkownika, adres e-mail oraz adres URL zdjęcia profilowego. Jeśli potrzebujesz dodatkowych informacji, możesz przekierować użytkowników do pełnego przepływu informacji w profilu.