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 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 żądała danych użytkownika wymaganych przez aplikację. Aby na przykład skonfigurować Logowanie przez Google pod kątem wysyłania żądań identyfikatora użytkownika i podstawowych informacji z profilu, utwórz obiekt GoogleSignInOptions z parametrem DEFAULT_SIGN_IN. Aby poprosić również o adresy e-mail użytkowników, utwórz obiekt GoogleSignInOptions za pomocą opcji 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 zadbać o wygodę użytkowników, podczas logowania używaj tylko tych zakresów, które są niezbędne do działania aplikacji w minimalnym stopniu. Żądaj dodatkowych zakresów tylko wtedy, gdy są 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 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 już zalogowany

W metodzie onStart aktywności sprawdź, czy użytkownik zalogował się już w Twojej aplikacji przez 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. Zaktualizuj odpowiednio interfejs, tj. ukryj przycisk logowania, uruchom główne działanie lub inne elementy odpowiednie dla Twojej aplikacji.

Jeśli GoogleSignIn.getLastSignedInAccount zwraca wartość null, użytkownik nie zalogował się jeszcze w Twojej aplikacji przez Google. Zaktualizuj swój interfejs tak, aby wyświetlał przycisk Zaloguj się przez Google.

Dodawanie przycisku logowania przez Google do aplikacji

  1. Standardowy przycisk logowania przez GoogleDodaj 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 dostarczać własne zasoby przycisku logowania, używasz domyślnej grafiki przycisku logowania, możesz dostosować jego rozmiar 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 parametr 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 logowaniaW metodzie onClick aktywności obsługa kliknięć przycisków logowania przez utworzenie intencji logowania za pomocą metody getSignInIntent i rozpoczęcie intencji 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, na które będzie się zalogować. Jeśli poprosisz o zakresy wykraczające poza profile, email i openid, użytkownik zobaczy też prośbę o przyznanie dostępu do żądanych 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. jego 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);
        }
    }

    Adres e-mail użytkownika możesz też uzyskać za pomocą narzędzia getEmail, identyfikator Google użytkownika (do użytku po stronie klienta) za pomocą narzędzia getId, a 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.