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 nella console API di Google e imposta il tuo progetto Android Studio.
Configurare Accedi con Google e l'oggetto GoogleSignInClient
Nel metodo
onCreate
dell'attività di accesso, configura Accedi con Google in modo da richiedere i dati utente richiesti dalla tua app. Ad esempio, per configurare Accedi con Google per richiedere l'ID utente e le informazioni di base del profilo, crea un oggettoGoogleSignInOptions
con il parametroDEFAULT_SIGN_IN
. Per richiedere anche gli indirizzi email degli utenti, crea l'oggettoGoogleSignInOptions
con 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 una migliore esperienza utente, al momento dell'accesso richiedi solo gli ambiti necessari per far funzionare al minimo la tua app. Richiedi eventuali ambiti aggiuntivi solo quando ne hai bisogno, in modo che gli utenti vedano la schermata del consenso nel contesto di un'azione che hanno eseguito. Consulta la sezione Richiedere ambiti aggiuntivi.Quindi, anche nel metodo
onCreate
dell'attività di accesso, crea un oggettoGoogleSignInClient
con le opzioni specificate.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Verifica la presenza di un utente che ha già 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
(invece di null
), l'utente ha già eseguito l'accesso alla tua app con Google.
Aggiorna l'interfaccia utente di conseguenza, nascondi il pulsante di accesso, avvia l'attività principale o esegui qualsiasi operazione appropriata per la tua app.
Se GoogleSignIn.getLastSignedInAccount
restituisce null
, l'utente non ha ancora eseguito
l'accesso alla tua app con Google. Aggiorna la UI per visualizzare il pulsante Accedi con Google.
Aggiungere il pulsante Accedi con Google alla tua app
Aggiungi
SignInButton
al 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" />
(Facoltativo) Se utilizzi l'immagine predefinita del pulsante di accesso anziché fornire le tue risorse 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à di Android (ad esempio, nel metodo
onCreate
), registra il valoreOnClickListener
del pulsante per far accedere l'utente quando fa clic:findViewById(R.id.sign_in_button).setOnClickListener(this);
Avvia il flusso di accesso
Nel metodo
onClick
dell'attività, gestisci i tocchi con i pulsanti di accesso creando un intent di accesso con il metodogetSignInIntent
e iniziando 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 richiede all'utente di selezionare un Account Google con cui accedere. Se hai richiesto ambiti oltre
profile
,email
eopenid
, all'utente viene chiesto anche di concedere l'accesso alle risorse richieste.Dopo che l'utente ha eseguito l'accesso, puoi ottenere un oggetto
GoogleSignInAccount
per l'utente nel metodoonActivityResult
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, come 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'uso lato client) congetId
e un token ID per l'utente congetIdToken
. Se devi passare l'utente che ha eseguito l'accesso a un server di backend, invia il token ID al server di backend e convalida il token sul server.