Generación de enlaces de acción de correo electrónico

Las aplicaciones móviles a veces necesitan interactuar con los usuarios y pedirles que realicen determinadas acciones mediante el envío de correos electrónicos.

Los SDK de Firebase Client brindan la posibilidad de enviar a los usuarios correos electrónicos que contienen enlaces que pueden usar para restablecer contraseñas, verificar direcciones de correo electrónico e iniciar sesión mediante correo electrónico. Estos correos electrónicos basados ​​en plantillas son enviados por Google y tienen una personalización limitada.

Si, en cambio, desea utilizar sus propias plantillas de correo electrónico y su propio servicio de entrega de correo electrónico, esta página explica cómo utilizar el SDK de administrador de Firebase para generar mediante programación los enlaces de acción para los flujos anteriores, que puede incluir en los correos electrónicos dirigidos a sus usuarios.

Esto viene con los siguientes beneficios:

  • Personaliza plantillas de correo electrónico. Esto incluye la capacidad de agregar nuevos estilos y marcas personalizadas, cambiar textos y logotipos, dirigirse a los usuarios por su nombre en lugar de su nombre completo, etc.
  • Aplicar diferentes plantillas según el contexto. Por ejemplo, si el usuario verifica su correo electrónico para suscribirse a un boletín informativo, es posible que sea necesario proporcionar el contexto en el contenido del correo electrónico. Otro ejemplo es el inicio de sesión mediante enlace de correo electrónico: en un escenario, esto puede ser activado por el mismo usuario o como una invitación de otro usuario. El contexto debería incluirse en el correo electrónico.
  • Localice plantillas de correo electrónico personalizadas.
  • Capacidad de generar el enlace desde un entorno de servidor seguro.
  • Posibilidad de personalizar cómo se abrirá el enlace, a través de una aplicación móvil o un navegador, y cómo pasar información de estado adicional, etc.
  • Capacidad para personalizar el dominio de enlace dinámico utilizado para los flujos de aplicaciones móviles al construir el enlace de acción de correo electrónico e incluso especificar un dominio de enlace dinámico diferente según el contexto o la aplicación móvil.

Inicializar la configuración del código de acción

Antes de poder generar un enlace de acción de correo electrónico, es posible que deba inicializar una instancia ActionCodeSettings .

ActionCodeSettings le permite pasar un estado adicional a través de una URL continua a la que se puede acceder después de que el usuario hace clic en el enlace del correo electrónico. Esto también brinda al usuario la posibilidad de volver a la aplicación una vez completada la acción. Además, puede especificar si desea manejar el enlace de acción del correo electrónico directamente desde una aplicación móvil cuando está instalada o desde un navegador.

Para los enlaces que deben abrirse a través de una aplicación móvil, deberá habilitar Firebase Dynamic Links y realizar algunas tareas para detectar estos enlaces desde su aplicación móvil. Consulte las instrucciones sobre cómo configurar Firebase Dynamic Links para acciones de correo electrónico.

Para inicializar una instancia ActionCodeSettings , proporcione los siguientes datos:

Parámetro Tipo Descripción
url cadena

Establece el enlace (estado/continuar URL) que tiene diferentes significados en diferentes contextos:

  • Cuando el enlace se maneja en los widgets de acción web, este es el enlace profundo en el parámetro de consulta continueUrl .
  • Cuando el vínculo se maneja directamente en la aplicación, este es el parámetro de consulta continueUrl en el vínculo profundo del vínculo dinámico.
iOS ({bundleId: cadena}|indefinido) Establece el ID del paquete. Esto intentará abrir el enlace en una aplicación de Apple si está instalada. La aplicación debe estar registrada en la Consola.
android ({nombre del paquete: cadena, aplicación de instalación: booleano|indefinido, versión mínima: cadena|indefinido}|indefinido) Establece el nombre del paquete de Android. Esto intentará abrir el enlace en una aplicación de Android si está instalada. Si se pasa installApp , especifica si se debe instalar la aplicación de Android si el dispositivo la admite y la aplicación aún no está instalada. Si este campo se proporciona sin un packageName , se genera un error que explica que el packageName debe proporcionarse junto con este campo. Si se especifica minimumVersion y se instala una versión anterior de la aplicación, se lleva al usuario a Play Store para actualizar la aplicación. La aplicación de Android debe estar registrada en la consola.
handleCodeInApp (booleano|indefinido) Si el enlace de acción del correo electrónico se abrirá primero en una aplicación móvil o en un enlace web. El valor predeterminado es falso. Cuando se establece en verdadero, el enlace del código de acción se enviará como un enlace universal o un enlace de aplicación de Android y la aplicación lo abrirá si está instalada. En el caso falso, el código se enviará primero al widget web y luego, al continuar, se redireccionará a la aplicación si está instalada.
dynamicLinkDomain (cadena|indefinido) Establece el dominio (o subdominio) del enlace dinámico que se utilizará para el enlace actual si se va a abrir mediante Firebase Dynamic Links. Como se pueden configurar varios dominios de vínculos dinámicos por proyecto, este campo brinda la posibilidad de elegir uno explícitamente. Si no se proporciona ninguno, se utiliza el dominio más antiguo de forma predeterminada.

El siguiente ejemplo ilustra cómo enviar un enlace de verificación por correo electrónico que se abrirá primero en una aplicación móvil como un enlace dinámico de Firebase (aplicación de Apple com.example.ios o aplicación de Android com.example.android donde la aplicación se instalará si aún no está instalada y la versión mínima es 12). El enlace profundo contendrá la carga útil de la URL de continuación https://www.example.com/checkout?cartId=1234 . El dominio de enlace dinámico utilizado es coolapp.page.link , que debe configurarse para usarse con Firebase Dynamic Links.

Nodo.js

const actionCodeSettings = {
  // URL you want to redirect back to. The domain (www.example.com) for
  // this URL must be whitelisted in the Firebase Console.
  url: 'https://www.example.com/checkout?cartId=1234',
  // This must be true for email link sign-in.
  handleCodeInApp: true,
  iOS: {
    bundleId: 'com.example.ios',
  },
  android: {
    packageName: 'com.example.android',
    installApp: true,
    minimumVersion: '12',
  },
  // FDL custom domain.
  dynamicLinkDomain: 'coolapp.page.link',
};

Java

ActionCodeSettings actionCodeSettings = ActionCodeSettings.builder()
    .setUrl("https://www.example.com/checkout?cartId=1234")
    .setHandleCodeInApp(true)
    .setIosBundleId("com.example.ios")
    .setAndroidPackageName("com.example.android")
    .setAndroidInstallApp(true)
    .setAndroidMinimumVersion("12")
    .setDynamicLinkDomain("coolapp.page.link")
    .build();

Pitón

action_code_settings = auth.ActionCodeSettings(
    url='https://www.example.com/checkout?cartId=1234',
    handle_code_in_app=True,
    ios_bundle_id='com.example.ios',
    android_package_name='com.example.android',
    android_install_app=True,
    android_minimum_version='12',
    dynamic_link_domain='coolapp.page.link',
)

Ir

actionCodeSettings := &auth.ActionCodeSettings{
	URL:                   "https://www.example.com/checkout?cartId=1234",
	HandleCodeInApp:       true,
	IOSBundleID:           "com.example.ios",
	AndroidPackageName:    "com.example.android",
	AndroidInstallApp:     true,
	AndroidMinimumVersion: "12",
	DynamicLinkDomain:     "coolapp.page.link",
}

C#

var actionCodeSettings = new ActionCodeSettings()
{
    Url = "https://www.example.com/checkout?cartId=1234",
    HandleCodeInApp = true,
    IosBundleId = "com.example.ios",
    AndroidPackageName = "com.example.android",
    AndroidInstallApp = true,
    AndroidMinimumVersion = "12",
    DynamicLinkDomain = "coolapp.page.link",
};

Para obtener más información, consulte Pasar estado en acciones de correo electrónico .

Para generar un enlace de restablecimiento de contraseña, proporcione el correo electrónico del usuario existente y un objeto ActionCodeSettings opcional. La operación se resolverá con el enlace de acción del correo electrónico. El correo electrónico utilizado debe pertenecer a un usuario existente.

Nodo.js

// Admin SDK API to generate the password reset link.
const userEmail = 'user@example.com';
getAuth()
  .generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(userEmail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

Java

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generatePasswordResetLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Pitón

email = 'user@example.com'
link = auth.generate_password_reset_link(email, action_code_settings)
# Construct password reset email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

Ir

email := "user@example.com"
link, err := client.PasswordResetLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct password reset template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

C#

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GeneratePasswordResetLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

Una vez generado el enlace, se puede insertar en el correo electrónico de restablecimiento de contraseña personalizado y luego enviarlo por correo electrónico al usuario correspondiente mediante un servidor SMTP personalizado.

Si no está utilizando la página de inicio de restablecimiento de contraseña predeterminada y no está creando su propio controlador personalizado, consulte creación de controladores de acciones de correo electrónico personalizados .

Para generar un enlace de verificación de correo electrónico, proporcione el correo electrónico no verificado del usuario existente y un objeto ActionCodeSettings opcional. La operación se resolverá con el enlace de acción del correo electrónico. El correo electrónico utilizado debe pertenecer a un usuario existente.

Nodo.js

// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
getAuth()
  .generateEmailVerificationLink(useremail, actionCodeSettings)
  .then((link) => {
    // Construct email verification template, embed the link and send
    // using custom SMTP server.
    return sendCustomVerificationEmail(useremail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

Java

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generateEmailVerificationLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Pitón

email = 'user@example.com'
link = auth.generate_email_verification_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

Ir

email := "user@example.com"
link, err := client.EmailVerificationLinkWithSettings(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct email verification template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

C#

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateEmailVerificationLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

Una vez generado el enlace, se puede insertar en el correo electrónico de verificación personalizado y luego enviarlo por correo electrónico al usuario correspondiente mediante un servidor SMTP personalizado.

Si no está utilizando la página de inicio de verificación de correo electrónico predeterminada y no está creando su propio controlador personalizado, consulte creación de controladores de acciones de correo electrónico personalizados .

Antes de poder autenticar a los usuarios con el inicio de sesión mediante enlace de correo electrónico, deberá habilitar el inicio de sesión mediante enlace de correo electrónico para su proyecto de Firebase.

Para generar un enlace de inicio de sesión, proporcione el correo electrónico del usuario y un objeto ActionCodeSettings . En este caso, se requiere el objeto ActionCodeSettings para proporcionar información sobre dónde devolver al usuario después de hacer clic en el enlace para completar el inicio de sesión. La operación se resolverá con el enlace de acción del correo electrónico.

A diferencia del restablecimiento de contraseña y la verificación de correo electrónico, el correo electrónico utilizado no necesariamente debe pertenecer a un usuario existente, ya que esta operación se puede utilizar para registrar nuevos usuarios en su aplicación a través de un enlace de correo electrónico.

Nodo.js

// Admin SDK API to generate the sign in with email link.
const useremail = 'user@example.com';
getAuth()
  .generateSignInWithEmailLink(useremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(useremail, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

Java

String email = "user@example.com";
try {
  String link = FirebaseAuth.getInstance().generateSignInWithEmailLink(
      email, actionCodeSettings);
  // Construct email verification template, embed the link and send
  // using custom SMTP server.
  sendCustomEmail(email, displayName, link);
} catch (FirebaseAuthException e) {
  System.out.println("Error generating email link: " + e.getMessage());
}

Pitón

email = 'user@example.com'
link = auth.generate_sign_in_with_email_link(email, action_code_settings)
# Construct email from a template embedding the link, and send
# using a custom SMTP server.
send_custom_email(email, link)

Ir

email := "user@example.com"
link, err := client.EmailSignInLink(ctx, email, actionCodeSettings)
if err != nil {
	log.Fatalf("error generating email link: %v\n", err)
}

// Construct sign-in with email link template, embed the link and send
// using custom SMTP server.
sendCustomEmail(email, displayName, link)

C#

var email = "user@example.com";
var link = await FirebaseAuth.DefaultInstance.GenerateSignInWithEmailLinkAsync(
    email, actionCodeSettings);
// Construct email verification template, embed the link and send
// using custom SMTP server.
SendCustomEmail(email, displayName, link);

Una vez generado el enlace, se puede insertar en el correo electrónico de inicio de sesión personalizado y luego enviarlo por correo electrónico al usuario correspondiente mediante un servidor SMTP personalizado.

Obtenga más información sobre cómo autenticar usuarios con Firebase mediante enlaces de correo electrónico . Esto ayudará a proporcionar información sobre cómo completar el inicio de sesión después de que el usuario haga clic en el enlace y sea redirigido nuevamente a la aplicación.