S'authentifier dans Unity à l'aide des services de jeux Google Play

Vous pouvez utiliser les services de jeux Google Play pour connecter les joueurs à un jeu Android basé sur Firebase et Unity. Pour utiliser la connexion aux services de jeux Google Play avec Firebase, connectez d'abord le joueur avec Google Play Jeux, puis demandez un code d'autorisation OAuth 2.0. Ensuite, transmettez le code d'autorisation à PlayGamesAuthProvider pour générer un identifiant Firebase, que vous pourrez utiliser pour vous authentifier auprès de Firebase.

Avant de commencer

Configurer votre projet Unity

  1. Ajoutez le fichier de configuration Firebase et le SDK Firebase Unity à votre projet Unity, comme décrit dans Ajouter Firebase à votre projet Unity. Suivez les instructions pour Android.

    Veillez à importer FirebaseAuth.unitypackage.

  2. Dans l'éditeur Unity, sous Build Settings > Player Settings > Other Settings (Paramètres de compilation > Paramètres du lecteur > Autres paramètres), définissez le nom du package Android de votre jeu.

  3. Ensuite, sous Build Settings > Player Settings > Publishing Settings (Paramètres de compilation > Paramètres du lecteur > Paramètres de publication), sélectionnez ou créez un keystore et une clé qui seront utilisés pour signer votre package Android. Votre APK doit être signé pour que la connexion à Play Jeux fonctionne. Cette exigence s'applique non seulement à la publication, mais aussi au développement de votre jeu.

Configurer votre projet Firebase

  1. Dans la console Firebase, accédez au projet Firebase dans lequel vous avez enregistré votre projet Unity.

  2. Spécifiez l'empreinte SHA-1 de votre jeu.

    1. Dans la consoleFirebase, accédez à l'onglet Général > Paramètres.

    2. Faites défiler la page jusqu'à la fiche Vos applications, sélectionnez votre application Android, puis ajoutez votre empreinte SHA-1 dans le champ Empreintes de certificat SHA.

    Vous pouvez obtenir l'empreinte SHA-1 de votre clé avec la commande keytool :

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    Vous pouvez également obtenir le hachage SHA de votre certificat de signature avec la commande Gradle signingReport :

    gradlew signingReport

    Pour savoir comment obtenir l'empreinte SHA de votre application, consultez Authentifier votre client.

    Votre APK doit être signé avec cette clé, y compris pendant le développement.

  3. Activez Google Play Games en tant que fournisseur de connexion :

    1. Dans la console Firebase, accédez à Sécurité > Authentification.

    2. Générez et obtenez l'ID client et le code secret client du serveur Web de votre projet :

      1. Dans l'onglet Mode de connexion, activez le fournisseur de connexion Google.

      2. Copiez l'ID client et le code secret du serveur Web à partir du fournisseur de connexion Google.

    3. Dans l'onglet Méthode de connexion, activez le fournisseur de connexion Play Games, puis spécifiez l'ID client et le code secret du client du serveur Web de votre projet, que vous avez obtenus à la dernière étape.

Configurez Play Games services avec les informations de votre application Firebase.

  1. Dans la console Google Play, ouvrez votre application Google Play ou créez-en une.

  2. Dans la section Croissance, cliquez sur Play Games services > Configuration et gestion > Configuration.

  3. Cliquez sur Oui, mon jeu utilise déjà des API Google, sélectionnez votre projet Firebase dans la liste, puis cliquez sur Utiliser.

  4. Sur la page de configuration Play Games services, cliquez sur Ajouter un identifiant.

    1. Sélectionnez le type Serveur de jeu.
    2. Dans le champ Client OAuth, sélectionnez l'ID client Web de votre projet. Assurez-vous qu'il s'agit du même ID client que celui que vous avez spécifié lorsque vous avez activé la connexion Play Games.
    3. Enregistrez les modifications.
  5. Toujours sur la page de configuration Play Games services, cliquez à nouveau sur Ajouter des identifiants.

    1. Sélectionnez le type Android.
    2. Dans le champ Client OAuth, sélectionnez l'ID client Android de votre projet. (Si votre ID client Android ne s'affiche pas, assurez-vous d'avoir défini l'empreinte SHA-1 de votre jeu dans la console Firebase.)
    3. Enregistrez les modifications.
  6. Sur les pages Événements, Succès et Classements, créez les ressources Play Games que vous souhaitez utiliser avec votre jeu (si vous ne souhaitez pas en utiliser immédiatement, vous pouvez créer une entrée de remplacement). Ensuite, sur l'une des pages Événements, Succès ou Classements, cliquez sur Obtenir des ressources et copiez l'extrait de ressources Android à un emplacement pratique. Vous aurez besoin de l'extrait pour configurer le plug-in Google Play Games services.

    Voici à quoi ressemble l'extrait de ressources :

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. Sur la page Testeurs, ajoutez les adresses e-mail des utilisateurs qui doivent pouvoir se connecter à votre jeu avant sa publication sur Play Store.

Intégrer la connexion à Play Jeux dans votre jeu

  1. Téléchargez la dernière version du plug-in Play Jeux pour Unity et extrayez-la.

  2. Importez le package Unity du plug-in dans votre projet Unity. Vous trouverez le package Unity dans le répertoire current-build de l'archive de version.

  3. Configurez le plug-in Play Jeux :

    1. Cliquez sur Window > Google Play Games > Setup > Android Setup (Fenêtre > Google Play Jeux > Configuration > Configuration Android) pour ouvrir l'écran Android Configuration (Configuration Android).
    2. Collez l'extrait de ressources Android que vous avez obtenu depuis la Play Console dans le champ Définition des ressources.
    3. Collez l'ID client de votre serveur Web, que vous avez fourni lorsque vous avez activé la connexion à Play Jeux dans la console Firebase, dans le champ ID client.
    4. Cliquez sur Configurer.
  4. Dans votre jeu, configurez un client Play Jeux avec le paramètre RequestServerAuthCode activé :

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. Ensuite, lorsqu'un joueur choisit de se connecter avec Play Jeux, appelez Social.localUser.Authenticate() :

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

S'authentifier avec Firebase

Une fois que vous avez ajouté la connexion Play Jeux à votre jeu, vous pouvez utiliser le code d'autorisation des services Play Jeux pour vous authentifier auprès de Firebase.

  1. Une fois que le joueur s'est connecté à l'aide de Play Jeux, dans le gestionnaire de poursuite de la connexion, obtenez un code d'authentification pour le compte du joueur :

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. Échangez ensuite le code d'autorisation des services de jeux Play contre un identifiant Firebase, puis utilisez cet identifiant pour authentifier le joueur :

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

Étapes suivantes

Lorsqu'un utilisateur se connecte pour la première fois, un compte utilisateur est créé et associé à son ID Play Jeux. Ce nouveau compte est stocké dans votre projet Firebase et peut être utilisé pour identifier un utilisateur dans toutes les applications de votre projet.

Dans votre jeu, vous pouvez obtenir l'UID Firebase de l'utilisateur à partir de l'objet Firebase.Auth.FirebaseUser :

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  string playerName = user.DisplayName;

  // 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.

Pour obtenir les informations d'un joueur Play Jeux ou accéder aux services Play Jeux, utilisez les API fournies par le plug-in Play Jeux.

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

auth.SignOut();