Primeros pasos con Firebase Authentication en plataformas de Apple

Puedes usar Firebase Authentication para permitir que los usuarios accedan a tu app con uno o más métodos de acceso, incluidos el acceso con dirección de correo electrónico y contraseña, y proveedores de identidad federada, como el Acceso con Google y el Acceso con Facebook. Este instructivo te muestra cómo agregar un acceso con dirección de correo electrónico y contraseña a la app para comenzar con Firebase Authentication.

Conecta tu app a Firebase

  1. Instala el SDK de Firebase.
  2. En Firebase Firebase, agrega la app al proyecto de Firebase.

Agrega Firebase Authentication a tu app

Usa Swift Package Manager para instalar y administrar las dependencias de Firebase.

  1. En Xcode, con tu proyecto de app abierto, navega a File > Add Packages.
  2. Cuando se te solicite, agrega el repositorio del SDK de Firebase para plataformas de Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Elige la biblioteca de Firebase Authentication.
  5. Agrega la marca -ObjC a la sección Other Linker Flags de la configuración de compilación de tu destino.
  6. Cuando termines, Xcode comenzará a resolver y descargar automáticamente tus dependencias en segundo plano.

Crea prototipos y realiza pruebas con Firebase Local Emulator Suite (opcional)

Antes de analizar cómo tu app autentica a los usuarios, veamos un conjunto de herramientas que puedes usar para crear prototipos y probar la funcionalidad de Authentication: Firebase Local Emulator Suite Si aún no elegiste una técnica de autenticación o un proveedor específico, estás probando varios modelos de datos con información pública y privada mediante Authentication y las Firebase Security Rules, o bien si estás creando prototipos de diseños de IU de acceso, poder trabajar de manera local sin implementar servicios en ejecución será de gran ayuda.

Un emulador de Authentication forma parte de Local Emulator Suite, lo que permite que tu app interactúe con el contenido y la configuración emulados de la base de datos y, si lo deseas, con los recursos emulados del proyecto (funciones, otras bases de datos y reglas de seguridad).

El uso del emulador de Authentication solo requiere algunos pasos sencillos:

  1. Agrega una línea de código a la configuración de prueba de tu app para conectarte al emulador.
  2. Desde la raíz del directorio de tu proyecto local, ejecuta firebase emulators:start.
  3. Usa la IU de Local Emulator Suite para crear un prototipo de forma interactiva o la API de REST del emulador de Authentication para realizar pruebas no interactivas.

Puedes encontrar una guía detallada en el artículo Conecta tu app al emulador de Authentication. Para obtener más información, consulta la introducción a Local Emulator Suite.

Ahora veamos cómo autenticar a los usuarios.

Inicializa el SDK de Firebase

En el delegado de la app, importa en primer lugar el SDK de Firebase:

Swift

import FirebaseCore

Objective-C

@import FirebaseCore;

Luego, en el método application:didFinishLaunchingWithOptions:, inicializa el objeto FirebaseApp:

Swift

// Use Firebase library to configure APIs
FirebaseApp.configure()

Objective-C

// Use Firebase library to configure APIs
[FIRApp configure];

Detecta el estado de autenticación

Para cada vista de tu app que necesite información sobre el usuario que accedió, adjunta un objeto de escucha al objeto FIRAuth. Se llamará a este objeto de escucha cada vez que cambie el estado de acceso del usuario.

Adjunta el objeto de escucha en el método viewWillAppear del controlador de vista:

Swift

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

Objective-C

self.handle = [[FIRAuth auth]
    addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
      // ...
    }];

Además, desvincula el objeto de escucha del método viewWillDisappear del controlador de vista:

Swift

Auth.auth().removeStateDidChangeListener(handle!)

Objective-C

[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];

Registra usuarios nuevos

Crea un formulario que permita a los usuarios nuevos registrarse en tu app mediante su dirección de correo electrónico y una contraseña. Cuando un usuario complete el formulario, valida la dirección de correo electrónico y la contraseña que proporcionó el usuario para después pasarlas al método createUser:

Swift

Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
  // ...
}

Objective-C

[[FIRAuth auth] createUserWithEmail:email
                           password:password
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
  // ...
}];

Acceso de usuarios existentes

Crea un formulario que permita a los usuarios existentes acceder con su dirección de correo electrónico y una contraseña. Cuando un usuario complete el formulario, llama al método signIn:

Swift

Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
  guard let strongSelf = self else { return }
  // ...
}

Objective-C

[[FIRAuth auth] signInWithEmail:self->_emailField.text
                       password:self->_passwordField.text
                     completion:^(FIRAuthDataResult * _Nullable authResult,
                                  NSError * _Nullable error) {
  // ...
}];

Obtén información del usuario

Cuando un usuario accede correctamente, puedes obtener información sobre él. Por ejemplo, en el objeto de escucha del estado de autenticación, haz lo siguiente:

Swift

if let user = user {
  // 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 getTokenWithCompletion:completion: instead.
  let uid = user.uid
  let email = user.email
  let photoURL = user.photoURL
  var multiFactorString = "MultiFactor: "
  for info in user.multiFactor.enrolledFactors {
    multiFactorString += info.displayName ?? "[DispayName]"
    multiFactorString += " "
  }
  // ...
}

Objective-C

if (user) {
  // 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 getTokenWithCompletion:completion: instead.
  NSString *email = user.email;
  NSString *uid = user.uid;
  NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
  for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
    [multiFactorString appendString:info.displayName];
    [multiFactorString appendString:@" "];
  }
  NSURL *photoURL = user.photoURL;
  // ...
}

Próximos pasos

Obtén información para admitir otros proveedores de identidad y cuentas de invitado anónimas en los siguientes vínculos: