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 uruchamia proces logowania.

Zanim zaczniesz

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

Konfigurowanie logowania przez Google i obiektu GoogleSignInClient

  1. W metodzie onCreate aktywności logowania skonfiguruj logowanie przez Google, aby poprosić o dane użytkownika wymagane przez aplikację. Aby na przykład skonfigurować logowanie przez Google w celu żądania identyfikatora użytkownika i podstawowych informacji o profilu, utwórz obiekt GoogleSignInOptions z parametrem DEFAULT_SIGN_IN. Aby poprosić użytkowników o adresy e-mail, 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 potrzebujesz dodatkowych zakresów uprawnień, aby uzyskać dostęp do interfejsów API Google, określ je za pomocą requestScopes. Aby zapewnić użytkownikom jak najlepszą obsługę, podczas logowania żądaj tylko zakresów niezbędnych do minimalnego działania aplikacji. Proś o dodatkowe zakresy uprawnień tylko wtedy, gdy są Ci potrzebne, aby użytkownicy widzieli ekran zgody w kontekście wykonanego przez nich działania. 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 zalogowany użytkownik jest już obecny

W metodzie onStart aktywności sprawdź, czy użytkownik jest już zalogowany 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 funkcja GoogleSignIn.getLastSignedInAccount zwraca obiekt GoogleSignInAccount (a nie null), oznacza to, że użytkownik jest już zalogowany w aplikacji za pomocą Google. Zaktualizuj interfejs użytkownika, aby ukryć przycisk logowania, uruchomić główną aktywność lub wykonać inne odpowiednie działanie.

Jeśli GoogleSignIn.getLastSignedInAccount zwraca wartość null, użytkownik nie zalogował się jeszcze w aplikacji za pomocą Google. Zaktualizuj interfejs, aby wyświetlić przycisk logowania w Google.

Dodawanie przycisku logowania w Google do aplikacji

  1. Standardowy przycisk logowania Google Dodaj 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 zamiast własnych komponentów przycisku logowania używasz domyślnej grafiki 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 metodę OnClickListener przycisku, aby zalogować użytkownika po jego kliknięciu:

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

Rozpoczęcie procesu logowania

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

    Po uruchomieniu intencjonalnego prompta użytkownik musi wybrać konto Google, na które chce się zalogować. Jeśli zażądasz zakresów innych niż profile, emailopenid, użytkownik zostanie też poproszony o przyznanie dostępu do żądanych zasobów.

  2. Po zalogowaniu się użytkownika możesz uzyskać obiekt GoogleSignInAccount dla użytkownika w ramach metody onActivityResult aktywności.

    @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, identyfikatora Google użytkownika (do użytku po stronie klienta) za pomocą getId oraz tokenu identyfikacyjnego użytkownika za pomocą getIdToken. Jeśli chcesz przekazać aktualnie zalogowanego użytkownika serwerowi backendu, wyślij token identyfikacyjny do serwera backendu i potwierdź token na serwerze.