Generazione di link di azione e-mail

A volte le app mobili devono interagire con gli utenti e chiedere loro di eseguire determinate azioni inviando e-mail.

Gli SDK client Firebase offrono la possibilità di inviare agli utenti e-mail contenenti collegamenti che possono utilizzare per la reimpostazione della password, la verifica dell'indirizzo e-mail e l'accesso basato su e-mail. Queste email basate su modelli vengono inviate da Google e hanno una personalizzazione limitata.

Se desideri invece utilizzare i tuoi modelli di posta elettronica e il tuo servizio di recapito della posta elettronica, questa pagina spiega come utilizzare Firebase Admin SDK per generare a livello di codice i collegamenti di azione per i flussi di cui sopra, che puoi includere nelle email ai tuoi utenti.

Ciò comporta i seguenti vantaggi:

  • Personalizza i modelli di posta elettronica. Ciò include la possibilità di aggiungere nuovi stili e marchi personalizzati, modificare parole e loghi, rivolgersi agli utenti per nome anziché per nome completo e così via.
  • Applica modelli diversi a seconda del contesto. Ad esempio, se l'utente sta verificando la propria email per iscriversi a una newsletter, potrebbe essere necessario fornire il contesto nel contenuto dell'email. Un altro esempio è l'accesso tramite collegamento e-mail: in uno scenario questo può essere attivato dallo stesso utente o come invito da un altro utente. Il contesto dovrebbe essere incluso nell'e-mail.
  • Localizza modelli di email personalizzati.
  • Possibilità di generare il collegamento da un ambiente server sicuro.
  • Possibilità di personalizzare il modo in cui il collegamento deve essere aperto, tramite un'app mobile o un browser, e come trasmettere ulteriori informazioni sullo stato, ecc.
  • Possibilità di personalizzare il dominio di collegamento dinamico utilizzato per i flussi di app mobili durante la creazione del collegamento di azione e-mail e persino di specificare un dominio di collegamento dinamico diverso a seconda del contesto o dell'app mobile.

Inizializza ActionCodeSettings

Prima di poter generare un collegamento di azione e-mail, potrebbe essere necessario inizializzare un'istanza ActionCodeSettings .

ActionCodeSettings ti consente di passare uno stato aggiuntivo tramite un URL di continuazione accessibile dopo che l'utente ha fatto clic sul collegamento e-mail. Ciò fornisce inoltre all'utente la possibilità di tornare all'app una volta completata l'azione. Inoltre, è possibile specificare se gestire il collegamento all'azione e-mail direttamente da un'applicazione mobile quando è installata o da un browser.

Per i collegamenti destinati ad essere aperti tramite un'app mobile, dovrai abilitare Firebase Dynamic Links ed eseguire alcune attività per rilevare questi collegamenti dalla tua app mobile. Fare riferimento alle istruzioni su come configurare Firebase Dynamic Links per le azioni e-mail.

Per inizializzare un'istanza ActionCodeSettings , fornisci i seguenti dati:

Parametro Tipo Descrizione
url corda

Imposta il collegamento (URL di stato/continua) che ha significati diversi in contesti diversi:

  • Quando il collegamento viene gestito nei widget delle azioni Web, questo è il collegamento diretto nel parametro di query continueUrl .
  • Quando il collegamento viene gestito direttamente nell'app, questo è il parametro di query continueUrl nel collegamento diretto del collegamento dinamico.
iOS ({bundleId: stringa}|non definito) Imposta l'ID del pacchetto. Questo tenterà di aprire il collegamento in un'app Apple, se installata. L'app deve essere registrata nella Console.
android ({nomepacchetto: stringa, installApp:boolean|undefinito, versione minima: stringa|undefinito}|undefinito) Imposta il nome del pacchetto Android. Questo tenterà di aprire il collegamento in un'app Android, se installata. Se viene passato installApp , specifica se installare l'app Android se il dispositivo la supporta e l'app non è già installata. Se questo campo viene fornito senza packageName , viene generato un errore che spiega che packageName deve essere fornito insieme a questo campo. Se viene specificato minimumVersion ed è installata una versione precedente dell'app, l'utente viene indirizzato al Play Store per aggiornare l'app. L'app Android deve essere registrata nella Console.
handleCodeInApp (booleano|non definito) Indica se il collegamento all'azione e-mail verrà aperto prima in un'app mobile o in un collegamento Web. L'impostazione predefinita è falsa. Se impostato su true, il collegamento al codice dell'azione verrà inviato come collegamento universale o collegamento all'app Android e verrà aperto dall'app, se installata. Nel caso falso, il codice verrà prima inviato al widget Web e poi continuando verrà reindirizzato all'app se installata.
dynamicLinkDomain (stringa|non definito) Imposta il dominio del collegamento dinamico (o sottodominio) da utilizzare per il collegamento corrente se deve essere aperto utilizzando Firebase Dynamic Links. Poiché è possibile configurare più domini di collegamento dinamico per progetto, questo campo offre la possibilità di sceglierne esplicitamente uno. Se non ne viene fornito alcuno, per impostazione predefinita viene utilizzato il dominio più vecchio.

L'esempio seguente illustra come inviare un collegamento di verifica e-mail che verrà aperto prima in un'app mobile come collegamento dinamico Firebase (app Apple com.example.ios o app Android com.example.android dove verrà installata l'app se non è già installata e la versione minima è 12). Il collegamento diretto conterrà il payload dell'URL di continuazione https://www.example.com/checkout?cartId=1234 . Il dominio del collegamento dinamico utilizzato è coolapp.page.link , che deve essere configurato per l'utilizzo con Firebase Dynamic Links.

Node.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',
};

Giava

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();

Pitone

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',
)

Andare

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",
};

Per ulteriori informazioni, consulta Passaggio dello stato nelle azioni e-mail .

Per generare un collegamento per la reimpostazione della password, fornire l'e-mail dell'utente esistente e un oggetto ActionCodeSettings facoltativo. L'operazione si risolverà con il collegamento all'azione e-mail. L'e-mail utilizzata deve appartenere a un utente esistente.

Node.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.
  });

Giava

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());
}

Pitone

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)

Andare

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 volta generato, il collegamento può essere inserito nell'e-mail personalizzata di reimpostazione della password e quindi inviato via e-mail all'utente corrispondente utilizzando un server SMTP personalizzato.

Se non stai utilizzando la pagina di destinazione predefinita per la reimpostazione della password e non stai creando il tuo gestore personalizzato, consulta Creazione di gestori di azioni e-mail personalizzati .

Per generare un collegamento di verifica email, fornisci l'email non verificata dell'utente esistente e un oggetto ActionCodeSettings facoltativo. L'operazione si risolverà con il collegamento all'azione e-mail. L'e-mail utilizzata deve appartenere a un utente esistente.

Node.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.
  });

Giava

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());
}

Pitone

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)

Andare

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 volta generato, il collegamento può essere inserito nell'e-mail di verifica personalizzata e quindi inviato via e-mail all'utente corrispondente utilizzando un server SMTP personalizzato.

Se non stai utilizzando la pagina di destinazione predefinita per la verifica dell'e-mail e non stai creando il tuo gestore personalizzato, consulta Creazione di gestori di azioni e-mail personalizzati .

Prima di poter autenticare gli utenti con l'accesso tramite collegamento e-mail, dovrai abilitare l'accesso tramite collegamento e-mail per il tuo progetto Firebase.

Per generare un collegamento di accesso, fornire l'e-mail dell'utente e un oggetto ActionCodeSettings . In questo caso l'oggetto ActionCodeSettings è necessario per fornire informazioni su dove restituire l'utente dopo aver fatto clic sul collegamento per il completamento dell'accesso. L'operazione si risolverà con il collegamento all'azione e-mail.

A differenza della reimpostazione della password e della verifica e-mail, l'e-mail utilizzata non deve necessariamente appartenere a un utente esistente, poiché questa operazione può essere utilizzata per iscrivere nuovi utenti alla tua app tramite collegamento e-mail.

Node.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.
  });

Giava

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());
}

Pitone

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)

Andare

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 volta generato, il collegamento può essere inserito nell'e-mail di accesso personalizzata e quindi inviato tramite e-mail all'utente corrispondente utilizzando un server SMTP personalizzato.

Ulteriori informazioni sull'autenticazione degli utenti con Firebase utilizzando i collegamenti email . Ciò consentirà di fornire informazioni su come completare l'accesso dopo che l'utente ha fatto clic sul collegamento e viene reindirizzato all'app.