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.
Pasa estados o URLs 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 |
Cadena | Establece el vínculo (estado/URL de continuación), que tiene significados diferentes según el contexto:
|
iOSBundleID |
Cadena | Establece el ID del paquete. Con esto, se intentará abrir el vínculo en una app para Android si está instalada. La app debe estar registrada en Firebase console. Si no se proporciona un ID de paquete, el valor de este campo se establece en el ID del paquete principal de la aplicación. |
androidPackageName |
Cadena | Establece el nombre del paquete de Android. Este parámetro intentará abrir el vínculo en una app para Android, si está instalada. |
androidInstallIfNotAvailable |
Bool | Especifica si se debe instalar la app para Android en caso de ser compatible con el dispositivo y de que aún no esté instalada. Si se proporciona este campo sin un packageName, se genera un error que indica que se debe proporcionar el packageName con este campo. |
androidMinimumVersion |
Cadena | La versión mínima de la app compatible con este flujo. Si se especifica minimumVersion y hay una versión anterior de la app instalada, se dirigirá al usuario a Play Store para que actualice la app. La app para Android debe estar registrada en Console. |
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. |
dynamicLinkDomain |
Cadena | Establece el dominio (o subdominio) del vínculo dinámico actual en caso de que se deba abrir con Firebase Dynamic Links. Dado que se pueden configurar múltiples dominios de vínculos dinámicos por proyecto, este campo brinda la posibilidad de elegir uno de forma explícita. Si no se proporciona ninguno, se usa el primer dominio según la configuración predeterminada. |
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:
|
iOSBundleID |
NSString | Establece el ID del paquete. Con esto, se intentará abrir el vínculo en una app para Android si está instalada. La app debe estar registrada en Firebase console. |
androidPackageName |
NSString | Establece el nombre del paquete de Android. Este parámetro intentará abrir el vínculo en una app para Android, si está instalada. |
androidInstallIfNotAvailable |
BOOL | Especifica si se debe instalar la app para Android en caso de ser compatible con el dispositivo y de que aún no esté instalada. Si se proporciona este campo sin un packageName, se genera un error que indica que se debe proporcionar el packageName con este campo. |
androidMinimumVersion |
NSString | La versión mínima de la app compatible con este flujo. Si se especifica minimumVersion y hay una versión anterior de la app instalada, se dirigirá al usuario a Play Store para que actualice la app. La app para Android debe estar registrada en Console. |
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. |
dynamicLinkDomain |
NSString | Establece el dominio (o subdominio) del vínculo dinámico actual en caso de que se deba abrir con Firebase Dynamic Links. Dado que se pueden configurar múltiples dominios de vínculos dinámicos por proyecto, este campo brinda la posibilidad de elegir uno de forma explícita. Si no se proporciona ninguno, se usa el primer dominio según la configuración predeterminada. |
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 como un Firebase Dynamic Link con el dominio de vínculo dinámico
personalizado example.page.link
(app para iOS com.example.ios
o app para Android com.example.android
, que se instalará
si aún no está en el dispositivo y la versión mínima es 12
). 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", installIfNotAvailable:true, minimumVersion:"12") // When multiple custom dynamic link domains are defined, specify which one to use. actionCodeSettings.dynamicLinkDomain = "example.page.link" 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; // When multiple custom dynamic link domains are defined, specify which one to use. actionCodeSettings.dynamicLinkDomain = @"example.page.link"; [actionCodeSettings setAndroidPackageName:@"com.example.android" installIfNotAvailable:YES minimumVersion:'12']; [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { if (error) { // Error occurred. Inspect error.code and handle error. return; } // Email verification sent. }];
Configura Firebase Dynamic Links
Firebase Auth utiliza Firebase Dynamic Links cuando envía un vínculo que debe abrirse en una aplicación para dispositivos móviles. Para poder usar esta función, se debe configurar Dynamic Links en Firebase console.
Para habilitar Firebase Dynamic Links, sigue estos pasos:
- En Firebase console , abre la sección Dynamic Links.
-
Si aún no aceptaste los términos de Dynamic Links ni creaste un dominio de Dynamic Links, hazlo ahora.
Si ya creaste un dominio de Dynamic Links, anótalo. Los dominios de Dynamic Links suelen ser como el siguiente ejemplo:
example.page.link
Necesitarás este valor cuando configures la app para Apple o Android para interceptar el vínculo entrante.
Configuración de aplicaciones para Android:
- Si planeas usar estos vínculos desde la aplicación para Android, es necesario especificar el nombre del paquete de Android en la configuración del proyecto de Firebase console. Además, es necesario proporcionar el SHA-1 y el SHA-256 del certificado de la aplicación.
- También deberás configurar el filtro de intents para el vínculo directo en el archivo AndroidManifest.xml.
- Para obtener más información al respecto, consulta las instrucciones para recibir Dynamic Links en Android.
Configura aplicaciones para Apple:
- Si planeas manejar estos vínculos desde tu aplicación, debes especificar el ID del paquete en la configuración del proyecto de Firebase console. Además, es necesario especificar el ID de App Store y el ID del equipo de desarrolladores de Apple.
- También tendrás que configurar el dominio del vínculo universal FDL como un dominio asociado en las capacidades de tu aplicación.
- Si planeas distribuir la aplicación para iOS 8 o versiones previas, deberás configurar el ID del paquete como un esquema personalizado para las URLs entrantes.
- Para obtener más información al respecto, consulta las instrucciones para recibir Dynamic Links en las plataformas de Apple.
Maneja acciones de correo electrónico en una aplicación web
Puedes especificar si deseas usar 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 la aplicación para dispositivos móviles esté disponible.
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 FDL cuya carga útil es la URL
que se especifica en el objeto ActionCodeSettings
. Si bien puedes interceptar el vínculo entrante y administrarlo desde tu app sin ninguna
dependencia adicional, te recomendamos utilizar la biblioteca cliente FDL para
analizar el vínculo directo.
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. En el caso de las aplicaciones para Android, también puedes usar androidInstallIfNotAvailable
para especificar que la app debe instalarse si es compatible con el dispositivo y aún no 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 Personaliza controladores de correo electrónico 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 FDL 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). Si bien puedes interceptar el vínculo entrante y manejarlo desde tu app sin ninguna dependencia adicional, te recomendamos utilizar la biblioteca cliente FDL para analizar el vínculo directo. El código de acción se puede aplicar directamente desde una aplicación para dispositivos móviles de manera similar a cómo se controla desde el flujo web descrito en la sección Crea 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).