Utiliser l’authentification Google dans un projet Unity

Utiliser l’authentification Google dans un projet Unity

Pour mon premier article dans la catégorie Unity, j’ai choisi la première difficulté que j’ai rencontré : connecter mon projet aux services de jeux de Google.

Précisions

Avant de commencer, je tiens à préciser qu’il est obligatoire de posséder un compte développeur chez Google.

La procédure n’est pas très complexe, mais n’est pas gratuite (il vous en coutera 25$ de droits d’entrée, après quoi vous pourrez publier autant d’applications que vous le souhaiterez). Cela étant précisé, je tiens à souligner que je ne m’attarderai pas davantage sur le sujet. Je pars du principe qu’ensuite, vous disposerez bien d’un compte développeur chez Google.

Initialiser le projet

Pour cet article, je partirai d’un projet vierge contenant juste une scène possédant une caméra et une lumière directionnelle.

Téléchargement et importation du plugin

Pour commencer, on va aller chercher le plugin pour connecter les services Google à un projet Unity sur le site dédié de Google pour les développeurs : https://developers.google.com/unity

Maintenant choisissez le plugin Play Games Unity plugin (chez moi, en haut à gauche)

Vous accéderez au site Github sur lequel ce plugin est publié. Téléchargez le dossier et décompressez-le. Ensuite retournez dans l’éditeur Unity et importez ce plugin en allant dans le menu Assets > Import Package > Custom Package…

Ensuite naviguez jusqu’au dossier que vous avez décompressé puis allez dans le sous-dossier current-build. Choisissez le seul fichier unitypackage que contient ce dossier (chez moi, il s’appelle GooglePlayGamesPlugin-0.9.64.unitypackage).

L’analyse du plugin va prendre quelques instants. Ensuite, le contenu du plugin va vous être affiché.

Cliquez sur Import pour importer le plugin dans votre projet.

Création de l’application dans la console développeurs de Google

Une fois cette étape terminée, connectez-vous à la console développeurs de Google disponible ici : https://play.google.com/apps/publish/?hl=fr

Vous arriverez à la liste de vos applications. Pour cet article, nous allons créer une nouvelle application en cliquant sur le bouton Créer une application :

Ensuite, renseignez la langue et le titre de l’application dans le formulaire affiché puis validez :

L’écran suivant vous demandera une description brève et une description complète. Dans la mesure où mon application est destinée à tester la connexion aux services de Google, je ne vais pas m’attarder davantage sur ce formulaire. Toutefois, si vous souhaitez publier votre application, il sera préférable d’y passer davantage de temps.

Compiler son projet pour Google

L’étape suivante nécessite de retourner dans l’éditeur Unity pour préparer notre premier APK qu’il faudra ensuite téléverser dans la console de Google. Mais avant, il faut expliquer à Unity que nous ciblons les plateformes Android. Pour ce faire, allez dans le menu File > Build Settings…

Dans la fenêtre qui s’ouvre, choisissez Android dans la liste des plateformes puis cliquez sur le bouton Switch Platform en bas à droite de la fenêtre.

Encore une fois, c’est une procédure qui va demander quelques minutes alors soyez patients. Au cours de cette procédure, quelques boites de dialogues risquent de s’ouvrir dont une pour prévenir un conflit dans les dépendances du plugin qu’on a installé. Activez cette option.

Une fois le changement de plateforme opéré, le bouton Switch Platform est renommé en Build. Cliquez dessus pour compiler notre APK. Quand l’APK sera généré, l’avertissement suivant va s’afficher :

C’est tout à fait normal, nous réglerons ça plus tard.

Créer notre clé de signature

Avant de continuer dans la console Google Développeurs, il nous faut créer la clé (et si nécessaire le magasin de clé qui va avec). Pour ce faire, on va aller dans Edit > Project Settings…

Dans les Project Settings, allez dans Other Settings pour récupérer ou modifier le nom du paquet de votre application :

Par défaut, le paquet est composé de com suivi par le nom de votre compagnie suivie par le nom de votre application, le tout séparé par des points. Notez le dans un coin de votre tête, vous en aurez besoin tout à l’heure.

Ensuite, toujours dans les Project Settings, allez dans Publishing Settings puis cliquez sur Keystore Manager :

Le Keystore Manager permet de gérer son magasin de clé de signature. Vous pouvez soit utiliser un magasin existant (si vous en avez un) soit en créer un nouveau. C’est ce que nous allons faire. Cliquez sur Keystore… > Create New > In Dedicated Location…

Choisissez l’endroit où sera créé le keystore. Une fois enregistré, retournez sur le formulaire pour le remplir :

Tout d’abord, définissez le mot de passe du magasin de clé dans Password et confirmez-le dans Confirm password. Ensuite, on va ajouter une clé à ce magasin dans la seconde partie du formulaire. Dans Alias, on va donner un nom à la clé. Dans Password et Confirm password on va donner un mot de passe pour protéger la nouvelle clé (ce n’est pas obligatoire mais je vous encourage à ne pas utiliser le même mot de passe que pour le magasin de clé). Validity (years) correspond à la durée de validité de la clé en années. Le bas du formulaire vous sera familier si vous avez déjà généré un certificat. Ce n’est pas indispensable mais je vous recommande de le renseigner si vous comptez publier votre application. Quand c’est fini, cliquez sur Add Key.

Unity vous propose de paramétrer notre application avec la nouvelle clé qu’on vient de créer. Pour se faciliter la vie, je vous recommande de le faire. Ensuite vous pouvez sortir des Project Settings.

Retourner dans File > Build Settings et recompilez votre APK. Comme tout à l’heure, vous aurez encore l’avertissement concernant les services google play, mais nous nous en occuperons plus tard.

Téléverser son APK et la clé correspondante dans la console développeurs Google

Revenez dans votre navigateur et dans la console Google > Version de l’application. Il y a plusieurs sortes de publication de son APK. Encore une fois, puisque ce n’est qu’un test, je vais choisir de téléverser une version Alpha. Descendez jusqu’à la version Alpha et cliquez sur Gérer :

Puis dans la page qui s’ouvre, cliquez sur Créer une version :

Téléverser votre clé de signature

Ca ouvre un nouveau formulaire découpé en plusieurs parties. Allons-y tranquillement :

Commençons. Ici, Google se propose de générer puis de sauvegarder la clé qui signera l’application. Avant de cliquer sur Continuer, il nous faut générer notre clé. Pour cela, allez dans (Options avancées) Fournir la clé de signature d’applications utilisée par Google Play pour cette application.

Tout d’abord, commencez par télécharger l’outil pepk. Ensuite ouvrez une invite de commande et placez-vous dans le dossier contenant le fichier pepk.jar téléchargé juste avant. Lancez la ligne de commande ci-après, en pensant à l’adapter en fonction de votre situation (keystore : chemin vers votre magasin de clé ; aliaskey : nom de la clé paramétrée dans Unity ; zip : nom du fichier certificat avec l’extension .zip), dans la console pour générer votre certificat de signature :

java -jar pepk.jar –keystore=keystore –alias=aliaskey –output=zip –encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a –include-cert

Il vous sera demandé le mot de passe de votre magasin de clé puis ensuite le mot de passe de votre clé de signature

Cette commande crée un fichier zip contenant un certificat et la clé de signature chiffrée.

Revenez ensuite dans la console Google et cliquez sur FICHIER ZIP DE LA CLÉ DE SIGNATURE D’APPLICATIONS ET DU CERTIFICAT pour téléverser le fichier zip de signature nouvellement créé puis cliquez sur CONTINUER.

Téléverser l’APK

Cliquez sur PARCOURIR LES FICHIERS et allez rechercher votre APK.

Attention, il faut impérativement que le fichier APK soit généré avec la même clé que celle que vous avez importé dans la console Google à l’étape précédente, sinon vous aurez une erreur !

Une fois le téléversement terminé, descendez tout en bas et cliquez sur Enregistrer.

Connecter les services de jeu de Google

Notre but, tout au long de cet article, a été de connecter notre application aux services de jeu de Google. Revenez sur la liste de toutes vos applications dans la console de Google et cliquez sur Services de jeux dans le menu latéral gauche pour accéder à la liste des applications liées à vos services :

Cliquez sur AJOUTER UN JEU :

Précisez le titre de votre jeu, sélectionnez une catégorie, et cliquez sur CONTINUER.

A noter au passage que le nom de votre jeu doit impérativement être unique, ce qui n’est pas toujours évident à trouver.

Pour cet article, j’ai nommé mon application TutoGPSGenie23 et je l’ai mis en catégorie Grand public.

Descendez en bas de la page et cliquez sur le lien vers la console API de Google.

Vérifications dans la console API de Google

La console API est accessible à l’adresse suivante : https://console.developers.google.com. Normalement, nous n’aurons rien à y faire mais il faut vérifier deux trois petites choses pour la suite.

Tout en haut à gauche, vérifiez bien le projet sur lequel vous êtes (dans le cas où vous en auriez plusieurs). Ensuite, allez dans le menu latéral gauche et cliquez sur Bibliothèque pour accéder à la liste des API disponibles. Dans le champ de recherche de la liste d’API, recherchez les API dont le nom contient Game :

Les deux API (qui devraient déjà être activées) qui nous intéressent sont Google Play Game Services et Google Play Game Management. Cliquez sur la première dans la liste et vérifiez qu’elle est bien activée :

Ensuite revenez à votre recherche en cliquant sur la flèche en haut à gauche et cliquez sur l’API Google Play Game Management pour vérifier qu’elle est aussi activée :

C’est tout pour les API, alors revenez au tableau de bord puis, dans le menu latéral gauche cliquez sur Identifiants pour accéder aux identifiants de votre application :

Dans mon cas, je n’ai aucun identifiant créé, donc il va falloir que je le fasse. Si vous êtes comme moi, cliquez sur Créer des identifiants. Notre objectif, disposer d’un identifiant OAuth2 dont l’empreinte sera celle de notre certificat.

Si vous avez déjà un identifiant OAuth2 dans votre projet, passez à la partie suivante où je vous expliquerai comment vérifier votre empreinte SHA1.

Créer un identifiant OAuth2 de zéro

Une étape est nécessaire avant de créer notre identifiant. Il faut définir le nom de l’application dans la console API. Pour cela, allez dans le menu latéral gauche et cliquez sur Écran d’autorisation OAuth :

Ensuite descendez en bas de la page et cliquez sur Enregistrer à gauche.

Une fois enregistré, revenons dans l’écran Identifiants et passons à la création d’un identifiant :

Pour connecter notre utilisateur à son compte Google, nous allons créer un identifiant OAuth2 :

Sélectionnez la plateforme cible (dans mon cas Android) pour accéder à la suite du formulaire.

Récupérer l’empreinte SHA1 de sa clé de signature

Ensuite, il faut récupérer l’empreinte SHA1 de la clé de signature de l’application. Pour ce faire, il faut utiliser l’outil keytool fourni avec Java.

Si le chemin d’accès de votre installation de Java n’est pas dans votre variable d’environnement PATH, vous risquez d’avoir un peu plus de mal pour la suite. Toutefois ce n’est pas un prérequis indispensable.

Si votre dossier d’installation de Java n’est pas dans le PATH, alors ouvrez une invite de commande dans le dossier bin de votre installation de Java. Sinon ouvrez une console dans le répertoire contenant votre keystore, ca allègera grandement la ligne de commande qui suit.

Maintenant nous allons extraire l’empreinte SHA1 des clés de notre magasin de clés.

Dans l’invite de commande ouverte, lancez la commande suivante , en pensant à l’adapter en fonction de votre situation (keystore : nom, si vous êtes dans le répertoire de votre keystore, ou chemin vers votre magasin de clé) :

keytool -exportcert -keystore keystore -list -v

Après avoir renseigné le mot de passe de votre magasin de clés, cette commande produira la sortie suivante :

Elle produit les empreintes MD5, SHA1 (marquée par la flèche rouge) et SHA256 de chaque clé du magasin entre autres informations. C’est cette empreinte SHA1 qu’il faut renseigner dans la console API.

Il faut également fournir le nom du package de votre application, que nous avons récupéré un peu plus tôt. Enfin cliquez sur Créer pour finir de créer votre identifiant.

Vérifier son identifiant OAuth2

Vous êtes arrivés ici soit après avoir lu la partie précédente, auquel cas votre identifiant devrait être correctement configuré, soit parce qu’il a été créé automatiquement par Google auquel cas il faut quand même le vérifier.

Comme vous pouvez le voir, j’ai un identifiant créé. Cliquez sur le nom de cet identifiant pour ouvrir les détails :

Vérifiez que l’empreinte SHA1 de votre identifiant correspond à l’empreinte SHA1 de votre clé que nous avons récupéré dans la partie précédente. Si c’est le cas, vous n’avez rien à faire. Sinon, corrigez l’empreinte et enregistrez vos modifications.

Récupérer la définition des ressources de l’application (XML)

Maintenant retournez dans la console Développeurs de Google, puis dans le menu latéral gauche allez dans Services de jeux et enfin dans votre application. Dans le menu latéral gauche, allez sur Réussites :

Cliquez sur AJOUTER UNE REUSSITE :

Le nom et les autres informations n’ont pas une grande importance, il faut juste définir une réussite pour continuer. Ne me demandez pas pourquoi… Puis cliquez sur ENREGISTRER pour revenir à l’écran précédent :

Maintenant, cliquez sur Récupérer les ressources, et gardez le contenu affiché dans un coin, nous en aurons besoin juste après :

Connecter les services de Google à notre application

Tout ceci fait, maintenant il va falloir connecter nos services à notre application. Pour cela, retournez dans Unity.

Mise en place de l’interface

Il est temps de mettre en place l’interface que nous allons utiliser. Elle va être très simple, et va se composer d’un bouton (qui servira à se connecter ou à se déconnecter) et d’un texte qui affichera le nom du compte google avec lequel nous allons nous connecter.

Pour commencer, on va créer un bouton. Allez dans GameObject > UI Button :

Ca va nous créer 3 éléments. Un canvas, dans lequel nous aurons notre bouton, et un objet EventSystem :

Sélectionnez notre canvas, nous allons changer son render mode pour sélectionner Screen Space Camera :

L’intérêt, ca va être de fixer le canvas à la caméra. Pour cela, attrapez la caméra dans la hiérarchie de votre projet et déposez-la dans la propriété Render Camera :

Maintenant nous allons ajouter le texte qui affichera notre pseudo Google. Pour cela allez dans GameObject > UI > Text :

Je vous laisse faire un peu de mise en forme comme grossir le bouton et le texte (c’est ce que j’ai fait), et on va passer à la suite.

Configuration des services Google Play

Maintenant nous pouvons finir de configurer les API Google dans notre projet en allant dans Window > Google Play Games > Setup > Android setup… :

Collez les ressources de votre application au format XML que nous avons récupéré plus tôt puis cliquez sur Setup :

Ajout d’un comportement au bouton

Ca va être très rapide. Je veux juste que le bouton affiche « Se connecter » si on n’est pas déjà connecté et « Se déconnecter » sinon. Pour cela on va ajouter un script C# à notre projet en allant dans Assets > Create > C# Script :

et on va l’assigner à notre bouton :

Voici ce que va contenir notre script :

using UnityEngine;
using UnityEngine.UI;

public class ButtonBehaviour : MonoBehaviour
{
    private Text textButton;

    private void Start()
    {
        textButton = gameObject.GetComponentInChildren<Text>();
    }

    void Update()
    {
        textButton.text = (Social.localUser.authenticated ? "Se déconnecter" : "Se connecter");
    }
}

Ce script est très basique. On définit une propriété privée pour récupérer l’enfant de type Text du bouton (c’est ce qu’on fait dans la méthode Start). Ensuite, si on est connecté (Social.localUser.authenticated == true), le texte est modifié en « Se déconnecter », sinon (Social.localUser.authenticated == false) le texte est modifié en « Se connecter » (c’est le contenu de la méthode Update).

Création d’un gestionnaire de connexion

Il va falloir à nouveau écrire quelques lignes de codes. Commencez par créer un nouvel empty dans notre scène en allant dans Game Object > Create Empty. Il contiendra notre manager de connexion Google :

Puis créez un nouveau script GooglePlayService Manager comme nous l’avons vu tout à l’heure :

Ensuite assignez notre nouveau script à notre empty, là encore comme nous l’avons fait précédement :

Voici le contenu de notre script GooglePlayService Manager :

using UnityEngine;
using UnityEngine.UI;
using GooglePlayGames;
using GooglePlayGames.BasicApi;

public class GooglePlayServiceManager : MonoBehaviour
{
    public Button toogleButton;
    public Text text;

    void Start()
    {
        PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
            .Build();
        PlayGamesPlatform.InitializeInstance(config);
        PlayGamesPlatform.Activate();
    }

    public void ToogleSign()
    {
        if(Social.localUser.authenticated)
        {
            PlayGamesPlatform.Instance.SignOut();
            text.text = "Vous êtes déconnectés...";
        }
        else
        {
            Social.localUser.Authenticate(success =>
            {
                if (success)
                {
                    text.text = "Vous êtes connectés... " + Social.localUser.userName;
                }
                else
                {
                    text.text = "Erreur de connexion";
                }
            });
        }
    }
}

Il faut encore associer nos éléments de l’interface à ce script. Pour cela, glissez-déposez le bouton et l’élément texte dans les deux paramètres du script :

Associer notre bouton à notre fonction ToogleSign

D’abord sélectionnez notre bouton puis repérez dans l’inspector la propriété onclick :

Cliquez sur + puis faites glisser notre empty de la hiérarchie dans le champ Object :

Enfin sélectionnez la fonction qui devra être exécutée au clic sur le bouton. Ce sera notre fonction ToogleSign :

Et maintenant ?

Maintenant, ca devrait être terminé, nous allons pouvoir tester. Ce fut long, mais ca vallait le coup. Il est temps, soit de brancher votre téléphone à votre ordinateur, soit de lancer votre émulateur favori. Pour ma part, j’ai découvert récemment un émulateur android, BlueStack (site officiel : https://www.bluestacks.com/fr/index.html), et j’en suis devenu fan.

Dans tous les cas, quand vous serez prêts, allez dans File > Build and Run et patientez le temps que ca compile, que ca s’installe sur votre terminal et que ca se lance :

Et voilà 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.