Pasa estados en acciones de correo electrónico

Puedes pasar el estado a través de una URL de continuación cuando envías acciones de correo electrónico para restablecer contraseñas o verificar el correo electrónico de un usuario. Esto le brinda al usuario la posibilidad de volver a la aplicación una vez finalizada la acción. Además, puedes especificar si deseas administrar el vínculo de acción de correo electrónico directamente en una aplicación para dispositivos móviles, en lugar de una página web, si es que la aplicación está instalada.

Esto puede ser extremadamente útil en las siguientes situaciones comunes:

  • Un usuario que no accedió a su cuenta puede estar intentando obtener contenido para el que debe acceder. Sin embargo, el usuario puede haber olvidado su contraseña y podría activar el flujo de restablecimiento de contraseña. Al final del flujo, el usuario espera volver a la sección de la app a la que estaba intentando acceder.

  • Una aplicación que ofrezca acceso solo a cuentas verificadas. Por ejemplo, es posible que el usuario deba verificar su correo electrónico antes de suscribirse a un boletín informativo mediante una app. El usuario pasaría por el flujo de verificación de su correo electrónico y esperaría volver a la app para completar su suscripción.

  • En general, cuando un usuario inicia un flujo de restablecimiento de contraseña o de verificación de correo electrónico en una app para Apple, espera completar el flujo en la app. Esto es posible gracias a la capacidad de pasar el estado a través de una URL de continuación.

Tener la capacidad de pasar el estado a través de una URL de continuación es una característica importante que Firebase Auth proporciona y que puede mejorar significativamente la experiencia del usuario.

Cómo pasar el estado de una URL de continuación en acciones de correo electrónico

Para pasar una URL de continuación de forma segura, el dominio de la URL debe estar incluido en la lista de elementos permitidos de Firebase console. Para ello, se debe agregar el dominio a la lista de Dominios autorizados de la pestaña Método de acceso en la sección Authentication, si aún no se ha hecho.

Se debe proporcionar una instancia de FIRActionCodeSettings cuando se envíe un correo electrónico de restablecimiento de contraseña o un mensaje de verificación. Esta interfaz toma los siguientes parámetros:

Swift

Parámetro Tipo Descripción
URL String

Establece el vínculo (estado/URL de continuación), que tiene significados diferentes según el contexto:

  • Cuando el vínculo se usa en los widgets de acción web, este es el vínculo directo en el parámetro de consulta continueUrl.
  • Cuando el vínculo se maneja directamente en la app, este es el parámetro de consulta continueUrl del vínculo directo en el vínculo de Hosting.
iOSBundleID String Establece el ID del paquete de iOS para ayudar a Firebase Authentication a determinar si debe crear un vínculo solo web o para dispositivos móviles que se abre en un dispositivo Apple.
androidPackageName String Establece el nombre del paquete de Android para ayudar a Firebase Authentication a determinar si debe crear un vínculo solo web o para dispositivos móviles que se abre en un dispositivo Android.
handleCodeInApp Bool Indica si el vínculo de acción de correo electrónico debe abrirse primero en una app para dispositivos móviles o en un vínculo web. El valor predeterminado es falso. Cuando se configura como verdadero, el vínculo del código de acción se enviará como vínculo universal o vínculo de app para Android y se abrirá si la app está instalada. Si el valor es falso, el código se enviará primero al widget web y luego se redireccionará a la app, si está instalada.
linkDomain String Cuando se definen dominios de vínculos de Hosting personalizados para un proyecto, especifica cuál usar cuando el vínculo se abra mediante una app para dispositivos móviles especificada. De lo contrario, el dominio predeterminado se selecciona automáticamente (por ejemplo, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain String Obsoleto. No especifiques este parámetro.

Objective-C

Parámetro Tipo Descripción
URL NSString

Establece el vínculo (estado/URL de continuación), que tiene significados diferentes según el contexto:

  • Cuando el vínculo se usa en los widgets de acción web, este es el vínculo directo en el parámetro de consulta continueUrl.
  • Cuando el vínculo se maneja directamente en la app, este es el parámetro de consulta continueUrl del vínculo directo en el vínculo de Hosting.
iOSBundleID NSString Establece el ID del paquete de iOS para ayudar a Firebase Authentication a determinar si debe crear un vínculo solo web o para dispositivos móviles que se abre en un dispositivo Android o Apple.
androidPackageName NSString Establece el nombre del paquete de Android para ayudar a Firebase Authentication a determinar si debe crear un vínculo solo web o para dispositivos móviles que se abre en un dispositivo Android o Apple.
handleCodeInApp BOOL Indica si el vínculo de acción de correo electrónico debe abrirse primero en una app para dispositivos móviles o en un vínculo web. El valor predeterminado es falso. Cuando se configura como verdadero, el vínculo del código de acción se enviará como vínculo universal o vínculo de app para Android y se abrirá si la app está instalada. Si el valor es falso, el código se enviará primero al widget web y luego se redireccionará a la app, si está instalada.
linkDomain NSString Cuando se definen dominios de vínculos de Hosting personalizados para un proyecto, especifica cuál usar cuando una app para dispositivos móviles determinada abra el vínculo. De lo contrario, el dominio predeterminado se selecciona automáticamente (por ejemplo, PROJECT_ID.firebaseapp.com).
dynamicLinkDomain NSString Obsoleto. No especifiques este parámetro.

En el siguiente ejemplo, se muestra cómo enviar un vínculo de verificación por correo electrónico que se abrirá primero en una app para dispositivos móviles con el dominio de vínculo personalizado de Hosting custom-domain.com. El vínculo directo incluirá la carga útil https://www.example.com/?email=user@example.com de la URL de continuación.

Swift

var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android")
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
actionCodeSettings.linkDomain = "custom-domain.com"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Objective-C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
 actionCodeSettings.linkDomain = @"custom-domain.com";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

Firebase Authentication usa Firebase Hosting cuando envía un vínculo que debe abrirse en una aplicación para dispositivos móviles. Para usar esta función, se deben configurar los vínculos de Hosting en Firebase console.

  1. Configura aplicaciones para Apple:

    1. Si planeas manejar estos vínculos desde tu aplicación, deberás configurar el dominio de vínculo de Hosting como un dominio asociado en las capacidades de tu aplicación.
    2. Para obtener más información al respecto, consulta las instrucciones para recibir vínculos de Hosting en iOS.
  2. Configuración de aplicaciones para Android:

    1. Si planeas manejar estos vínculos desde tu aplicación para Android, debes especificar el nombre del paquete de tu app en la configuración del proyecto de Firebase Firebase. Además, es necesario proporcionar el SHA-1 y el SHA-256 del certificado de aplicación.
    2. También deberás configurar el filtro de intents para el vínculo directo en el archivo AndroidManifest.xml.
    3. Para obtener más información al respecto, consulta las instrucciones para recibir vínculos de Hosting en Android.

Maneja acciones de correo electrónico en una aplicación web

Puedes especificar si deseas manejar el vínculo de código de acción desde una aplicación web primero y después redireccionar a otra página web o a una aplicación para dispositivos móviles cuando finalice el proceso, siempre y cuando esté disponible la aplicación para dispositivos móviles. Para ello, se debe configurar handleCodeInApp como false en el objeto FIRActionCodeSettings (Obj-C) o ActionCodeSettings (Swift). Aunque no es obligatorio ingresar un ID de paquete o un nombre de paquete de Android, proporcionarlos permitirá que el usuario se redireccione de vuelta a la app especificada cuando termine de procesarse el código de acción de correo electrónico.

La URL web que se usa aquí es la que se configuró en la sección de plantillas de acción de correo electrónico. Se aprovisiona una opción predeterminada para todos los proyectos. Consulta cómo crear controladores de acciones de correo electrónico personalizados para obtener más información sobre el tema.

En este caso, el vínculo que se encuentra dentro del parámetro de consulta continueURL será un vínculo de Hosting cuya carga útil es la URL que se especifica en el objeto ActionCodeSettings.

Cuando te encargues de las acciones de correo electrónico, como la verificación, el código de acción del parámetro de consulta oobCode debe analizarse desde el vínculo directo y, luego, aplicarse mediante applyActionCode para que el cambio surta efecto (es decir, para que se verifique la dirección de correo electrónico).

Administra acciones de correo electrónico en una aplicación para dispositivos móviles

Puedes especificar si deseas administrar el vínculo de código de acción primero desde tu aplicación para dispositivos móviles, siempre y cuando esté instalada. Si se hace clic en el vínculo desde un dispositivo móvil que no es compatible con la aplicación, se abrirá en una página web. Para ello, se debe configurar handleCodeInApp como true en el objeto FIRActionCodeSettings (Obj-C) o ActionCodeSettings (Swift). También deberás especificar el nombre del paquete de Android o el ID del paquete de la aplicación para dispositivos móviles. La URL web de resguardo que se usa aquí, cuando no hay una app para dispositivos móviles disponible, es la configurada en la sección de plantillas de acciones de correo electrónico. Se aprovisiona una opción predeterminada para todos los proyectos. Consulta cómo crear controladores de acciones de correo electrónico personalizados para obtener más información sobre el tema.

En este caso, el vínculo de la app para dispositivos móviles enviado al usuario será un vínculo de Hosting cuya carga útil es la URL del código de acción configurada en la consola, con los parámetros de consulta oobCode, mode, apiKey y continueUrl. Esta última será la URL original especificada en el objeto FIRActionCodeSettings (Obj-C) o ActionCodeSettings (Swift). El código de acción se puede aplicar directamente desde una aplicación para dispositivos móviles de manera similar a como se hace desde el flujo web descrito en la sección sobre cómo crear controladores de acciones de correo electrónico personalizados.

Cuando te encargues de las acciones de correo electrónico, como la verificación, el código de acción del parámetro de consulta oobCode debe analizarse desde el vínculo directo y, luego, aplicarse mediante applyActionCode para que el cambio surta efecto (es decir, para que se verifique la dirección de correo electrónico).