Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Generazione di link di azione e-mail

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Le app mobili a volte devono interagire con gli utenti e richiedere loro di eseguire determinate azioni inviando e-mail.

Gli SDK del client Firebase offrono la possibilità di inviare agli utenti e-mail contenenti collegamenti che possono utilizzare per reimpostare la password, verificare l'indirizzo e-mail e accedere tramite e-mail. Queste email basate su modelli vengono inviate da Google e hanno una personalizzazione limitata.

Se desideri invece utilizzare i tuoi modelli e-mail e il tuo servizio di consegna e-mail, questa pagina spiega come utilizzare Firebase Admin SDK per generare in modo programmatico i collegamenti alle azioni per i flussi di cui sopra, che puoi includere nelle e-mail ai tuoi utenti.

Ciò comporta i seguenti vantaggi:

  • Personalizza i modelli di email. Ciò include la possibilità di aggiungere nuovi stili e marchi personalizzati, modificare testi e loghi, rivolgersi agli utenti per nome anziché per nome completo e così via.
  • Applicare modelli diversi a seconda del contesto. Ad esempio, se l'utente sta verificando la propria e-mail per iscriversi a una newsletter, potrebbe essere necessario fornire il contesto nel contenuto dell'e-mail. Un altro esempio è l'accesso tramite collegamento e-mail: in uno scenario può essere attivato dallo stesso utente o come invito da parte di 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 la modalità di apertura del collegamento, 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 continua accessibile dopo che l'utente ha fatto clic sul collegamento e-mail. Ciò fornisce anche all'utente la possibilità di tornare all'app dopo che l'azione è stata completata. Inoltre, puoi specificare se gestire il collegamento all'azione e-mail direttamente da un'applicazione mobile quando è installata o da un browser.

Per i collegamenti che devono 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 (stato/continua URL) che ha significati diversi in diversi contesti:

  • 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 pacchetto. Questo proverà ad aprire il collegamento in un'app Apple se è installata. L'app deve essere registrata nella Console.
android ({nomepacchetto: stringa, installApp:booleano|non definito, versione minima: stringa|non definito}|non definito) Imposta il nome del pacchetto Android. Questo proverà ad aprire il collegamento in un'app Android se è installata. Se installApp viene passato, specifica se installare l'app Android se il dispositivo la supporta e l'app non è già installata. Se questo campo viene fornito senza un packageName , viene generato un errore che spiega che il packageName deve essere fornito insieme a questo campo. Se viene specificata la versione 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) 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 del codice azione verrà inviato come collegamento universale o collegamento all'app Android e verrà aperto dall'app se installata. Nel caso falso, il codice verrà inviato prima al widget web e poi su continue reindirizzerà all'app se installata.
dynamicLinkDomain (stringa|non definito) Imposta il dominio (o sottodominio) del collegamento dinamico da utilizzare per il collegamento corrente se deve essere aperto utilizzando Firebase Dynamic Links. Poiché è possibile configurare più domini a collegamento dinamico per progetto, questo campo offre la possibilità di sceglierne uno in modo esplicito. Se non ne viene fornito nessuno, 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 l'app verrà installata se non è già installata e la versione minima è 12). Il link diretto conterrà il payload dell'URL continua https://www.example.com/checkout?cartId=1234 . Il dominio di collegamento dinamico utilizzato è coolapp.page.link , che deve essere configurato per l'uso 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 Stato di passaggio in 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);

Dopo che il collegamento è stato generato, può essere inserito nell'e-mail di reimpostazione della password personalizzata e quindi inviato tramite e-mail all'utente corrispondente utilizzando un server SMTP personalizzato.

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

Per generare un collegamento di verifica e-mail, fornisci l'e-mail 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);

Dopo che il collegamento è stato generato, può essere inserito nell'e-mail di verifica personalizzata e quindi inviato tramite e-mail all'utente corrispondente utilizzando un server SMTP personalizzato.

Se non stai utilizzando la pagina di destinazione della verifica e-mail predefinita 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, fornisci l'e-mail dell'utente e un oggetto ActionCodeSettings . L'oggetto ActionCodeSettings è necessario in questo caso 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 registrare nuovi utenti nella 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);

Dopo che il collegamento è stato generato, 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 e-mail . Ciò consentirà di fornire informazioni su come completare l'accesso dopo che l'utente ha fatto clic sul collegamento ed è stato reindirizzato all'app.