ios developer firebase google authentication

Google Firebase en iOS: Autenticación

Es habitual que las apps de hoy en día ofrezcan contenido personalizado al usuario que las ejecuta, y que además este contenido esté disponible de forma sincronizada en todos los dispositivos del usuario.

Para hacer esto, es necesario implementar un sistema de autenticación. Siguiendo con la línea de los anteriores posts sobre Firebase, el servicio de backend de Google, hoy te quiero hablar de las opciones de autenticación que se ofrecen.

Firebase ofrece hasta 7 métodos de inicio de sesión diferentes: Correo electrónico + contraseña, teléfono, Google, Twitter, Facebook, Github, y anónimo.

Autenticación social

Entre los métodos de autenticación disponibles, encontramos los conocidos y muy utilizados sistemas de login con Redes Sociales. Actualmente Facebook, Twitter, Google, y Github están soportados.

Para implementar los métodos sociales, primero deberemos pedir al usuario que se autentique con dichos servicios. Una vez se ha autenticado, se retornará a nuestra app con la información relevante (normalmente es un access token) para logearle contra Firebase. El método para conseguir este access token varía según la red social. En el caso de Facebook, Twitter, y Google, cada red social ofrece un API para ello. Pero en el caso de Github, tendríamos que usar un cliente OAuth 2.0 genérico para obtenerlo.

Una vez tenemos el citado access token, llamamos al API de autenticación de Firebase, que retornará un objeto del tipo Usuario cuando la operación ha resultado exitosa.

Autenticación con correo y contraseña

El método de login de correo electrónico + contraseña es más sencillo de implementar, ya que simplemente mostraremos al usuario una pantalla para que rellene los datos, y después llamaríamos al API de autenticación de Firebase para hacer login y signup.

Autenticación telefónica

El método de verificación telefónica, sin embargo, es un tanto especial. ¿Cómo funciona? Le pedimos al usuario que introduzca su número de teléfono en una caja de texto de entrada. Con ese número de teléfono llamamos al API de Firebase, que nos devuelve un verificationID que tenemos que guardar internamente en la app. Además, desde el servidor se le manda automáticamente un SMS con un código al usuario. Por último, para poder hacer login, usaríamos tanto el verificationID inicial, como el código enviado al usuario, y con dicha información haremos login con Firebase.

Este servicio de login con teléfono fue introducido en Firebase hace relativamente poco tiempo (a fecha de Octubre de 2017), justo después de la adquisición de Fabric Digits por parte de Google.

Autenticación anónima

Por último, quedaría hablar del método de inicio de sesión anónimo. Éste método es muy interesante, ya que no obliga al usuario a autenticarse con un tipo de login de forma explícita. Es buena práctica no obligar al usuario a hacer login hasta que no sea realmente necesario, y para ello la autenticación anónima es muy útil. La idea es hacer login anónimo por defecto, y luego, cuando sea realmente necesario, pedir al usuario que haga login siguiendo cualquier método explicado anteriormente. Firebase ofrece un método muy sencillo de enlazar una cuenta anónima a una permanente. Este login también es útil cuando queremos proteger el acceso a los datos del backend con reglas de seguridad.

Como aspecto a tener en cuenta sobre este método anónimo, tengo que advertirte de que los datos almacenados en la nube para un usuario que se haya autenticado de forma anónima no estarán disponibles para todos sus dispositivos (al menos hasta que se enlace con un método de login habitual). Esto es así porque el identificador de usuario anónimo variará de una instalación a otra, por lo que si instalas la versión iOS y Android de una app, Firebase lo considerará como dos usuarios diferentes.

Ya tengo un backend con autorización ¿Puedo usar Firebase?

Si ya tienes un backend funcionando y deseas integrar la autenticación de Firebase en tu propio sistema, también puedes hacerlo. Simplemente tendrías que generar un token compatible con Firebase, y devolverlo en la respuesta a tu autenticación. Es decir, estarías devolviendo un token igual que antes, pero éste nuevo token sería compatible con Firebase.

Puedes generar este token compatible desde tu backend en Node.JS usando el módulo de administración de Firebase, llamando al método createCustomToken, y pasándole como parámetro un identificativo único de usuario.

De esta forma, cuando desde iOS recuperamos ese token, lo usamos para autorizarnos con Firebase.

Implementando una UI para login y registro

El API de autenticación de Firebase no te obliga a implementar una interfaz concreta, sino que puedes crear tu UI propia y gestionar todos los posibles casos de uso que se pueden dar en un flujo de login y registro: colisión de emails, password incorrectas, verificación de perfil, linkado de cuentas, etc.

Esto supone bastante trabajo, y por ello Firebase también te proporciona un SDK implementado sobre el API de autenticación, con todos los principales casos de uso que se pueden dar, y siguiendo las mejores prácticas en cuanto a usabilidad en pantallas de login y registro. Dicho SDK se llama FirebaseUI: una librería open source que nos permite conectar los elementos de UI más comunes a las funciones de autorización de firebase. Además, dichos elementos de UI son bastante personalizables.

Conclusión

Firebase hace que integrar un sistema de autenticación sea tremendamente sencillo. Soporta los principales proveedores de autorización, y además te permite integrarte con tu sistema propio, mediante tokens custom.

¿Y tú? ¿Qué sistemas de autenticación usas en tus apps? ¡Cuéntamelo en los comentarios!

 

3 Comments
  • Guille Martinez
    Posted at 15:03h, 14 November Reply

    No sabía que Firebase había implantado la posibilidad de verificación telefónica. Que tal funciona, entiendo que será más práctico que email y contraseña. ¿O es dependiente de la autenticación con email?

    Si utilizamos esta forma podríamos acceder a los contactos y ver que otros usuarios de nuestra agenda tienen instalada nuestra aplicación como hace Whatsapp?

    Saludos Roberto!

    • Roberto
      Posted at 16:24h, 14 November Reply

      ¡Buenas, Guille!
      ¡Muchas gracias por tu comentario!

      Hace unos meses Firebase compró Digit, que era el sistema que tenía Fabric para hacer verificación telefónica.
      Precisamente escribí sobre ello hace unas semanas en el blog, puedes echar un vistazo aquí.
      Directamente no te muestra los contactos que tienen la app instalada, pero nada te impide guardar esos número de teléfono y hacerte un match con los de la agenda (tienes que pedir permisos para esto).

      ¡Un abrazo!

  • Guille Martinez
    Posted at 17:08h, 14 November Reply

    Gracias Roberto. Es una opción más versátil. El registro por email y contraseña tiene la contrapartida de que para agregar a contactos en una app social tienes que buscarlos por email o por su username. Nunca te van a aparecer directamente cuando se registran en la app. Con el modo telefónico como bien dices, en cierto momento, puedes acceder a los números de teléfono de tu agenda hacer una comprobación para ver si están registrados como usuarios en Firebase y si es así y existe ese Match agregarlos directamente como usuarios de tu app. Solo tendrías que añadir una notificación al usuario de que Fulanito se ha añadido a la app y a tu agenda de la app.

    Había visto esa opción del teléfono, pero entonces estaba restringida a ciertos países.

    Probaremos que tal funciona. Un abrazo

Deja un comentario