Per integrare Accedi con Google nella tua app per Android, configura Accedi con Google e aggiungi un pulsante al layout della tua app che avvii il flusso di accesso.
Prima di iniziare
Configura un progetto della console API di Google e configura il progetto Android Studio.
Configurare Accedi con Google e l'oggetto GoogleSignInClient
Nel metodo
onCreatedell'attività di accesso, configura Accedi con Google per richiedere i dati utente richiesti dalla tua app. Ad esempio, per configurare Accedi con Google in modo da richiedere l'ID e le informazioni di base del profilo degli utenti, crea un oggettoGoogleSignInOptionscon il parametroDEFAULT_SIGN_IN. Per richiedere anche gli indirizzi email degli utenti, crea l'oggettoGoogleSignInOptionscon l'opzionerequestEmail.// 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 di Google, specificali con
requestScopes. Per garantire la migliore esperienza utente, al momento dell'accesso, richiedi solo gli ambiti necessari per il funzionamento minimo della tua app. Richiedi eventuali ambiti aggiuntivi solo quando ne hai bisogno, in modo che gli utenti vedano la schermata per il consenso nel contesto di un'azione che hanno eseguito. Consulta Richiesta di ambiti aggiuntivi.Poi, sempre nel metodo
onCreatedell'attività di accesso, crea un oggettoGoogleSignInClientcon le opzioni che hai specificato.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Controllare se esiste un utente che ha eseguito l'accesso
Nel metodo onStart dell'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 la tua
attività principale o qualsiasi altra azione appropriata per la tua app.
Se GoogleSignIn.getLastSignedInAccount restituisce null, l'utente non ha ancora
effettuato l'accesso alla tua app con Google. Aggiorna la tua UI per visualizzare il pulsante
Accedi con Google.
Aggiungere il pulsante Accedi con Google alla tua app
Aggiungi SignInButtonnel layout dell'applicazione:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />(Facoltativo) Se utilizzi la grafica predefinita del pulsante di accesso anziché fornire i tuoi asset del pulsante di accesso, puoi personalizzare le dimensioni del pulsante con il metodo
setSize.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
Nell'attività Android (ad esempio, nel metodo
onCreate), registraOnClickListenerdel pulsante per consentire all'utente di accedere quando fa clic:findViewById(R.id.sign_in_button).setOnClickListener(this);
Avviare il flusso di accesso
Nel metodo onClickdell'attività, gestisci i tocchi del pulsante di accesso creando un intent di accesso con il metodogetSignInIntente avviando l'intent constartActivityForResult.@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 con cui accedere. Se hai richiesto ambiti oltre a
profile,emaileopenid, all'utente viene anche chiesto di concedere l'accesso alle risorse richieste.Dopo l'accesso dell'utente, puoi ottenere un oggetto
GoogleSignInAccountper l'utente nel metodoonActivityResultdell'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
GoogleSignInAccountcontiene informazioni sull'utente che ha eseguito l'accesso, ad esempio il suo 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 ottenere l'indirizzo email dell'utente con
getEmail, l'ID Google dell'utente (per l'utilizzo lato client) congetIde un token ID per l'utente congetIdToken. Se devi trasmettere l'utente attualmente connesso a un server di backend, invia il token ID al server di backend e convalidalo sul server.