Esegui l'autenticazione utilizzando Accedi con Google e Unity

Puoi consentire ai tuoi utenti di autenticarsi con Firebase utilizzando i loro Account Google integrando Accedi con Google nella tua app.

Prima di iniziare

Configura il progetto Unity

Per poter usare Firebase Authentication, devi:

  • Registra il tuo progetto Unity e configuralo in modo che utilizzi Firebase.

    • Se il tuo progetto Unity utilizza già Firebase, è già registrato e configurato per Firebase.

    • Se non hai un progetto Unity, puoi scaricare un'app di esempio.

  • Aggiungi l'SDK Firebase Unity (nello specifico, FirebaseAuth.unitypackage) al tuo progetto Unity.

Tieni presente che l'aggiunta di Firebase al tuo progetto Unity prevede attività sia nella console Firebase sia nel progetto Unity aperto (ad esempio, scarichi i file di configurazione di Firebase dalla console e poi li sposti nel progetto Unity).

Configura il progetto Firebase e le credenziali

  1. Android: specifica l'impronta SHA-1 della tua app nella console Firebase:

    1. Nella console Firebase, vai a Impostazioni > scheda Generali.
    2. Vai alla scheda Le tue app, seleziona la tua app per Android e aggiungi la fingerprint SHA-1 nel campo Fingerprint del certificato SHA.

      Puoi recuperare l'impronta SHA-1 del tuo keystore utilizzando keytool:

      keytool -keystore path-to-keystore.keystore -list -v
      

      Per maggiori dettagli su come ottenere l'impronta SHA della tua app, consulta Autenticazione del client.

  2. Attiva Accedi con Google e copia l'ID client web:

    1. Nella console Firebase, vai a Sicurezza > Autenticazione.
    2. Nella scheda Metodo di accesso, attiva il provider di accesso Google.
    3. Espandi la sezione Configurazione SDK web e copia l'ID client web (ad esempio 123456-abc.apps.googleusercontent.com). Rappresenta la richiesta di pubblico (aud) dei token ID ed è obbligatoria sia per Android che per iOS.
    4. Fai clic su Salva.
  3. Aggiorna i file di configurazione di Firebase e copia l'ID client invertito di iOS:

    1. Scarica i file di configurazione di Firebase più recenti dalla console Firebase (google-services.json per Android e GoogleService-Info.plist per iOS) e sostituisci le copie precedenti nel tuo progetto Unity. (Consulta Aggiungi Firebase al tuo progetto Unity.)
    2. iOS: apri il file GoogleService-Info.plist e copia il valore della chiave REVERSED_CLIENT_ID (ad esempio, com.googleusercontent.apps.12345-abc). Questo valore è necessario per configurare lo schema URL di reindirizzamento iOS.

Integra il plug-in Accedi con Google nel tuo progetto Unity

  1. Importa il plug-in:

    1. Se stai eseguendo l'integrazione in un progetto esistente, esegui il backup del progetto e rimuovi eventuali plug-in Accedi con Google precedenti prima di procedere.
    2. Scarica GoogleSignInNative.unitypackage da GitHub e importalo nel tuo progetto Unity (Assets > Import Package > Custom Package). Assicurati che tutti i file siano selezionati e fai clic su Importa.
  2. Configura le impostazioni del plug-in:

    1. Nell'editor di Unity, vai a Window > Accedi con Google Native > Settings.
    2. Incolla l'ID client web nel primo campo.
    3. Incolla l'ID client iOS invertito nel secondo campo.
    4. Fai clic su Save Settings (Salva impostazioni).
  3. Risolvi le dipendenze native:

    1. Vai ad Assets > External Dependency Manager > Android Resolver > Force Resolve.
    2. Attendi il messaggio di conferma. In questo modo vengono scaricate le librerie native di googleid e androidx Gestore delle credenziali.

Accedi al corso Firebase.Auth.FirebaseAuth

La classe FirebaseAuth è il gateway per tutte le chiamate API. È accessibile tramite FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Autenticati con Firebase

  1. Configura GoogleSignInManager nella scena:

    1. Crea un GameObject vuoto nella scena iniziale denominato GoogleSignInManager.
    2. Collega lo script GoogleSignInManager.cs.
    3. Trascina l'asset GoogleSignInNativeSettings (che si trova in Assets/GoogleSignInNative/Resources) nello slot Sign In Settings (Impostazioni di accesso) dello script.
  2. Attiva Accedi con Google e scambia il token ID con una credenziale Firebase:

    Crea uno script del controller che si iscriva a GoogleSignInManager.OnSignInCompleted e GoogleSignInManager.OnSignInFailed, attivi l'accesso con GoogleSignInManager.Instance.StartSignIn() e scambi il token ID Google risultante con una credenziale Firebase utilizzando GoogleAuthProvider.GetCredential:

    using Firebase.Auth;
    using Firebase.Extensions;
    using UnityEngine;
    
    public class MyAuthController : MonoBehaviour
    {
        private FirebaseAuth auth;
    
        private void Awake()
        {
            auth = FirebaseAuth.DefaultInstance;
        }
    
        private void OnEnable()
        {
            GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed += HandleSignInFailure;
        }
    
        private void OnDisable()
        {
            GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess;
            GoogleSignInManager.OnSignInFailed -= HandleSignInFailure;
        }
    
        public void OnSignInButtonClick()
        {
            GoogleSignInManager.Instance.StartSignIn();
        }
    
        private void HandleSignInSuccess(string idToken)
        {
            Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase...");
    
            Credential credential = GoogleAuthProvider.GetCredential(idToken, null);
            auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => {
                if (task.IsCanceled)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
                    return;
                }
                if (task.IsFaulted)
                {
                    Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
                    return;
                }
    
                AuthResult result = task.Result;
                Debug.LogFormat("User signed in successfully: {0} ({1})",
                    result.User.DisplayName, result.User.UserId);
            });
        }
    
        private void HandleSignInFailure(string error)
        {
            Debug.LogError($"[Auth] Google Sign-In failed: {error}");
        }
    }
    

Crea la tua app

Android

  • Assicurati che il nome del pacchetto in Impostazioni player corrisponda esattamente alle tue credenziali OAuth di Firebase e Google Cloud.
  • Assicurati che il livello API minimo sia impostato su 34 o su un valore superiore.
  • Fai clic su Build and Run (Crea ed esegui).

iOS

  • Crea il tuo progetto in Unity per generare un progetto Xcode, quindi apri il file .xcworkspace generato.
  • In Xcode, vai alla scheda Signing & Capabilities (Firma e funzionalità) e seleziona il tuo Development Team (Team di sviluppo).
  • Il plug-in aggiunge automaticamente lo schema URL personalizzato (REVERSED_CLIENT_ID) al tuo progetto Xcode. Crea ed esegui su un dispositivo fisico.

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 archiviato come parte del tuo progetto Firebase e può essere utilizzato per identificare un utente in ogni app del progetto, indipendentemente dalla modalità di accesso dell'utente.

  • Nelle tue app, puoi ottenere le informazioni di base del profilo dell'utente dall'oggetto Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • Nelle regole di sicurezza di Firebase Realtime Database e Cloud Storage, puoi ottenere 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.

Puoi consentire agli utenti di accedere alla tua app utilizzando più provider di autenticazione collegando le credenziali del provider di autenticazione a un account utente esistente.

Per disconnettere un utente, chiama SignOut():

auth.SignOut();