S'authentifier dans Firebase à l'aide d'un numéro de téléphone avec Unity

Vous pouvez utiliser Firebase Authentication pour connecter un utilisateur en lui envoyant un message SMS sur son téléphone. L'utilisateur se connecte à l'aide d'un code à usage unique contenu dans le SMS.

Ce document explique comment mettre en œuvre un processus de connexion par numéro de téléphone à l'aide de le SDK Firebase.

Avant de commencer

  1. Avant de pouvoir utiliser Firebase Authentication vous devez ajouter le SDK Unity Firebase (plus précisément, FirebaseAuth.unitypackage) à votre projet Unity.

    Vous trouverez des instructions détaillées sur ces étapes de configuration initiale dans Ajouter Firebase à Unity projet.

  2. Si vous n'avez pas encore associé votre application à votre projet Firebase, faites-le depuis la console Firebase.
  3. Découvrez les exigences liées aux plates-formes pour la connexion avec un numéro de téléphone :
    • La connexion via un numéro de téléphone est réservée aux plates-formes mobiles.
    • Sur iOS, la connexion par numéro de téléphone nécessite un appareil physique et ne fonctionne pas sur un simulateur.

Problèmes de sécurité

L'authentification par simple numéro de téléphone est moins sécurisée, même si elle est pratique. que les autres méthodes disponibles, car la possession d'un numéro de téléphone peuvent être facilement transférés d'un utilisateur à l'autre. De plus, sur les appareils dotés de plusieurs profil, tout utilisateur pouvant recevoir des SMS peut se connecter à un compte en utilisant le numéro de téléphone de l’appareil.

Si vous utilisez la connexion par numéro de téléphone dans votre application, vous devez l'offrir en plus de méthodes de connexion plus sécurisées et informer les utilisateurs des compromis de sécurité liés à l'utilisation de la connexion par numéro de téléphone.

Activer la connexion par numéro de téléphone pour votre projet Firebase

Pour connecter les utilisateurs par SMS, vous devez d'abord activer la connexion par numéro de téléphone pour votre projet Firebase:

  1. Dans la console Firebase, ouvrez la section Authentification.
  2. Sur la page Sign-in Method (Méthode de connexion), activez le Phone Number (Numéro de téléphone). méthode de connexion.

Recevoir des notifications APNs (iOS uniquement)

Pour que vous puissiez utiliser l'authentification par numéro de téléphone sur iOS, votre application doit pouvoir recevoir Notifications APNs de Firebase. Lorsque vous connectez un utilisateur avec son téléphone numéro de téléphone pour la première fois sur un appareil, Firebase Authentication envoie une notification push silencieuse à l'appareil pour vérifier que la demande de connexion via un numéro de téléphone depuis votre application. (C'est pourquoi vous ne pouvez pas vous connecter avec un numéro de téléphone simulateur.)

Pour activer les notifications APNs à utiliser avec Firebase Authentication:

  1. Dans Xcode, activer les notifications push pour votre projet.
  2. Importez votre certificat APNs dans Firebase. Si vous ne possédez pas encore de certificat APNs, veillez à en créer un dans le Apple Developer Member Center.

    1. Dans votre projet dans la console Firebase, sélectionnez le l'icône en forme de roue dentée, sélectionnez Paramètres du projet, puis sélectionnez le Onglet Cloud Messaging.

    2. Sélectionnez l'option Importer un certificat. pour votre certificat de développement, certificat de production, ou les deux. Veuillez en indiquer au moins une.

    3. Pour chaque certificat, sélectionnez le fichier .p12 et fournissez le mot de passe, le cas échéant. Assurez-vous que l'ID du bundle pour ce certificat correspond à l'ID de bundle de votre application. Sélectionner Enregistrer.

Envoyer un code de validation sur le téléphone de l'utilisateur

Pour lancer la connexion par numéro de téléphone, présentez à l'utilisateur une interface qui l'invite à fournir son numéro de téléphone, puis appelez PhoneAuthProvider.VerifyPhoneNumber pour demander à Firebase d'envoyer un code d'authentification au téléphone de l'utilisateur par SMS :

  1. Obtenez le numéro de téléphone de l'utilisateur.

    Les obligations légales varient, mais il est recommandé et de définir les attentes de vos utilisateurs, vous devez les informer que s'ils utilisent connexion par téléphone, il est possible qu'il reçoive un SMS de validation et s'appliquent.

  2. Appeler PhoneAuthProvider.VerifyPhoneNumber en lui transmettant une PhoneAuthOptions contenant le numéro de téléphone de l'utilisateur.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(
      new Firebase.Auth.PhoneAuthOptions {
        PhoneNumber = phoneNumber,
        TimeoutInMilliseconds = phoneAuthTimeoutMs,
        ForceResendingToken = null
      },
      verificationCompleted: (credential) => {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) => {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) => {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) => {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    Lorsque vous appelez PhoneAuthProvider.VerifyPhoneNumber, Firebase
    • (sur iOS), envoie une notification push silencieuse à votre application.
    • Firebase envoie un SMS contenant une clé d'authentification au numéro de téléphone spécifié et transmet un identifiant de validation à votre fonction d'achèvement. Vous aurez besoin du code de validation et l'ID de validation pour connecter l'utilisateur.
  3. Enregistrez l'ID de validation et restaurez-le lors du chargement de votre application. Ce faisant, vous pouvez vous assurer que vous disposez toujours d'un ID de validation valide si votre application est est interrompue avant que l'utilisateur ne termine le processus de connexion (par exemple, en passant à l'application SMS).

    Vous pouvez conserver l'ID de validation de n'importe quelle manière. Un moyen simple consiste à enregistrez l'ID de validation avec UnityEngine.PlayerPrefs.

Si le rappel transmis à codeSent est appelé, vous pouvez inviter l'utilisateur à saisir le code de validation lorsqu'il le reçoit dans le message SMS.

En revanche, si le rappel pour verificationCompleted est est appelé, la vérification automatique a réussi et vous disposez PhoneAuthCredential que vous pouvez utiliser comme décrit ci-dessous.

Connecter l'utilisateur avec le code de validation

Une fois que l'utilisateur a fourni le code de validation envoyé par SMS à votre application connectez l'utilisateur en créant un PhoneAuthCredential du code de validation et de l'identifiant de validation, puis en transmettant cet objet à FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync.

  1. Demandez le code de validation à l'utilisateur.
  2. Créer un objet Credential à partir de la validation et l'identifiant de validation.
    PhoneAuthCredential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Connectez l'utilisateur avec l'objet PhoneAuthCredential:
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task =&gt {
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result.User;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });

Étapes suivantes

Lorsqu'un utilisateur se connecte pour la première fois, un compte utilisateur est créé et associés aux identifiants, c'est-à-dire au nom d'utilisateur et au mot de passe, ou des informations sur le fournisseur d'authentification, c'est-à-dire l'utilisateur avec lequel 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 profil de base 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 votre Firebase Realtime Database et votre Cloud Storage Règles de sécurité, vous pouvez obtenez 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 appli à l'aide de plusieurs authentifications fournisseurs en associant leurs identifiants compte utilisateur existant.

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

auth.SignOut();