Integrazione di Accedi con Google nella tua app Android

Per integrare Accedi con Google nella tua app per Android, configura Accedi con Google e aggiungi al layout della tua app un pulsante che avvii il flusso di accesso.

Prima di iniziare

Configura un progetto della console API di Google e imposta il tuo progetto Android Studio.

Configurare Accedi con Google e l'oggetto GoogleSignInClient

  1. Nel metodo onCreate della tua attività di accesso, configura Accedi con Google per richiedere i dati utente richiesti dalla tua app. Ad esempio, per configurare Accedi con Google per richiedere l'accesso ID e informazioni di base del profilo, crea un GoogleSignInOptions con il parametro DEFAULT_SIGN_IN. Per richiedere l'accesso email crea l'oggetto GoogleSignInOptions con Opzione 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();

    Se devi richiedere ambiti aggiuntivi per accedere alle API Google, specificali con requestScopes. Per una migliore esperienza utente, al momento dell'accesso richiedi solo gli ambiti che il funzionamento minimo dell'app. Richiedi eventuali ambiti aggiuntivi solo quando ti servono, in modo che gli utenti vedano la schermata per il consenso contesto di un'azione eseguita. Consulta la sezione Richiesta di ambiti aggiuntivi.

  2. Quindi, anche nel metodo onCreate della tua attività di accesso, crea una GoogleSignInClient oggetto con le opzioni specificate.

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

Controllare se è già presente un utente che ha eseguito l'accesso

Nel metodo onStart della tua attività, controlla se un utente ha già eseguito l'accesso alla tua app con 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);

Se GoogleSignIn.getLastSignedInAccount restituisce un oggetto GoogleSignInAccount (anziché null), l'utente ha già eseguito l'accesso alla tua app con Google. Aggiorna la tua UI di conseguenza, ovvero nascondi il pulsante di accesso, avvia il tuo attività principale o qualsiasi altra attività appropriata per la tua app.

Se GoogleSignIn.getLastSignedInAccount restituisce null, l'utente non ha ancora hai eseguito l'accesso alla tua app con Google. Aggiornare la UI per visualizzare la pagina Accedi con Google .

Aggiungere il pulsante Accedi con Google all'app

  1. Il pulsante Accedi con Google standard Aggiungi SignInButton nel layout della tua applicazione:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. Facoltativo: se utilizzi l'immagine del pulsante di accesso predefinito anziché fornendo i tuoi asset per i pulsanti di accesso, puoi personalizzare il dimensioni con setSize .

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
  3. Nell'attività di Android (ad esempio, nel metodo onCreate), registra il OnClickListener del pulsante per consentire all'utente di fare clic su:

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

Avvia il flusso di accesso

  1. Immagine del selettore dell&#39;account di accesso Nel metodo onClick dell'attività, gestisci i tocchi dei pulsanti di accesso creando un intent di accesso con getSignInIntent e iniziando l'intent con 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);
    }

    L'avvio dell'intent chiede all'utente di selezionare un Account Google per accedere con. Se hai richiesto ambiti diversi da profile, email e openid, il valore viene inoltre chiesto all'utente di concedere l'accesso alle risorse richieste.

  2. Dopo che l'utente ha eseguito l'accesso, puoi ricevere un GoogleSignInAccount per l'utente nel metodo onActivityResult dell'attività.

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

    L'oggetto GoogleSignInAccount contiene informazioni sull'utente che ha eseguito l'accesso, ad esempio il nome.

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

    Puoi anche recuperare l'indirizzo email dell'utente con getEmail, l'ID Google dell'utente (per l'utilizzo lato client) con getId, e un token ID per l'utente con getIdToken. Se devi trasferire l'utente che ha eseguito l'accesso a un server di backend, invia il token ID al server di backend e convalidare il token sul server.