Integracja Logowania przez Google z aplikacją na Androida

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

Zanim zaczniesz

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

Konfigurowanie logowania przez Google i obiektu GoogleSignInClient

  1. W metodzie onCreate aktywności logowania skonfiguruj Logowanie przez Google, aby żądać danych użytkownika wymaganych przez aplikację. Na przykład aby skonfigurować Logowanie przez Google w taki sposób, aby żądało identyfikatora użytkownika i podstawowych informacji z profilu, utwórz obiekt GoogleSignInOptions z parametrem DEFAULT_SIGN_IN. Aby wysyłać żądania również do adresów 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 dostępu do interfejsów API Google, określ je za pomocą requestScopes. Aby uzyskać jak najlepsze wrażenia użytkownika, podczas logowania się używaj tylko tych zakresów, które są niezbędne, aby aplikacja działała w minimalnym zakresie. W razie potrzeby proś o dodatkowe zakresy, aby użytkownicy widzieli ekran zgody w kontekście wykonanego działania. Zobacz Wysyłanie prośby o zakresy dodatkowe.

  2. Następnie utwórz metodę 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 istniejącego zalogowanego użytkownika

W metodzie onStart Twojej aktywności sprawdź, czy użytkownik nie zalogował się już w Twojej 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 za pomocą konta Google. Zaktualizuj odpowiednio interfejs, czyli ukryj przycisk logowania i uruchom główną aktywność lub inne elementy pasujące do Twojej aplikacji.

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

Dodaj przycisk Logowanie przez Google do swojej 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 korzystasz z domyślnej grafice przycisku logowania zamiast przesyłania własnych zasobów przycisku logowania, możesz dostosować rozmiar przycisku, korzystając z 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 na Androidzie (np. w metodzie onCreate) zarejestruj OnClickListener przycisku, aby zalogować użytkownika po kliknięciu:

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

Rozpocznij procedurę logowania

  1. Obraz wyboru konta logowaniaW metodzie onClick działania użytkownika kliknij przycisk logowania, tworząc intencję logowania za pomocą metody getSignInIntent i rozpoczynając zamiar 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 wysłanie zapytania do użytkownika w celu wybrania konta Google. Jeśli zażądano zakresów poza profile, email i openid, użytkownik zostanie również poproszony o przyznanie dostępu do wybranych zasobów.

  2. Gdy użytkownik się zaloguje, możesz uzyskać dla niego obiekt GoogleSignInAccount 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, np. nazwę.

    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, jego identyfikatora Google (do użytku po stronie klienta) w getId oraz tokenu identyfikatora użytkownika getIdToken. Jeśli chcesz przekazać aktualnie zalogowanego użytkownika na serwer backendu, wyślij token identyfikatora do serwera backendu i sprawdź token na serwerze.