E-Mail-Aktions-Links generieren

Manchmal müssen mobile Apps mit Nutzern interagieren und sie durch das Senden von E-Mails zu bestimmten Aktionen auffordern.

Mit den Firebase-Client-SDKs können Sie Nutzern E-Mails mit Links zum Zurücksetzen von Passwörtern, zur Bestätigung der E-Mail-Adresse und zur Anmeldung per E-Mail senden. Diese E-Mails werden von Google gesendet und können nur beschränkt angepasst werden.

Wenn Sie stattdessen Ihre eigenen E-Mail-Vorlagen und Ihren eigenen E-Mail-Auslieferungsdienst verwenden möchten, wird auf dieser Seite erläutert, wie Sie mit dem Firebase Admin SDK die Aktionslinks für die oben genannten Abläufe programmatisch generieren und in E-Mails an Ihre Nutzer einfügen können.

Das bietet folgende Vorteile:

  • E-Mail-Vorlagen anpassen Dazu gehören beispielsweise die Möglichkeit, neue Stile und benutzerdefiniertes Branding hinzuzufügen, Formulierungen und Logos zu ändern oder Nutzer mit Vornamen statt mit vollem Namen anzusprechen.
  • Je nach Kontext unterschiedliche Vorlagen anwenden. Wenn der Nutzer beispielsweise seine E-Mail-Adresse bestätigt, um einen Newsletter zu abonnieren, muss der Kontext möglicherweise im E-Mail-Inhalt angegeben werden. Ein weiteres Beispiel ist die Anmeldung über einen E-Mail-Link: In einem Szenario kann dies vom Nutzer selbst oder als Einladung durch einen anderen Nutzer ausgelöst werden. Der Kontext muss in der E-Mail enthalten sein.
  • Benutzerdefinierte E-Mail-Vorlagen lokalisieren
  • Möglichkeit, den Link aus einer sicheren Serverumgebung zu generieren.
  • Möglichkeit, die Öffnung des Links über eine mobile App oder einen Browser anzupassen und zusätzliche Statusinformationen zu übergeben
  • Sie können die Domain des dynamischen Links anpassen, die für die Aufrufabfolgen in mobilen Apps verwendet wird, wenn Sie den E-Mail-Aktionslink erstellen. Sie können sogar je nach Kontext oder mobiler App eine andere Domain für den dynamischen Link angeben.

ActionCodeSettings initialisieren

Bevor Sie einen E-Mail-Aktionslink generieren können, müssen Sie möglicherweise eine ActionCodeSettings-Instanz initialisieren.

ActionCodeSettings ermöglicht es, zusätzlichen Status über eine Weiterleitungs-URL zu übergeben, die aufgerufen werden kann, nachdem der Nutzer auf den E-Mail-Link geklickt hat. So können Nutzer nach Abschluss der Aktion auch wieder zur App zurückkehren. Außerdem können Sie angeben, ob der Link für E-Mail-Aktionen direkt über eine installierte mobile Anwendung oder über einen Browser verarbeitet werden soll.

Wenn Links über eine mobile App geöffnet werden sollen, müssen Sie Firebase Dynamic Links aktivieren und einige Aufgaben ausführen, um diese Links in Ihrer mobilen App zu erkennen. Folgen Sie der Anleitung zum Konfigurieren von Firebase Dynamic Links für E-Mail-Aktionen.

Geben Sie die folgenden Daten an, um eine ActionCodeSettings-Instanz zu initialisieren:

Parameter Typ Beschreibung
url String

Hiermit wird der Link (Status-/Fortsetzungs-URL) festgelegt, der in verschiedenen Kontexten unterschiedliche Bedeutungen hat:

  • Wenn der Link in den Web-Aktions-Widgets verarbeitet wird, ist dies der Deeplink im Abfrageparameter continueUrl.
  • Wenn der Link direkt in der App verarbeitet wird, ist dies der continueUrl-Abfrageparameter im Deeplink des dynamischen Links.
iOS ({bundleId: string}|undefined) Legt die Set-ID fest. Dadurch wird versucht, den Link in einer Apple-App zu öffnen, sofern diese installiert ist. Die App muss in der Console registriert sein.
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) Legt den Android-Paketnamen fest. Dadurch wird versucht, den Link in einer Android-App zu öffnen, sofern diese installiert ist. Wenn installApp übergeben wird, wird angegeben, ob die Android-App installiert werden soll, wenn das Gerät sie unterstützt und sie noch nicht installiert ist. Wenn dieses Feld ohne packageName angegeben wird, wird ein Fehler ausgegeben, in dem erklärt wird, dass packageName in Verbindung mit diesem Feld angegeben werden muss. Wenn minimumVersion angegeben ist und eine ältere Version der App installiert ist, wird der Nutzer zum Play Store weitergeleitet, um die App zu aktualisieren. Die Android-App muss in der Console registriert sein.
handleCodeInApp (boolean|undefined) Ob der Link für die E-Mail-Aktion zuerst in einer mobilen App oder über einen Weblink geöffnet werden soll. Der Standardwert ist "false". Wenn dieser Wert auf „true“ gesetzt ist, wird der Link zum Aktionscode als universeller Link oder Android-App-Link gesendet und von der App geöffnet, sofern sie installiert ist. Andernfalls wird der Code zuerst an das Web-Widget gesendet und dann bei „Continue“ (Weiter) zur App weitergeleitet, falls installiert.
dynamicLinkDomain (string|undefined) Hiermit wird die Dynamic Link-Domain (oder ‑Subdomain) festgelegt, die für den aktuellen Link verwendet werden soll, wenn er mit Firebase Dynamic Links geöffnet werden soll. Da pro Projekt mehrere dynamische Link-Domains konfiguriert werden können, können Sie in diesem Feld eine davon explizit auswählen. Wenn keine angegeben ist, wird standardmäßig die älteste Domain verwendet.

Im folgenden Beispiel wird gezeigt, wie Sie einen E-Mail-Bestätigungslink senden, der zuerst in einer mobilen App als Firebase-Dynamisch-Link geöffnet wird (Apple-App com.example.ios oder Android-App com.example.android, bei der die App installiert wird, falls noch nicht geschehen, und die Mindestversion 12 ist). Der Deeplink enthält die Nutzlast der Weiterleitungs-URLhttps://www.example.com/checkout?cartId=1234. Die verwendete Dynamic Link-Domain ist coolapp.page.link. Sie muss für die Verwendung mit Firebase Dynamic Links konfiguriert werden.

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

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

Python

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

Go

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

Weitere Informationen finden Sie unter Status in E-Mail-Aktionen übergeben.

Geben Sie zum Generieren eines Links zum Zurücksetzen des Passworts die E-Mail-Adresse des vorhandenen Nutzers und optional ein ActionCodeSettings-Objekt an. Der Vorgang wird über den Link in der E-Mail abgeschlossen. Die verwendete E-Mail-Adresse muss einem bestehenden Nutzer gehören.

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

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

Python

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)

Go

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

Nachdem der Link generiert wurde, kann er in die E-Mail zum Zurücksetzen des benutzerdefinierten Passworts eingefügt und dann über einen benutzerdefinierten SMTP-Server an den entsprechenden Nutzer gesendet werden.

Wenn Sie nicht die Standard-Landingpage für das Zurücksetzen des Passworts verwenden und einen eigenen benutzerdefinierten Handler erstellen, lesen Sie den Hilfeartikel Benutzerdefinierte E-Mail-Aktions-Handler erstellen.

Geben Sie zum Generieren eines E-Mail-Bestätigungslinks die nicht bestätigte E-Mail-Adresse des vorhandenen Nutzers und optional ein ActionCodeSettings-Objekt an. Der Vorgang wird über den Link zur E-Mail-Aktion abgeschlossen. Die verwendete E-Mail-Adresse muss einem bestehenden Nutzer gehören.

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

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

Python

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)

Go

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

Nachdem der Link generiert wurde, kann er in die benutzerdefinierte Bestätigungs-E-Mail eingefügt und dann über einen benutzerdefinierten SMTP-Server an den entsprechenden Nutzer gesendet werden.

Wenn Sie nicht die Standard-Landingpage für die E-Mail-Bestätigung verwenden und einen eigenen benutzerdefinierten Handler erstellen, lesen Sie den Hilfeartikel Benutzerdefinierte E-Mail-Aktions-Handler erstellen.

Bevor Sie Nutzer über die Anmeldung per E-Mail-Link authentifizieren können, müssen Sie die Anmeldung per E-Mail-Link für Ihr Firebase-Projekt aktivieren.

Gib die E-Mail-Adresse des Nutzers und ein ActionCodeSettings-Objekt an, um einen Anmeldelink zu generieren. Das ActionCodeSettings-Objekt ist in diesem Fall erforderlich, um anzugeben, wohin der Nutzer zurückgeleitet werden soll, nachdem er auf den Link geklickt hat, um die Anmeldung abzuschließen. Der Vorgang wird über den Link zur E-Mail-Aktion abgeschlossen.

Im Gegensatz zum Zurücksetzen des Passworts und zur E-Mail-Bestätigung muss die verwendete E-Mail-Adresse nicht unbedingt zu einem vorhandenen Nutzer gehören, da mit diesem Vorgang neue Nutzer über einen E-Mail-Link in Ihrer App registriert werden können.

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

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

Python

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)

Go

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

Nachdem der Link generiert wurde, kann er in die benutzerdefinierte E-Mail-Anmeldung eingefügt und dann über einen benutzerdefinierten SMTP-Server an den entsprechenden Nutzer gesendet werden.

Weitere Informationen zur Authentifizierung von Nutzern mit Firebase über E-Mail-Links So können Sie Informationen zur Anmeldung bereitstellen, nachdem der Nutzer auf den Link geklickt und zur App weitergeleitet wurde.