Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Autenticarse con Firebase usando un número de teléfono con Unity

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puede usar Firebase Authentication para iniciar sesión en un usuario mediante el envío de un mensaje SMS al teléfono del usuario. El usuario inicia sesión con un código de un solo uso contenido en el mensaje SMS.

Este documento describe cómo implementar un flujo de inicio de sesión de número de teléfono mediante el SDK de Firebase.

Antes de que empieces

  1. Antes de poder usar Firebase Authentication , debe agregar el SDK de Firebase Unity (específicamente, FirebaseAuth.unitypackage ) a su proyecto de Unity.

    Encuentra instrucciones detalladas para estos pasos de configuración inicial en Agrega Firebase a tu proyecto de Unity .

  2. Si aún no ha conectado su aplicación a su proyecto de Firebase, hágalo desde la consola de Firebase .

En iOS, tenga en cuenta que el inicio de sesión con el número de teléfono requiere un dispositivo físico y no funcionará en un simulador.

Preocupaciones de seguridad

La autenticación usando solo un número de teléfono, si bien es conveniente, es menos segura que los otros métodos disponibles, porque la posesión de un número de teléfono se puede transferir fácilmente entre usuarios. Además, en dispositivos con múltiples perfiles de usuario, cualquier usuario que pueda recibir mensajes SMS puede iniciar sesión en una cuenta usando el número de teléfono del dispositivo.

Si usa el inicio de sesión basado en el número de teléfono en su aplicación, debe ofrecerlo junto con métodos de inicio de sesión más seguros e informar a los usuarios sobre las ventajas y desventajas de seguridad del uso del inicio de sesión con el número de teléfono.

Habilite el inicio de sesión con número de teléfono para su proyecto de Firebase

Para que los usuarios inicien sesión por SMS, primero debe habilitar el método de inicio de sesión con número de teléfono para su proyecto de Firebase:

  1. En Firebase console , abra la sección Autenticación .
  2. En la página Método de inicio de sesión , habilite el método de inicio de sesión Número de teléfono .

La cuota de solicitud de inicio de sesión del número de teléfono de Firebase es lo suficientemente alta como para que la mayoría de las aplicaciones no se vean afectadas. Sin embargo, si necesita iniciar sesión en un volumen muy alto de usuarios con autenticación telefónica, es posible que deba actualizar su plan de precios. Consulte la página de precios .

Comienza a recibir notificaciones de APN (solo iOS)

Para usar la autenticación de número de teléfono en iOS, su aplicación debe poder recibir notificaciones de APN de Firebase. Cuando inicia sesión con un usuario con su número de teléfono por primera vez en un dispositivo, Firebase Authentication envía una notificación push silenciosa al dispositivo para verificar que la solicitud de inicio de sesión con el número de teléfono proviene de su aplicación. (Por este motivo, el inicio de sesión con número de teléfono no se puede utilizar en un simulador).

Para habilitar las notificaciones de APN para su uso con Firebase Authentication:

  1. En Xcode, habilite las notificaciones push para su proyecto.
  2. Sube tu certificado APNs a Firebase. Si aún no tiene un certificado APN, asegúrese de crear uno en el Centro de miembros para desarrolladores de Apple .

    1. Dentro de su proyecto en la consola Firebase, seleccione el ícono de ajustes, seleccione Configuración del proyecto y luego seleccione la pestaña Cloud Messaging .

    2. Seleccione el botón Cargar certificado para su certificado de desarrollo, su certificado de producción o ambos. Se requiere al menos uno.

    3. Para cada certificado, seleccione el archivo .p12 y proporcione la contraseña, si corresponde. Asegúrese de que el ID del paquete de este certificado coincida con el ID del paquete de su aplicación. Seleccione Guardar .

Enviar un código de verificación al teléfono del usuario

Para iniciar el inicio de sesión con el número de teléfono, presente al usuario una interfaz que le solicite que proporcione su número de teléfono y luego llame a PhoneAuthProvider.VerifyPhoneNumber para solicitar que Firebase envíe un código de autenticación al teléfono del usuario por SMS:

  1. Obtener el número de teléfono del usuario.

    Los requisitos legales varían, pero como práctica recomendada y para establecer expectativas para sus usuarios, debe informarles que si usan el inicio de sesión por teléfono, pueden recibir un mensaje SMS para verificación y se aplican tarifas estándar.

  2. Llame a PhoneAuthProvider.VerifyPhoneNumber y pásele el número de teléfono del usuario.
    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.
      });
    
    Cuando llama a PhoneAuthProvider.VerifyPhoneNumber , Firebase,
    • (en iOS), envía una notificación push silenciosa a su aplicación.
    • Firebase envía un mensaje SMS que contiene un código de autenticación al número de teléfono especificado y pasa una identificación de verificación a su función de finalización. Necesitará tanto el código de verificación como el ID de verificación para iniciar sesión como usuario.
  3. Guarde el ID de verificación y restáurelo cuando se cargue su aplicación. Al hacerlo, puede asegurarse de que todavía tiene una identificación de verificación válida si su aplicación finaliza antes de que el usuario complete el flujo de inicio de sesión (por ejemplo, mientras cambia a la aplicación de SMS).

    Puede conservar el ID de verificación de la forma que desee. Una forma sencilla es guardar el ID de verificación con UnityEngine.PlayerPrefs .

Si se llama a la devolución de llamada pasada a codeSent , puede solicitar al usuario que escriba el código de verificación cuando lo reciba en el mensaje SMS.

Por otro lado, si se llama a la devolución de llamada para la verificationCompleted Completada, entonces la verificación automática ha tenido éxito y ahora tendrá una Credential con la que puede usar como se describe a continuación.

Iniciar sesión del usuario con el código de verificación

Después de que el usuario proporcione a su aplicación el código de verificación del mensaje SMS, inicie sesión creando un objeto Credential a partir del código de verificación y el ID de verificación y transfiriendo ese objeto a FirebaseAuth.SignInWithCredential .

  1. Obtenga el código de verificación del usuario.
  2. Cree un objeto Credential a partir del código de verificación y el ID de verificación.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. Inicie sesión en el usuario con el objeto 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);
    });
    

Próximos pasos

Después de que un usuario inicia sesión por primera vez, se crea una nueva cuenta de usuario y se vincula a las credenciales (es decir, el nombre de usuario y la contraseña, el número de teléfono o la información del proveedor de autenticación) con las que el usuario inició sesión. Esta nueva cuenta se almacena como parte de su proyecto de Firebase y se puede usar para identificar a un usuario en cada aplicación de su proyecto, independientemente de cómo inicie sesión el usuario.

  • En sus aplicaciones, puede obtener la información básica del perfil del usuario del objeto 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;
    }
    
  • En sus Reglas de seguridad de Firebase Realtime Database y Cloud Storage, puede obtener el ID de usuario único del usuario que inició sesión de la variable auth y usarlo para controlar a qué datos puede acceder un usuario.

Puede permitir que los usuarios inicien sesión en su aplicación utilizando varios proveedores de autenticación vinculando las credenciales del proveedor de autenticación a una cuenta de usuario existente.

Para cerrar la sesión de un usuario, llame a SignOut() :

auth.SignOut();