Vous pouvez utiliser Firebase Authentication pour connecter un utilisateur en lui envoyant un 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 implémenter un flux de connexion par numéro de téléphone à l'aide du SDK Firebase.
Avant de commencer
-
Pour pouvoir utiliser Firebase Authentication, vous devez ajouter le Firebase Unity SDK (plus précisément,
FirebaseAuth.unitypackage) à votre projet Unity.Pour obtenir des instructions détaillées sur ces étapes de configuration initiale, consultez Ajouter Firebase à votre projet Unity project.
- Si vous n'avez pas encore associé votre application à votre projet Firebase, faites-le depuis la Firebase console.
- Comprendre les exigences de la plate-forme pour la connexion par numéro de téléphone :
- La connexion par 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 à l'aide d'un numéro de téléphone uniquement, 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. De plus, sur les appareils comportant plusieurs profils utilisateur, tout utilisateur pouvant recevoir des SMS peut se connecter à un compte à l'aide du 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 la proposer en plus de méthodes de connexion plus sécurisées et informer les utilisateurs des compromis en matière 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 :
- Dans la Firebase console, ouvrez la section Authentication (Authentification).
- Sur la page Sign-in Method (Méthode de connexion), activez la méthode de connexion Phone Number (Numéro de téléphone).
- Sur la page Settings (Paramètres), définissez une règle sur les régions vers lesquelles vous souhaitez autoriser ou refuser l’envoi de SMS. Pour les nouveaux projets, la règle par défaut n'autorise aucune région.
Commencer à recevoir des notifications APN (iOS uniquement)
Pour utiliser l'authentification par numéro de téléphone sur iOS, votre application doit pouvoir 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 par 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 pour une utilisation avec Firebase Authentication, procédez comme suit :
- Dans Xcode, activez les notifications push pour votre projet.
Importez votre certificat APN dans Firebase. Si vous n'avez pas encore de certificat APN, veillez à en créer un dans l' Apple Developer Member Center.
-
Dans la console Firebase, accédez à
Settings > General (Paramètres > Général). Cliquez ensuite sur l'onglet Cloud Messaging. - Cliquez sur Upload Certificate (Importer un certificat) pour votre certificat de développement, votre certificat de production ou les deux. Au moins un est requis.
-
Pour chaque certificat, sélectionnez le
.p12fichier et indiquez le mot de passe, le cas échéant. Assurez-vous que l'ID du bundle de ce certificat correspond à celui de votre application. Cliquez sur Save (Enregistrer).
-
Dans la console Firebase, accédez à
Envoyer un code de validation au téléphone de l'utilisateur
Pour lancer la connexion par numéro de téléphone, présentez à l'utilisateur une interface l'invitant
à 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 :
-
Obtenez le numéro de téléphone de l'utilisateur.
Les exigences légales varient, mais, par souci de bonnes pratiques 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 SMS de validation et que les tarifs standards s'appliquent.
- Appelez
PhoneAuthProvider.VerifyPhoneNumber, en lui transmettant un PhoneAuthOptions contenant le numéro de téléphone de l'utilisateur. Lorsque vous appelezPhoneAuthProvider 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. });
PhoneAuthProvider.VerifyPhoneNumber, Firebase,- (sur iOS), envoie une notification push silencieuse à votre application.
- Firebase envoie un SMS contenant un code d'authentification au numéro de téléphone spécifié et transmet un ID de validation à votre fonction de finalisation. Vous aurez besoin du code de validation et de l'ID de validation pour connecter l'utilisateur.
-
Enregistrez l'ID de validation et restaurez-le lorsque votre application se charge. Vous vous assurez ainsi de disposer toujours d'un ID de validation valide si votre application est arrêtée avant que l'utilisateur ne termine le flux de connexion (par exemple, lors du passage à l'application de SMS).
Vous pouvez conserver l'ID de validation comme vous le souhaitez. Une façon simple consiste à enregistrer 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 SMS.
En revanche, si le rappel pour verificationCompleted est appelé, la validation automatique a réussi et vous disposez désormais d'un 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 à votre application le code de validation du SMS
message, connectez-le en créant un PhoneAuthCredential
objet à partir du code de validation et de l'ID de validation, puis en transmettant cet objet
à FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync.
- Obtenez le code de validation de l'utilisateur.
- Créez un
Credentialobjet à partir du code de validation et de l'ID de validation.PhoneAuthCredential credential = phoneAuthProvider.GetCredential(verificationId, verificationCode);
- Connectez l'utilisateur avec l'objet
PhoneAuthCredential:auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { 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é 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 méthode de connexion utilisée.
-
Dans vos applications, vous pouvez obtenir les informations de base du profil de l'utilisateur à partir de l'
Firebase.Auth.FirebaseUserobjet :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 Firebase Realtime Database et Cloud Storage règles de sécurité, 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();