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 rozpoczynający proces logowania.

Zanim zaczniesz

Skonfiguruj projekt w Konsoli interfejsów API Google oraz projekt Android Studio.

Konfigurowanie logowania przez Google i obiektu GoogleSignInClient

  1. W metodzie onCreate aktywności związanej z logowaniem skonfiguruj Logowanie przez Google, aby zażądać danych użytkownika wymaganych przez aplikację. Aby na przykład skonfigurować Logowanie przez Google, aby wymagać od użytkowników identyfikator i podstawowe informacje w profilu, GoogleSignInOptions z parametrem DEFAULT_SIGN_IN. Aby poprosić użytkowników o e-mail utwórz obiekt GoogleSignInOptions z 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 w celu uzyskania dostępu do interfejsów API Google, określ je dzięki requestScopes. Aby zadbać o wygodę użytkowników, podczas logowania wysyłaj żądania tylko tych zakresów, które są wymaganych do działania aplikacji w minimalnym stopniu. Poproś o dodatkowe zakresy tylko wtedy, gdy są potrzebne. Dzięki temu użytkownicy zobaczą ekran zgody kontekstu czynności wykonywanej przez użytkownika. Patrz sekcja Przesyłanie prośby o dodatkowe zakresy.

  2. Następnie, również w metodzie onCreate aktywności związanej z logowaniem, utwórz GoogleSignInClient obiekt z określonymi opcjami.

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

Sprawdzanie, czy użytkownik jest już zalogowany

Korzystając z metody onStart związanej z aktywnością, sprawdź, czy użytkownik zalogował się już na aplikację w 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), użytkownik zalogował się już w Twojej aplikacji przez Google. Odpowiednio zaktualizuj interfejs, czyli ukryj przycisk logowania, uruchom głównej aktywności lub innej, która jest odpowiednia dla Twojej aplikacji.

Jeśli GoogleSignIn.getLastSignedInAccount zwraca wartość null, użytkownik jeszcze tego nie zrobił zalogowanych w aplikacji przez Google. Zaktualizuj swój UI, aby wyświetlać logowanie przez Google Przycisk

Dodawanie przycisku logowania przez Google do aplikacji

  1. Standardowy przycisk logowania przez Google Dodaj SignInButton w układzie 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 związanych z przyciskiem logowania, możesz dostosować w rozmiarze 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 sekcji wybierania konta do logowania W metodzie onClick aktywności obsługa kliknięć przycisku logowania przez utworzenie intencja logowania za pomocą interfejsu getSignInIntent i zaczynając intencję od 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);
    }

    Rozpoczęcie intencji prosi użytkownika o wybranie konta Google do zalogowania się z naszymi usługami. Jeśli zażądano zakresów wykraczających poza profile, email i openid, parametr zostanie również wyświetlony monit o przyznanie dostępu do żądanych zasobów.

  2. Gdy użytkownik się zaloguje, możesz otrzymać GoogleSignInAccount użytkownika w metodzie 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. nazwę użytkownika, np. nazwę użytkownika.

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

    Adres e-mail użytkownika możesz też uzyskać, używając getEmail, identyfikator Google użytkownika (do użytku po stronie klienta) w getId, i token identyfikatora użytkownika getIdToken. Jeśli musisz przekazać aktualnie zalogowanego użytkownika do serwera backendu, wyślij token identyfikatora do serwera backendu i zweryfikować token na serwerze.