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 i ustaw projekt w 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 zapewnić użytkownikom jak największą wygodę, podczas logowania żądaj tylko zakresów niezbędnych do 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. 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 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 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 w Google do aplikacji

  1. Standardowy przycisk logowania przez 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 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 metodę OnClickListener przycisku, aby zalogować użytkownika po jego 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żądasz zakresów innych niż profile, emailopenid, użytkownik zostanie też poproszony 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.