Firebase is back at Google I/O on May 10! Register now

Generieren von E-Mail-Aktionslinks

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Mobile Apps müssen manchmal mit Benutzern interagieren und sie durch das Senden von E-Mails zu bestimmten Aktionen auffordern.

Die Firebase Client SDKs bieten die Möglichkeit, Benutzern E-Mails mit Links zu senden, die sie zum Zurücksetzen von Passwörtern, zur Überprüfung der E-Mail-Adresse und zur E-Mail-basierten Anmeldung verwenden können. Diese vorlagenbasierten E-Mails werden von Google gesendet und können nur eingeschränkt angepasst werden.

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

Dies bringt die folgenden Vorteile mit sich:

  • E-Mail-Vorlagen anpassen. Dazu gehört die Möglichkeit, neue Stile und benutzerdefiniertes Branding hinzuzufügen, Formulierungen und Logos zu ändern, Benutzer mit dem Vornamen statt mit dem vollständigen Namen anzusprechen und so weiter.
  • Wenden Sie je nach Kontext unterschiedliche Vorlagen an. Wenn der Benutzer beispielsweise seine E-Mail-Adresse bestätigt, um einen Newsletter zu abonnieren, muss der Kontext möglicherweise im E-Mail-Inhalt bereitgestellt werden. Ein weiteres Beispiel ist die Anmeldung per E-Mail-Link: In einem Szenario kann dies vom selben Benutzer oder als Einladung eines anderen Benutzers ausgelöst werden. Der Kontext müsste in der E-Mail enthalten sein.
  • Lokalisieren Sie benutzerdefinierte E-Mail-Vorlagen.
  • Möglichkeit, den Link von einer sicheren Serverumgebung aus zu generieren.
  • Möglichkeit, anzupassen, wie der Link über eine mobile App oder einen Browser geöffnet werden soll, und wie zusätzliche Statusinformationen übergeben werden usw.
  • Möglichkeit zum Anpassen der für mobile App-Flows verwendeten dynamischen Linkdomäne beim Erstellen des E-Mail-Aktionslinks und sogar zum Angeben einer anderen dynamischen Linkdomäne je nach Kontext oder mobiler App.

ActionCodeSettings initialisieren

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

ActionCodeSettings können Sie einen zusätzlichen Status über eine Fortsetzungs-URL übergeben, auf die zugegriffen werden kann, nachdem der Benutzer auf den E-Mail-Link geklickt hat. Dies bietet dem Benutzer auch die Möglichkeit, nach Abschluss der Aktion zur App zurückzukehren. Darüber hinaus können Sie angeben, ob der E-Mail-Aktionslink direkt von einer mobilen Anwendung, wenn sie installiert ist, oder von einem Browser verarbeitet werden soll.

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

Geben Sie zum Initialisieren einer ActionCodeSettings -Instanz die folgenden Daten an:

Parameter Typ Beschreibung
url Schnur

Setzt den Link (State/Continue URL), der in verschiedenen Kontexten unterschiedliche Bedeutungen hat:

  • Wenn der Link in den Webaktions-Widgets verarbeitet wird, ist dies der Deep-Link im continueUrl -Abfrageparameter.
  • Wenn der Link direkt in der App verarbeitet wird, ist dies der continueUrl -Abfrageparameter im Deeplink des dynamischen Links.
iOS ({bundleId: string}|undefiniert) Legt die Bundle-ID fest. Dadurch wird versucht, den Link in einer Apple-App zu öffnen, falls diese installiert ist. Die App muss in der Konsole registriert werden.
android ({packageName: string, installApp:boolean|undefiniert, minimumVersion: string|undefiniert}|undefiniert) Legt den Android-Paketnamen fest. Dadurch wird versucht, den Link in einer Android-App zu öffnen, falls diese installiert ist. Wenn installApp übergeben wird, gibt es an, ob die Android-App installiert werden soll, wenn das Gerät dies unterstützt und die App noch nicht installiert ist. Wenn dieses Feld ohne packageName bereitgestellt wird, wird ein Fehler ausgegeben, der erklärt, dass der packageName in Verbindung mit diesem Feld bereitgestellt werden muss. Wenn minimumVersion angegeben ist und eine ältere Version der App installiert ist, wird der Benutzer zum Play Store weitergeleitet, um die App zu aktualisieren. Die Android-App muss in der Konsole registriert werden.
handleCodeInApp (boolesch|undefiniert) Ob der E-Mail-Aktionslink zuerst in einer mobilen App oder einem Weblink geöffnet wird. Der Standardwert ist falsch. Wenn der Wert auf „true“ gesetzt ist, wird der Aktionscode-Link als universeller Link oder Android-App-Link gesendet und von der App geöffnet, falls installiert. Im falschen Fall wird der Code zuerst an das Web-Widget gesendet und dann bei Continue zur App weitergeleitet, falls installiert.
dynamicLinkDomain (Zeichenfolge|undefiniert) Legt die Domäne (oder Subdomäne) des dynamischen Links fest, die für den aktuellen Link verwendet werden soll, wenn er mit Firebase Dynamic Links geöffnet werden soll. Da mehrere dynamische Linkdomänen pro Projekt konfiguriert werden können, bietet dieses Feld die Möglichkeit, explizit eine auszuwählen. Wenn keine angegeben wird, wird standardmäßig die älteste Domäne verwendet.

Das folgende Beispiel zeigt, wie Sie einen E-Mail-Bestätigungslink senden, der in einer mobilen App zuerst als dynamischer Firebase-Link geöffnet wird (Apple-App com.example.ios oder Android-App com.example.android wo die App installiert wird, falls sie noch nicht installiert ist, und die Mindestversion ist 12). Der Deep-Link enthält die Nutzlast der Continue-URL https://www.example.com/checkout?cartId=1234 . Die verwendete Domäne für dynamische Links ist coolapp.page.link , die für die Verwendung mit Firebase Dynamic Links konfiguriert werden muss.

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

gehen

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 Zustandsübergabe in E-Mail-Aktionen .

Geben Sie zum Generieren eines Links zum Zurücksetzen des Kennworts die E-Mail-Adresse des vorhandenen Benutzers und ein optionales ActionCodeSettings -Objekt an. Der Vorgang wird mit dem E-Mail-Aktionslink aufgelöst. Die verwendete E-Mail muss zu einem bestehenden Benutzer 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)

gehen

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 benutzerdefinierte E-Mail zum Zurücksetzen des Passworts eingefügt und dann über einen benutzerdefinierten SMTP-Server per E-Mail an den entsprechenden Benutzer gesendet werden.

Wenn Sie nicht die standardmäßige Zielseite zum Zurücksetzen des Passworts verwenden und Ihren eigenen benutzerdefinierten Handler erstellen, finden Sie weitere Informationen unter Erstellen benutzerdefinierter E-Mail-Aktions-Handler .

Um einen E-Mail-Bestätigungslink zu generieren, geben Sie die unbestätigte E-Mail-Adresse des vorhandenen Benutzers und ein optionales ActionCodeSettings -Objekt an. Der Vorgang wird mit dem E-Mail-Aktionslink aufgelöst. Die verwendete E-Mail muss zu einem bestehenden Benutzer 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)

gehen

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 per E-Mail an den entsprechenden Benutzer gesendet werden.

Wenn Sie nicht die Standardzielseite für die E-Mail-Bestätigung verwenden und Ihren eigenen benutzerdefinierten Handler erstellen, finden Sie weitere Informationen unter Erstellen benutzerdefinierter E-Mail-Aktions-Handler .

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

Geben Sie zum Generieren eines Anmeldelinks die E-Mail-Adresse des Benutzers und ein ActionCodeSettings -Objekt an. Das ActionCodeSettings -Objekt ist in diesem Fall erforderlich, um Informationen darüber bereitzustellen, wohin der Benutzer zurückkehren soll, nachdem auf den Link geklickt wurde, um die Anmeldung abzuschließen. Der Vorgang wird mit dem E-Mail-Aktionslink aufgelöst.

Im Gegensatz zum Zurücksetzen des Passworts und der E-Mail-Verifizierung muss die verwendete E-Mail-Adresse nicht unbedingt einem vorhandenen Benutzer gehören, da dieser Vorgang verwendet werden kann, um neue Benutzer per E-Mail-Link in Ihrer App anzumelden.

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)

gehen

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 Anmelde-E-Mail eingefügt und dann über einen benutzerdefinierten SMTP-Server per E-Mail an den entsprechenden Benutzer gesendet werden.

Erfahren Sie mehr über die Authentifizierung von Benutzern bei Firebase mithilfe von E-Mail-Links . Dies hilft dabei, Informationen darüber bereitzustellen, wie die Anmeldung abgeschlossen werden kann, nachdem der Benutzer auf den Link geklickt hat und zur App zurückgeleitet wird.