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

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

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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

Los SDK de Firebase Client brindan la capacidad 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 por correo electrónico. Estos correos electrónicos basados ​​en plantillas son enviados por Google y tienen una personalización limitada.

Si prefiere usar sus propias plantillas de correo electrónico y su propio servicio de entrega de correo electrónico, esta página explica cómo usar 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 a sus usuarios.

Esto viene con los siguientes beneficios:

  • Personalice las plantillas de correo electrónico. Esto incluye la capacidad de agregar nuevos estilos y marcas personalizadas, cambiar la redacción y los logotipos, dirigirse a los usuarios por su nombre en lugar de por su nombre completo, etc.
  • Aplicar diferentes plantillas según el contexto. Por ejemplo, si el usuario está verificando su correo electrónico para suscribirse a un boletín informativo, es posible que se deba proporcionar el contexto en el contenido del correo electrónico. Otro ejemplo es el inicio de sesión con 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 tendría que ser incluido en el correo electrónico.
  • Localice plantillas de correo electrónico personalizadas.
  • Capacidad para 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 configuración de código de acción

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

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

Para los enlaces destinados a 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 de ActionCodeSettings , proporcione los siguientes datos:

Parámetro Escribe Descripción
url cuerda

Establece el enlace (indicar/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 enlace se maneja directamente en la aplicación, este es el parámetro de consulta continueUrl en el enlace profundo del enlace 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 ({packageName: cadena, installApp: 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 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 nombre de packageName , se genera un error que explica que el nombre del packageName se debe proporcionar junto con este campo. Si se especifica la versión 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 de 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 redirigirá a la aplicación, si está instalada.
dynamicLinkDomain (cadena|indefinido) Establece el dominio de enlace dinámico (o subdominio) que se usará para el enlace actual si se va a abrir con Firebase Dynamic Links. Como se pueden configurar varios dominios de vínculos dinámicos por proyecto, este campo ofrece la posibilidad de elegir uno de forma explícita. 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 de correo electrónico que se abrirá primero en una aplicación móvil como Firebase Dynamic Link (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 su uso 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',
)

Vamos

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 Estado de aprobación 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)

Vamos

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 que se genera el enlace, puede insertarse en el correo electrónico de restablecimiento de contraseña personalizado y luego enviarse 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 está creando su propio controlador personalizado, consulte la creación de controladores de acción 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)

Vamos

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 que se genera 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 utiliza la página de inicio de verificación de correo electrónico predeterminada y crea su propio controlador personalizado, consulte la creación de controladores de acción de correo electrónico personalizados .

Antes de que pueda autenticar a los usuarios con el inicio de sesión mediante vínculo de correo electrónico, deberá habilitar el inicio de sesión mediante vínculo de correo electrónico para su proyecto de Firebase.

Para generar un vínculo 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 usar 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)

Vamos

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 que se genera 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.

Obtén más información sobre la autenticación de usuarios con Firebase mediante vínculos 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 a la aplicación.