Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

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

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

Ce document décrit comment implémenter un flux de connexion par numéro de téléphone à l'aide du SDK Firebase.

Avant que tu commences

  1. Avant de pouvoir utiliser l' authentification Firebase , vous devez ajouter le SDK Firebase Unity (en particulier, FirebaseAuth.unitypackage ) à votre projet Unity.

    Trouvez des instructions détaillées pour ces étapes de configuration initiale dans Ajouter Firebase à votre projet Unity .

  2. Si vous n'avez pas encore connecté votre application à votre projet Firebase, faites-le depuis la console Firebase .

Sur iOS, notez que la connexion par numéro de téléphone nécessite un appareil physique et ne fonctionnera pas sur un simulateur.

Problèmes de sécurité

L'authentification utilisant uniquement un numéro de téléphone, bien que pratique, est moins sécurisée que les autres méthodes disponibles, car la possession d'un numéro de téléphone peut être facilement transférée entre les utilisateurs. En outre, sur les appareils dotés de plusieurs profils utilisateur, tout utilisateur pouvant recevoir des messages SMS peut se connecter à un compte à l'aide du numéro de téléphone de l'appareil.

Si vous utilisez la connexion basée sur le numéro de téléphone dans votre application, vous devez la proposer avec des 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 méthode de 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 Méthode de connexion, activez la méthode de connexion par numéro de téléphone .

Le quota de demandes de connexion au numéro de téléphone de Firebase est suffisamment élevé pour que la plupart des applications ne soient pas affectées. Cependant, si vous devez vous connecter à un très grand nombre d'utilisateurs avec l'authentification par téléphone, vous devrez peut-être mettre à niveau votre plan tarifaire. Voir la page de tarification .

Commencer à recevoir des notifications APN (iOS uniquement)

Pour utiliser l'authentification par numéro de téléphone sur iOS, votre application doit être en mesure de recevoir des notifications APN de Firebase. Lorsque vous connectez un utilisateur avec son 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 au numéro de téléphone provient de votre application. (Pour cette raison, la connexion par numéro de téléphone ne peut pas être utilisée sur un simulateur.)

Pour activer les notifications APN à utiliser avec l'authentification Firebase:

  1. Dans Xcode, activez les notifications push pour votre projet.
  2. Téléchargez votre certificat APN sur Firebase. Si vous ne disposez pas déjà d'un certificat APNs, consultez Provisioning APNs SSL Certificates .

    1. Dans votre projet dans la console Firebase, sélectionnez l'icône d'engrenage, sélectionnez Paramètres du projet , puis sélectionnez l'onglet Cloud Messaging .

    2. Sélectionnez le bouton Télécharger le certificat pour votre certificat de développement, votre certificat de production ou les deux. Au moins un est requis.

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

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

Pour initier 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 exigences légales varient, mais en tant que meilleure pratique et pour définir les attentes de vos utilisateurs, vous devez les informer que s'ils utilisent la connexion par téléphone, ils peuvent recevoir un message SMS à des fins de vérification et que les tarifs standard s'appliquent.

  2. Appelez PhoneAuthProvider.VerifyPhoneNumber en lui transmettant le numéro de téléphone de l'utilisateur.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, 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 message SMS contenant un code d'authentification au numéro de téléphone spécifié et transmet un ID de vérification à votre fonction d'achèvement. Vous aurez besoin du code de vérification et de l'ID de vérification pour vous connecter à l'utilisateur.
  3. Enregistrez l'ID de vérification et restaurez-le lorsque votre application se charge. Ce faisant, vous pouvez vous assurer que vous disposez toujours d'un ID de vérification valide si votre application est interrompue avant que l'utilisateur n'ait terminé le processus de connexion (par exemple, lors du passage à l'application SMS).

    Vous pouvez conserver l'ID de vérification comme vous le souhaitez. Un moyen simple consiste à enregistrer l'ID de vérification avec UnityEngine.PlayerPrefs .

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

D'un autre côté, si le rappel pour verificationCompleted est appelé, alors la vérification automatique a réussi et vous aurez maintenant un Credential avec lequel vous pouvez utiliser comme décrit ci-dessous.

Connectez-vous l'utilisateur avec le code de vérification

Une fois que l'utilisateur a fourni à votre application le code de vérification du message SMS, connectez-vous à l'utilisateur en créant un objet Credential partir du code de vérification et de l'ID de vérification et en transmettant cet objet à FirebaseAuth.SignInWithCredential .

  1. Obtenez le code de vérification de l'utilisateur.
  2. Créez un objet Credential partir du code de vérification et de l'ID de vérification.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Connectez-vous l'utilisateur avec l'objet Credential :
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      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);
    });
    

Prochaines étapes

Lorsqu'un utilisateur se connecte pour la première fois, un nouveau compte utilisateur est créé et lié aux informations d'identification (c'est-à-dire le nom d'utilisateur et le mot de passe, le numéro de téléphone ou les informations du fournisseur d'authentification) avec lesquels l'utilisateur s'est connecté. Ce nouveau compte est stocké dans le cadre de votre projet Firebase et peut être utilisé pour identifier un utilisateur dans chaque application de votre projet, quelle que soit la manière dont l'utilisateur 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 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 liant les informations d'identification du fournisseur d'authentification à un compte d'utilisateur existant.

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

auth.SignOut();