Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Autenticarse con Firebase en plataformas Apple usando un número de teléfono

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.

La forma más fácil de agregar el inicio de sesión con número de teléfono a su aplicación es usar FirebaseUI , que incluye un widget de inicio de sesión directo que implementa flujos de inicio de sesión para el inicio de sesión con número de teléfono, así como inicio de sesión federado y basado en contraseña. -en. 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

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

  1. En Xcode, con su proyecto de aplicación abierto, vaya a Archivo > Agregar paquetes .
  2. Cuando se le solicite, agregue el repositorio del SDK de las plataformas Apple de Firebase:
  3.   https://github.com/firebase/firebase-ios-sdk
  4. Elija la biblioteca de autenticación de Firebase.
  5. Cuando termine, Xcode comenzará a resolver y descargar automáticamente sus dependencias en segundo plano.
Y, verifique un paso de configuración:
  1. Si aún no ha conectado su aplicación a su proyecto de Firebase, hágalo desde la consola de Firebase .

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 .

Habilitar verificación de aplicaciones

Para usar la autenticación del número de teléfono, Firebase debe poder verificar que las solicitudes de inicio de sesión del número de teléfono provienen de su aplicación. Hay dos formas en que Firebase Authentication logra esto:

  • Notificaciones silenciosas de APN : cuando inicia sesión con un usuario con su número de teléfono por primera vez en un dispositivo, Firebase Authentication envía un token al dispositivo mediante una notificación push silenciosa. Si su aplicación recibe correctamente la notificación de Firebase, puede continuar con el inicio de sesión del número de teléfono.

    Para iOS 8.0 y versiones posteriores, las notificaciones silenciosas no requieren el consentimiento explícito del usuario y, por lo tanto, no se ven afectadas si un usuario se niega a recibir notificaciones de APN en la aplicación. Por lo tanto, la aplicación no necesita solicitar el permiso del usuario para recibir notificaciones automáticas al implementar la autenticación del número de teléfono de Firebase.

  • Verificación de reCAPTCHA : en el caso de que no sea posible enviar o recibir una notificación push silenciosa, como cuando el usuario ha deshabilitado la actualización en segundo plano para su aplicación, o cuando prueba su aplicación en un simulador de iOS, Firebase Authentication usa la verificación de reCAPTCHA para completar el teléfono. flujo de inicio de sesión. El desafío reCAPTCHA a menudo se puede completar sin que el usuario tenga que resolver nada.

Cuando las notificaciones automáticas silenciosas están configuradas correctamente, solo un porcentaje muy pequeño de usuarios experimentará el flujo de reCAPTCHA. No obstante, debe asegurarse de que el inicio de sesión del número de teléfono funcione correctamente, ya sea que las notificaciones automáticas silenciosas estén disponibles o no.

Empieza a recibir notificaciones silenciosas

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

  1. En Xcode, habilite las notificaciones push para su proyecto.
  2. Cargue su clave de autenticación de APN en Firebase. Si aún no tiene una clave de autenticación de APN, asegúrese de crear una 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. En la clave de autenticación de APN en la configuración de la aplicación iOS , haga clic en el botón Cargar .

    3. Vaya a la ubicación donde guardó su clave, selecciónela y haga clic en Abrir . Agregue el ID de clave para la clave (disponible en el Centro de miembros para desarrolladores de Apple ) y haga clic en Cargar .

    Si ya tiene un certificado APNs, puede cargar el certificado en su lugar.

Configurar la verificación reCAPTCHA

Para habilitar el SDK de Firebase para usar la verificación reCAPTCHA:

  1. Agregue esquemas de URL personalizados a su proyecto Xcode:
    1. Abra la configuración de su proyecto: haga doble clic en el nombre del proyecto en la vista de árbol de la izquierda. Seleccione su aplicación en la sección OBJETIVOS , luego seleccione la pestaña Información y expanda la sección Tipos de URL .
    2. Haga clic en el botón + y agregue un esquema de URL para su ID de cliente invertida. Para encontrar este valor, abra el archivo de configuración GoogleService-Info.plist y busque la clave REVERSED_CLIENT_ID . Copie el valor de esa clave y péguelo en el cuadro Esquemas de URL en la página de configuración. Deje los otros campos en blanco.

      Cuando se complete, su configuración debería verse similar a la siguiente (pero con los valores específicos de su aplicación):

  2. Opcional : si desea personalizar la forma en que su aplicación presenta el SFSafariViewController cuando muestra el reCAPTCHA al usuario, cree una clase personalizada que se ajuste al protocolo AuthUIDelegate y pásela a verifyPhoneNumber(_:uiDelegate:completion:) .

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 pida que proporcione su número de teléfono y luego llame a verifyPhoneNumber(_:uiDelegate:completion:) 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 verifyPhoneNumber(_:uiDelegate:completion:) , pasándole el número de teléfono del usuario.

    Rápido

    PhoneAuthProvider.provider()
      .verifyPhoneNumber(phoneNumber, uiDelegate: nil) { verificationID, error in
          if let error = error {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // Sign in using the verificationID and the code sent to the user
          // ...
      }

    C objetivo

    [[FIRPhoneAuthProvider provider] verifyPhoneNumber:userInput
                                            UIDelegate:nil
                                            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
      if (error) {
        [self showMessagePrompt:error.localizedDescription];
        return;
      }
      // Sign in using the verificationID and the code sent to the user
      // ...
    }];

    El método de verifyPhoneNumber de número de teléfono es reentrante: si lo llama varias veces, como en el método onAppear de una vista, el método de verificación de número de verifyPhoneNumber no enviará un segundo SMS a menos que se haya agotado el tiempo de espera de la solicitud original.

    Cuando llamas a verifyPhoneNumber(_:uiDelegate:completion:) , Firebase envía una notificación push silenciosa a tu aplicación o emite un desafío reCAPTCHA para el usuario. Una vez que su aplicación recibe la notificación o el usuario completa el desafío reCAPTCHA, 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.

    El mensaje SMS enviado por Firebase también se puede localizar especificando el idioma de autenticación a través de la propiedad languageCode en su instancia de Auth.

    Rápido

     // Change language code to french.
     Auth.auth().languageCode = "fr";
    

    C objetivo

     // Change language code to french.
     [FIRAuth auth].languageCode = @"fr";
    
  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 el objeto NSUserDefaults :

    Rápido

    UserDefaults.standard.set(verificationID, forKey: "authVerificationID")
    

    C objetivo

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:verificationID forKey:@"authVerificationID"];
    

    Luego, puede restaurar el valor guardado:

    Rápido

    let verificationID = UserDefaults.standard.string(forKey: "authVerificationID")
    

    C objetivo

    NSString *verificationID = [defaults stringForKey:@"authVerificationID"];
    

Si la llamada para verificar el número de verifyPhoneNumber(_:uiDelegate:completion:) tiene éxito, puede solicitar al usuario que escriba el código de verificación cuando lo reciba en el mensaje SMS.

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 FIRPhoneAuthCredential a partir del código de verificación y el ID de verificación y transfiriendo ese objeto a signInWithCredential:completion: .

  1. Obtenga el código de verificación del usuario.
  2. Cree un objeto FIRPhoneAuthCredential a partir del código de verificación y el ID de verificación.

    Rápido

    let credential = PhoneAuthProvider.provider().credential(
      withVerificationID: verificationID,
      verificationCode: verificationCode
    )

    C objetivo

    FIRAuthCredential *credential = [[FIRPhoneAuthProvider provider]
        credentialWithVerificationID:verificationID
                    verificationCode:userInput];
  3. Inicie sesión en el usuario con el objeto FIRPhoneAuthCredential :

    Rápido

    Auth.auth().signIn(with: credential) { authResult, error in
        if let error = error {
          let authError = error as NSError
          if isMFAEnabled, authError.code == AuthErrorCode.secondFactorRequired.rawValue {
            // The user is a multi-factor user. Second factor challenge is required.
            let resolver = authError
              .userInfo[AuthErrorUserInfoMultiFactorResolverKey] as! MultiFactorResolver
            var displayNameString = ""
            for tmpFactorInfo in resolver.hints {
              displayNameString += tmpFactorInfo.displayName ?? ""
              displayNameString += " "
            }
            self.showTextInputPrompt(
              withMessage: "Select factor to sign in\n\(displayNameString)",
              completionBlock: { userPressedOK, displayName in
                var selectedHint: PhoneMultiFactorInfo?
                for tmpFactorInfo in resolver.hints {
                  if displayName == tmpFactorInfo.displayName {
                    selectedHint = tmpFactorInfo as? PhoneMultiFactorInfo
                  }
                }
                PhoneAuthProvider.provider()
                  .verifyPhoneNumber(with: selectedHint!, uiDelegate: nil,
                                     multiFactorSession: resolver
                                       .session) { verificationID, error in
                    if error != nil {
                      print(
                        "Multi factor start sign in failed. Error: \(error.debugDescription)"
                      )
                    } else {
                      self.showTextInputPrompt(
                        withMessage: "Verification code for \(selectedHint?.displayName ?? "")",
                        completionBlock: { userPressedOK, verificationCode in
                          let credential: PhoneAuthCredential? = PhoneAuthProvider.provider()
                            .credential(withVerificationID: verificationID!,
                                        verificationCode: verificationCode!)
                          let assertion: MultiFactorAssertion? = PhoneMultiFactorGenerator
                            .assertion(with: credential!)
                          resolver.resolveSignIn(with: assertion!) { authResult, error in
                            if error != nil {
                              print(
                                "Multi factor finanlize sign in failed. Error: \(error.debugDescription)"
                              )
                            } else {
                              self.navigationController?.popViewController(animated: true)
                            }
                          }
                        }
                      )
                    }
                  }
              }
            )
          } else {
            self.showMessagePrompt(error.localizedDescription)
            return
          }
          // ...
          return
        }
        // User is signed in
        // ...
    }

    C objetivo

    [[FIRAuth auth] signInWithCredential:credential
                              completion:^(FIRAuthDataResult * _Nullable authResult,
                                           NSError * _Nullable error) {
        if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
          FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
          NSMutableString *displayNameString = [NSMutableString string];
          for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
            [displayNameString appendString:tmpFactorInfo.displayName];
            [displayNameString appendString:@" "];
          }
          [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                               completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
           FIRPhoneMultiFactorInfo* selectedHint;
           for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
             if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
               selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
             }
           }
           [FIRPhoneAuthProvider.provider
            verifyPhoneNumberWithMultiFactorInfo:selectedHint
            UIDelegate:nil
            multiFactorSession:resolver.session
            completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
              if (error) {
                [self showMessagePrompt:error.localizedDescription];
              } else {
                [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                     completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
                 FIRPhoneAuthCredential *credential =
                     [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                                  verificationCode:verificationCode];
                 FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
                 [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
                   if (error) {
                     [self showMessagePrompt:error.localizedDescription];
                   } else {
                     NSLog(@"Multi factor finanlize sign in succeeded.");
                   }
                 }];
               }];
              }
            }];
         }];
        }
      else if (error) {
        // ...
        return;
      }
      // User successfully signed in. Get user data from the FIRUser object
      if (authResult == nil) { return; }
      FIRUser *user = authResult.user;
      // ...
    }];

Prueba con números de teléfono ficticios

Puede configurar números de teléfono ficticios para el desarrollo a través de la consola de Firebase. Las pruebas con números de teléfono ficticios brindan estos beneficios:

  • Pruebe la autenticación del número de teléfono sin consumir su cuota de uso.
  • Pruebe la autenticación del número de teléfono sin enviar un mensaje SMS real.
  • Ejecute pruebas consecutivas con el mismo número de teléfono sin verse limitado. Esto minimiza el riesgo de rechazo durante el proceso de revisión de la tienda de aplicaciones si el revisor usa el mismo número de teléfono para la prueba.
  • Pruebe fácilmente en entornos de desarrollo sin ningún esfuerzo adicional, como la capacidad de desarrollar en un simulador de iOS o un emulador de Android sin Google Play Services.
  • Escriba pruebas de integración sin que lo bloqueen los controles de seguridad que normalmente se aplican a números de teléfono reales en un entorno de producción.

Los números de teléfono ficticios deben cumplir estos requisitos:

  1. Asegúrese de utilizar números de teléfono que sean realmente ficticios y que aún no existan. Firebase Authentication no le permite establecer números de teléfono existentes utilizados por usuarios reales como números de prueba. Una opción es usar números con el prefijo 555 como números de teléfono de prueba de EE. UU., por ejemplo: +1 650-555-3434
  2. Los números de teléfono deben tener el formato correcto para la longitud y otras restricciones. Seguirán pasando por la misma validación que el número de teléfono de un usuario real.
  3. Puede agregar hasta 10 números de teléfono para el desarrollo.
  4. Use números de teléfono/códigos de prueba que sean difíciles de adivinar y cámbielos con frecuencia.

Crear números de teléfono y códigos de verificación ficticios

  1. En Firebase console , abra la sección Autenticación .
  2. En la pestaña Método de inicio de sesión , habilite el proveedor de teléfono si aún no lo ha hecho.
  3. Abra el menú Números de teléfono para probar acordeón.
  4. Proporcione el número de teléfono que desea probar, por ejemplo: +1 650-555-3434 .
  5. Proporcione el código de verificación de 6 dígitos para ese número específico, por ejemplo: 654321 .
  6. Agrega el número. Si es necesario, puede eliminar el número de teléfono y su código pasando el cursor sobre la fila correspondiente y haciendo clic en el icono de la papelera.

Prueba manual

Puede comenzar directamente a usar un número de teléfono ficticio en su aplicación. Esto le permite realizar pruebas manuales durante las etapas de desarrollo sin encontrarse con problemas de cuota o limitaciones. También puede probar directamente desde un simulador de iOS o un emulador de Android sin tener instalados los servicios de Google Play.

Cuando proporciona el número de teléfono ficticio y envía el código de verificación, no se envía ningún SMS real. En su lugar, debe proporcionar el código de verificación configurado previamente para completar el inicio de sesión.

Al completar el inicio de sesión, se crea un usuario de Firebase con ese número de teléfono. El usuario tiene el mismo comportamiento y propiedades que un usuario de número de teléfono real y puede acceder a Realtime Database/Cloud Firestore y otros servicios de la misma manera. El token de identificación acuñado durante este proceso tiene la misma firma que un usuario de número de teléfono real.

Otra opción es establecer un rol de prueba a través de reclamos personalizados en estos usuarios para diferenciarlos como usuarios falsos si desea restringir aún más el acceso.

Pruebas de integración

Además de las pruebas manuales, Firebase Authentication proporciona API para ayudar a escribir pruebas de integración para las pruebas de autenticación telefónica. Estas API deshabilitan la verificación de aplicaciones al deshabilitar el requisito de reCAPTCHA en la web y las notificaciones automáticas silenciosas en iOS. Esto hace que las pruebas de automatización sean posibles en estos flujos y más fáciles de implementar. Además, ayudan a brindar la capacidad de probar flujos de verificación instantánea en Android.

En iOS, la configuración de appVerificationDisabledForTesting debe establecerse en TRUE antes de llamar a verifyPhoneNumber . Esto se procesa sin requerir ningún token de APN ni enviar notificaciones automáticas silenciosas en segundo plano, lo que facilita la prueba en un simulador. Esto también deshabilita el flujo de reserva de reCAPTCHA.

Tenga en cuenta que cuando la verificación de la aplicación está deshabilitada, el uso de un número de teléfono no ficticio no podrá completar el inicio de sesión. Solo se pueden usar números de teléfono ficticios con esta API.

Rápido

let phoneNumber = "+16505554567"

// This test verification code is specified for the given test phone number in the developer console.
let testVerificationCode = "123456"

Auth.auth().settings.isAppVerificationDisabledForTesting = TRUE
PhoneAuthProvider.provider().verifyPhoneNumber(phoneNumber, uiDelegate:nil) {
                                                            verificationID, error in
    if (error) {
      // Handles error
      self.handleError(error)
      return
    }
    let credential = PhoneAuthProvider.provider().credential(withVerificationID: verificationID ?? "",
                                                               verificationCode: testVerificationCode)
    Auth.auth().signInAndRetrieveData(with: credential) { authData, error in
      if (error) {
        // Handles error
        self.handleError(error)
        return
      }
      _user = authData.user
    }];
}];

C objetivo

NSString *phoneNumber = @"+16505554567";

// This test verification code is specified for the given test phone number in the developer console.
NSString *testVerificationCode = @"123456";

[FIRAuth auth].settings.appVerificationDisabledForTesting = YES;
[[FIRPhoneAuthProvider provider] verifyPhoneNumber:phoneNumber
                                        completion:^(NSString *_Nullable verificationID,
                                                     NSError *_Nullable error) {
    if (error) {
      // Handles error
      [self handleError:error];
      return;
    }
    FIRAuthCredential *credential =
        [FIRPhoneAuthProvider credentialWithVerificationID:verificationID
                                          verificationCode:testVerificationCode];
    [FIRAuth auth] signInWithAndRetrieveDataWithCredential:credential
                                                completion:^(FIRUser *_Nullable user,
                                                             NSError *_Nullable error) {
      if (error) {
        // Handles error
        [self handleError:error];
        return;
      }
      _user = user;
    }];
}];

Apéndice: uso del inicio de sesión del teléfono sin swizzling

Firebase Authentication usa el método swizzling para obtener automáticamente el token de APN de su aplicación, para manejar las notificaciones automáticas silenciosas que Firebase envía a su aplicación y para interceptar automáticamente el redireccionamiento del esquema personalizado desde la página de verificación de reCAPTCHA durante la verificación.

Si prefiere no usar swizzling, puede deshabilitarlo agregando la marca FirebaseAppDelegateProxyEnabled al archivo Info.plist de su aplicación y configurándolo en NO . Tenga en cuenta que configurar este indicador en NO también deshabilita el swizzling para otros productos de Firebase, incluido Firebase Cloud Messaging.

Si deshabilita el swizzling, debe pasar explícitamente el token del dispositivo APN, las notificaciones automáticas y la URL de redirección del esquema personalizado a Firebase Authentication.

Si está creando una aplicación SwiftUI, también debe pasar explícitamente el token del dispositivo APN, las notificaciones automáticas y la URL de redireccionamiento del esquema personalizado a Firebase Authentication.

Para obtener el token del dispositivo APN, implemente el método application(_:didRegisterForRemoteNotificationsWithDeviceToken:) y, en él, pase el token del dispositivo al método setAPNSToken(_:type:) de Auth .

Rápido

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  // Pass device token to auth
  Auth.auth().setAPNSToken(deviceToken, type: .prod)

  // Further handling of the device token if needed by the app
  // ...
}

C objetivo

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
  // Pass device token to auth.
  [[FIRAuth auth] setAPNSToken:deviceToken type:FIRAuthAPNSTokenTypeProd];
  // Further handling of the device token if needed by the app.
}

Para gestionar las notificaciones automáticas, en el método application(_:didReceiveRemoteNotification:fetchCompletionHandler:): las notificaciones relacionadas con la autenticación de Firebase llamando al método canHandleNotification(_:) de Auth .

Rápido

func application(_ application: UIApplication,
    didReceiveRemoteNotification notification: [AnyHashable : Any],
    fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  if Auth.auth().canHandleNotification(notification) {
    completionHandler(.noData)
    return
  }
  // This notification is not auth related; it should be handled separately.
}

C objetivo

- (void)application:(UIApplication *)application
    didReceiveRemoteNotification:(NSDictionary *)notification
          fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // Pass notification to auth and check if they can handle it.
  if ([[FIRAuth auth] canHandleNotification:notification]) {
    completionHandler(UIBackgroundFetchResultNoData);
    return;
  }
  // This notification is not auth related; it should be handled separately.
}

Para manejar la URL de redirección del esquema personalizado, implemente el método application(_:open:options:) y, en ellos, pase la URL al método canHandleURL(_:) de Auth .

Rápido

func application(_ application: UIApplication, open url: URL,
    options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  if Auth.auth().canHandle(url) {
    return true
  }
  // URL not auth related; it should be handled separately.
}

C objetivo

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
  if ([[FIRAuth auth] canHandleURL:url]) {
    return YES;
  }
  // URL not auth related; it should be handled separately.
}

Si usa SwiftUI o UISceneDelegate , para manejar la URL de redireccionamiento, implemente el método scene(_:openURLContexts:) y, en ellos, pase la URL al método canHandleURL(_:) de Auth .

Rápido

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
  for urlContext in URLContexts {
      let url = urlContext.url
      Auth.auth().canHandle(url)
  }
  // URL not auth related; it should be handled separately.
}

C objetivo

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
  for (UIOpenURLContext *urlContext in URLContexts) {
    [FIRAuth.auth canHandleURL:urlContext.url];
    // URL not auth related; it should be handled separately.
  }
}

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 FIRUser . Consulte Administrar usuarios .

  • 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 signOut: .

Rápido

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

C objetivo

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

También es posible que desee agregar un código de manejo de errores para la gama completa de errores de autenticación. Consulte Manejo de errores .