Integracja logowania przez Google z aplikacją na Androida

Aby zintegrować logowanie przez Google z aplikacją na Androida, skonfiguruj logowanie przez Google i dodaj do układu aplikacji przycisk, który rozpoczyna proces logowania.

Zanim zaczniesz

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

Konfigurowanie logowania przez Google i obiektu GoogleSignInClient

  1. W metodzie onCreate aktywności logowania skonfiguruj logowanie przez Google tak, aby prosiło o dane użytkownika wymagane przez Twoją aplikację. Aby na przykład skonfigurować logowanie przez Google tak, aby prosiło o identyfikator użytkownika i podstawowe informacje o profilu, utwórz obiekt GoogleSignInOptions z parametrem DEFAULT_SIGN_IN. Aby poprosić też o adresy e-mail użytkowników, utwórz obiekt GoogleSignInOptions z opcją 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();

    Jeśli chcesz poprosić o dodatkowe zakresy umożliwiające dostęp do interfejsów API Google, określ je za pomocą parametru requestScopes. Aby zapewnić użytkownikom jak najlepsze wrażenia, podczas logowania wysyłaj żądania tylko tych zakresów, które są niezbędne do minimalnego działania aplikacji. Proś o dodatkowe zakresy tylko wtedy, gdy są potrzebne. Dzięki temu użytkownicy zobaczą ekran zgody w kontekście wykonanej przez siebie czynności. Zobacz Prośba o dodatkowe zakresy.

  2. Następnie w metodzie onCreate aktywności logowania utwórz obiekt GoogleSignInClient z określonymi opcjami.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Sprawdzanie, czy użytkownik jest zalogowany

W metodzie onStart aktywności sprawdź, czy użytkownik zalogował się już w aplikacji za pomocą 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);

Jeśli GoogleSignIn.getLastSignedInAccount zwraca obiekt GoogleSignInAccount (a nie null), oznacza to, że użytkownik zalogował się już w Twojej aplikacji za pomocą Google. Odpowiednio zaktualizuj interfejs – ukryj przycisk logowania, uruchom główną aktywność lub wykonaj inne działania odpowiednie dla Twojej aplikacji.

Jeśli funkcja GoogleSignIn.getLastSignedInAccount zwróci wartość null, oznacza to, że użytkownik nie zalogował się jeszcze w Twojej aplikacji za pomocą Google. Zaktualizuj interfejs, aby wyświetlać przycisk logowania się przez Google.

Dodawanie przycisku logowania przez Google do aplikacji

  1. Standardowy przycisk logowania przez Google Dodaj element SignInButton do układu aplikacji:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. Opcjonalnie: jeśli używasz domyślnej grafiki przycisku logowania zamiast własnych komponentów przycisku logowania, możesz dostosować rozmiar przycisku za pomocą metody setSize.

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
  3. W aktywności Androida (np. w metodzie onCreate) zarejestruj OnClickListener przycisku, aby zalogować użytkownika po kliknięciu:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

Rozpocznij proces logowania

  1. Obraz selektora konta logowania W metodzie onClick aktywności obsługuj kliknięcia przycisku logowania, tworząc intencję logowania za pomocą metody getSignInIntent i uruchamiając ją za pomocą 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);
    }

    Uruchomienie intencji powoduje wyświetlenie prośby o wybranie konta Google, na które użytkownik chce się zalogować. Jeśli zażądasz zakresów wykraczających poza profile, emailopenid, użytkownik zostanie również poproszony o przyznanie dostępu do żądanych zasobów.

  2. Po zalogowaniu się użytkownika możesz uzyskać obiekt GoogleSignInAccount w metodzie onActivityResult działania.

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

    Obiekt GoogleSignInAccount zawiera informacje o zalogowanym użytkowniku, takie jak jego imię i nazwisko.

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

    Możesz też uzyskać adres e-mail użytkownika za pomocą getEmail, identyfikator Google użytkownika (do użytku po stronie klienta) za pomocą getId oraz token identyfikatora użytkownika za pomocą getIdToken. Jeśli musisz przekazać aktualnie zalogowanego użytkownika do serwera backendu, wyślij token identyfikatora do serwera backendu i zweryfikuj go na serwerze.