S'authentifier avec Google Sign-In et Unity

Vous pouvez permettre à vos utilisateurs de s'authentifier auprès de Firebase à l'aide de leur compte Google en intégrant Google Sign-In à votre application.

Avant de commencer

Configurer votre projet Unity

Avant de pouvoir utiliser Firebase Authentication, vous devez :

  • Enregistrez votre projet Unity et configurez-le pour utiliser Firebase.

    • Si votre projet Unity utilise déjà Firebase, il est déjà enregistré et configuré pour Firebase.

    • Si vous n'avez pas de projet Unity, vous pouvez télécharger un exemple d'application.

  • Ajoutez le SDK Firebase Unity (plus précisément, FirebaseAuth.unitypackage) à votre projet Unity.

Notez que l'ajout de Firebase à votre projet Unity implique des tâches à la fois dans la console Firebase et dans votre projet Unity ouvert (par exemple, vous téléchargez des fichiers de configuration Firebase depuis la console, puis vous les déplacez dans votre projet Unity).

Configurer votre projet Firebase et vos identifiants

  1. Android : spécifiez l'empreinte SHA-1 de votre application dans la console Firebase :

    1. Dans la console Firebase, accédez à Paramètres > onglet Général.
    2. Accédez à la fiche Vos applications, sélectionnez votre application Android, puis ajoutez votre empreinte SHA-1 dans le champ Empreintes de certificat SHA.

      Vous pouvez récupérer l'empreinte SHA-1 de votre keystore à l'aide de keytool :

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

      Pour en savoir plus sur l'obtention de l'empreinte SHA de votre application, consultez Authentifier votre client.

  2. Activez Google Sign-In et copiez votre ID client Web :

    1. Dans la console Firebase, accédez à Sécurité > Authentification.
    2. Dans l'onglet Mode de connexion, activez le fournisseur de connexion Google.
    3. Développez la section Configuration du SDK Web et copiez votre ID client Web (par exemple, 123456-abc.apps.googleusercontent.com). Il représente la revendication d'audience (aud) de vos jetons d'ID et est requis pour Android et iOS.
    4. Cliquez sur Enregistrer.
  3. Mettez à jour vos fichiers de configuration Firebase et copiez votre ID client inversé iOS :

    1. Téléchargez les derniers fichiers de configuration Firebase depuis la console Firebase (google-services.json pour Android et GoogleService-Info.plist pour iOS), puis remplacez les anciennes copies dans votre projet Unity. (Consultez Ajouter Firebase à votre projet Unity.)
    2. iOS : ouvrez votre fichier GoogleService-Info.plist et copiez la valeur de la clé REVERSED_CLIENT_ID (par exemple, com.googleusercontent.apps.12345-abc). Cette valeur est requise pour configurer le schéma d'URL de redirection iOS.

Intégrer le plug-in Google Sign-In à votre projet Unity

  1. Importez le plug-in :

    1. Si vous intégrez le plug-in à un projet existant, sauvegardez votre projet et supprimez les anciens plug-ins Google Sign-In avant de continuer.
    2. Téléchargez GoogleSignInNative.unitypackage depuis GitHub et importez-le dans votre projet Unity (Assets > Import Package > Custom Package). Vérifiez que tous les fichiers sont sélectionnés, puis cliquez sur Importer.
  2. Configurez les paramètres du plug-in :

    1. Dans l'éditeur Unity, accédez à Window > Google Sign-In Native > Settings (Fenêtre > Connexion Google native > Paramètres).
    2. Collez votre ID client Web dans le premier champ.
    3. Collez votre ID client inversé iOS dans le deuxième champ.
    4. Cliquez sur Save Settings (Enregistrer les paramètres).
  3. Résoudre les dépendances natives :

    1. Accédez à Assets > External Dependency Manager > Android Resolver > Force Resolve (Éléments > Gestionnaire de dépendances externes > Résolution forcée).
    2. Attendez le message de réussite. Cette opération télécharge les bibliothèques Credential Manager natives googleid et androidx.

Accéder à la classe Firebase.Auth.FirebaseAuth

La classe FirebaseAuth est la passerelle pour tous les appels d'API. Il est accessible via FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

S'authentifier avec Firebase

  1. Configurez GoogleSignInManager dans votre scène :

    1. Créez un GameObject vide dans votre scène initiale nommée GoogleSignInManager.
    2. Associez-lui le script GoogleSignInManager.cs.
    3. Faites glisser l'élément GoogleSignInNativeSettings (situé dans Assets/GoogleSignInNative/Resources) vers l'emplacement Sign In Settings (Paramètres de connexion) du script.
  2. Déclenchez Google Sign-In et échangez le jeton d'ID contre un identifiant Firebase :

    Créez un script de contrôleur qui s'abonne à GoogleSignInManager.OnSignInCompleted et GoogleSignInManager.OnSignInFailed, déclenche la connexion avec GoogleSignInManager.Instance.StartSignIn() et échange le jeton d'ID Google obtenu contre un identifiant Firebase à l'aide de 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}");
        }
    }
    

Créer votre application

Android

  • Assurez-vous que le nom du package dans Player Settings (Paramètres du lecteur) correspond exactement à vos identifiants OAuth Firebase et Google Cloud.
  • Assurez-vous que le niveau d'API minimal est défini sur 34 ou plus.
  • Cliquez sur Build and Run (Compiler et exécuter).

iOS

  • Créez votre projet dans Unity pour générer un projet Xcode, puis ouvrez le fichier .xcworkspace généré.
  • Dans Xcode, accédez à l'onglet Signing & Capabilities (Signature et fonctionnalités), puis sélectionnez votre Development Team (équipe de développement).
  • Le plug-in ajoute automatiquement le schéma d'URL personnalisé (REVERSED_CLIENT_ID) à votre projet Xcode. Créez et exécutez l'application sur un appareil physique.

Étapes suivantes

Lorsqu'un utilisateur se connecte pour la première fois, un compte utilisateur est créé et associé aux identifiants (nom d'utilisateur et mot de passe, numéro de téléphone ou informations du fournisseur d'authentification) avec lesquels il s'est connecté. Ce nouveau compte est stocké dans votre projet Firebase et peut être utilisé pour identifier un utilisateur dans toutes les applications de votre projet, quelle que soit la manière dont il se connecte.

  • Dans vos applications, vous pouvez obtenir les informations de base du profil de l'utilisateur à partir de l'objet 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;
    }
  • Dans vos règles de sécurité Firebase Realtime Database et Cloud Storage, vous pouvez obtenir l'ID utilisateur unique de l'utilisateur connecté à partir de la variable auth et l'utiliser pour contrôler les données auxquelles un utilisateur peut accéder.

Vous pouvez autoriser les utilisateurs à se connecter à votre application à l'aide de plusieurs fournisseurs d'authentification en associant les identifiants du fournisseur d'authentification à un compte utilisateur existant.

Pour déconnecter un utilisateur, appelez SignOut() :

auth.SignOut();