Puoi consentire agli utenti di eseguire l'autenticazione con Firebase utilizzando i propri Account Google.
Prima di iniziare
Se non l'hai già fatto, aggiungi Firebase al tuo progetto Android.
Nel file Gradle del modulo (a livello di app) (in genere
<project>/<app-module>/build.gradle.ktso<project>/<app-module>/build.gradle), aggiungi la dipendenza per la libreria Firebase Authentication per Android. Ti consigliamo di utilizzare la Firebase Android BoM per controllare il controllo delle versioni della libreria.Inoltre, nell'ambito della configurazione di Firebase Authentication, devi aggiungere l'SDK Gestore delle credenziali alla tua app.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.12.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }Con la Firebase Android BoM, la tua app utilizzerà sempre versioni compatibili delle librerie Firebase Android.
(Alternativa) Aggiungere dipendenze della libreria Firebase senza utilizzare la BoM
Se scegli di non utilizzare la Firebase BoM, devi specificare la versione di ogni libreria Firebase nella riga di dipendenza.
Tieni presente che, se utilizzi più librerie Firebase nella tua app, ti consigliamo vivamente di utilizzare la BoM per gestire le versioni delle librerie, in modo da garantire che tutte le versioni siano compatibili.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:24.0.1")
// Also add the dependencies for the Credential Manager libraries and specify their versions implementation("androidx.credentials:credentials:1.3.0") implementation("androidx.credentials:credentials-play-services-auth:1.3.0") implementation("com.google.android.libraries.identity.googleid:googleid:1.1.1") }Se non hai ancora specificato l'impronta SHA della tua app, fallo dalla pagina Impostazioni della Firebase console. Per informazioni dettagliate su come ottenere l'impronta SHA della tua app, consulta Autenticare il client.
- Abilita Google come metodo di accesso nella console Firebase:
- Nella Firebase console, apri la sezione Autenticazione.
- Nella scheda Metodo di accesso, attiva il metodo di accesso Google e fai clic su Salva.
Quando ti viene richiesto nella console, scarica il file di configurazione di Firebase aggiornato (
google-services.json), che ora contiene le informazioni del client OAuth necessarie per l'accesso con Google.Sposta questo file di configurazione aggiornato nel tuo progetto Android Studio, sostituendo il file di configurazione corrispondente ormai obsoleto. (Consulta Aggiungere Firebase al tuo progetto Android.)
Eseguire l'autenticazione con Firebase
- Integra l'accesso con Google nella tua app seguendo i passaggi descritti nella
documentazione di Gestore delle credenziali. Ecco le
istruzioni di alto livello:
- Crea un'istanza di una richiesta di accesso con Google utilizzando
GetGoogleIdOption. Quindi, crea la richiesta di Gestore delle credenziali utilizzandoGetCredentialRequest:Kotlin
// Instantiate a Google sign-in request val googleIdOption = GetGoogleIdOption.Builder() // Your server's client ID, not your Android client ID. .setServerClientId(getString(R.string.default_web_client_id)) // Only show accounts previously used to sign in. .setFilterByAuthorizedAccounts(true) .build() // Create the Credential Manager request val request = GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build()
Java
// Instantiate a Google sign-in request GetGoogleIdOption googleIdOption = new GetGoogleIdOption.Builder() .setFilterByAuthorizedAccounts(true) .setServerClientId(getString(R.string.default_web_client_id)) .build(); // Create the Credential Manager request GetCredentialRequest request = new GetCredentialRequest.Builder() .addCredentialOption(googleIdOption) .build();
Nella richiesta sopra, devi passare l'ID client "server" al
setServerClientIdmetodo. Per trovare l' ID client OAuth 2.0:- Apri la pagina Credenziali nella console Google Cloud.
- L'ID client di tipo Applicazione web è l'ID client OAuth 2.0 del server di backend.
- Verifica che, dopo aver integrato l'accesso con Google, la tua attività di accesso
abbia un codice simile al seguente:
Kotlin
private fun handleSignIn(credential: Credential) { // Check if credential is of type Google ID if (credential is CustomCredential && credential.type == TYPE_GOOGLE_ID_TOKEN_CREDENTIAL) { // Create Google ID Token val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data) // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.idToken) } else { Log.w(TAG, "Credential is not of type Google ID!") } }
Java
private void handleSignIn(Credential credential) { // Check if credential is of type Google ID if (credential instanceof CustomCredential customCredential && credential.getType().equals(TYPE_GOOGLE_ID_TOKEN_CREDENTIAL)) { // Create Google ID Token Bundle credentialData = customCredential.getData(); GoogleIdTokenCredential googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credentialData); // Sign in to Firebase with using the token firebaseAuthWithGoogle(googleIdTokenCredential.getIdToken()); } else { Log.w(TAG, "Credential is not of type Google ID!"); } }
- Crea un'istanza di una richiesta di accesso con Google utilizzando
- Nel metodo
onCreatedell'attività di accesso, recupera l'istanza condivisa dell'oggettoFirebaseAuth:Kotlin
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Quando inizializzi l'attività, controlla se l'utente ha eseguito l'accesso:
Kotlin
override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
- Ora recupera il token ID Google dell'utente creato nel passaggio 1, scambialo con una credenziale Firebase,
ed esegui l'autenticazione con Firebase utilizzando la credenziale Firebase:
Se la chiamata a
Kotlin
private fun firebaseAuthWithGoogle(idToken: String) { val credential = GoogleAuthProvider.getCredential(idToken, null) auth.signInWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.exception) updateUI(null) } } }
Java
private void firebaseAuthWithGoogle(String idToken) { AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null); mAuth.signInWithCredential(credential) .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInWithCredential:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user Log.w(TAG, "signInWithCredential:failure", task.getException()); updateUI(null); } }); }
signInWithCredentialva a buon fine, puoi utilizzare il metodogetCurrentUserper recuperare i dati dell'account dell'utente.
Passaggi successivi
Dopo che un utente ha eseguito l'accesso per la prima volta, viene creato un nuovo account utente e collegato alle credenziali (ovvero nome utente e password, numero di telefono o informazioni del provider di autenticazione) con cui l'utente ha eseguito l'accesso. Questo nuovo account viene memorizzato come parte del tuo progetto Firebase e può essere utilizzato per identificare un utente in ogni app del tuo progetto, indipendentemente dalla modalità di accesso dell'utente.
Nelle tue app, puoi recuperare le informazioni di base del profilo dell'utente dall'
FirebaseUseroggetto. Consulta Gestire gli utenti.Nelle Firebase Realtime Database e Cloud Storage Regole di sicurezza, puoi recuperare l'ID utente univoco dell'utente che ha eseguito l'accesso dalla variabile
auth, e utilizzarlo per controllare i dati a cui un utente può accedere.
Per disconnettere un utente, chiama
signOut. Devi anche cancellare lo stato delle credenziali dell'utente corrente
da tutti i provider di credenziali, come consigliato da la documentazione di Gestore delle credenziali:
Kotlin
private fun signOut() { // Firebase sign out auth.signOut() // When a user signs out, clear the current user credential state from all credential providers. lifecycleScope.launch { try { val clearRequest = ClearCredentialStateRequest() credentialManager.clearCredentialState(clearRequest) updateUI(null) } catch (e: ClearCredentialException) { Log.e(TAG, "Couldn't clear user credentials: ${e.localizedMessage}") } } }
Java
private void signOut() { // Firebase sign out mAuth.signOut(); // When a user signs out, clear the current user credential state from all credential providers. ClearCredentialStateRequest clearRequest = new ClearCredentialStateRequest(); credentialManager.clearCredentialStateAsync( clearRequest, new CancellationSignal(), Executors.newSingleThreadExecutor(), new CredentialManagerCallback<>() { @Override public void onResult(@NonNull Void result) { updateUI(null); } @Override public void onError(@NonNull ClearCredentialException e) { Log.e(TAG, "Couldn't clear user credentials: " + e.getLocalizedMessage()); } }); }