Generieren von E-Mail-Aktionslinks

Mobile Apps müssen manchmal mit Benutzern interagieren und sie durch das Versenden 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 sind nur begrenzt anpassbar.

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

Dies bringt folgende Vorteile mit sich:

  • Passen Sie E-Mail-Vorlagen an. 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 durch denselben Benutzer oder als Einladung durch einen anderen Benutzer ausgelöst werden. Der Kontext müsste in der E-Mail enthalten sein.
  • Lokalisieren Sie benutzerdefinierte E-Mail-Vorlagen.
  • Möglichkeit, den Link aus einer sicheren Serverumgebung zu generieren.
  • Möglichkeit, anzupassen, wie der Link über eine mobile App oder einen Browser geöffnet werden soll und wie zusätzliche Statusinformationen usw. übergeben werden.
  • Möglichkeit, die für mobile App-Flows verwendete dynamische Linkdomäne beim Erstellen des E-Mail-Aktionslinks anzupassen und je nach Kontext oder mobiler App sogar eine andere dynamische Linkdomäne anzugeben.

ActionCodeSettings initialisieren

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

ActionCodeSettings können Sie 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 bei der Installation oder über einen 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 in Ihrer mobilen App zu erkennen. Lesen Sie die Anweisungen zum Konfigurieren von Firebase Dynamic Links für E-Mail-Aktionen.

Um eine ActionCodeSettings Instanz zu initialisieren, geben Sie die folgenden Daten an:

Parameter Typ Beschreibung
url Zeichenfolge

Legt den Link (Status-/Weiter-URL) fest, 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 Deep Link des dynamischen Links.
iOS ({bundleId: string}|undefiniert) Legt die Bundle-ID fest. Dadurch wird versucht, den Link in einer Apple-App zu öffnen, sofern diese installiert ist. Die App muss in der Konsole registriert werden.
android ({Paketname: string, installApp:boolean|undefiniert, minimale Version: string|undefiniert}|undefiniert) Legt den Android-Paketnamen fest. Dadurch wird versucht, den Link in einer Android-App zu öffnen, sofern 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 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 (boolean|undefiniert) Ob der E-Mail-Aktionslink zuerst in einer mobilen App oder einem Weblink geöffnet wird. Der Standardwert ist falsch. Wenn dieser Wert auf „true“ gesetzt ist, wird der Aktionscode-Link als universeller Link oder Android-App-Link gesendet und von der App geöffnet, sofern diese installiert ist. Im falschen Fall wird der Code zuerst an das Web-Widget gesendet und dann beim Fortfahren zur App weitergeleitet, sofern diese installiert ist.
dynamicLinkDomain (Zeichenfolge|undefiniert) Legt die dynamische Linkdomäne (oder Subdomäne) fest, die für den aktuellen Link verwendet werden soll, wenn dieser mit Firebase Dynamic Links geöffnet werden soll. Da pro Projekt mehrere dynamische Linkdomänen konfiguriert werden können, bietet dieses Feld die Möglichkeit, explizit eine davon auszuwählen. Wenn keine angegeben wird, wird standardmäßig die älteste Domäne verwendet.

Das folgende Beispiel zeigt, wie ein E-Mail-Bestätigungslink gesendet wird, der zunächst in einer mobilen App als Firebase Dynamic Link (Apple-App com.example.ios oder Android-App com.example.android geöffnet wird, wo die App installiert wird, wenn sie noch nicht installiert ist die Mindestversion ist 12). Der Deep-Link enthält die Weiter-URL-Nutzlast https://www.example.com/checkout?cartId=1234 . Die verwendete dynamische Link-Domäne 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 Statusübergabe in E-Mail-Aktionen .

Um einen Link zum Zurücksetzen des Passworts zu generieren, geben Sie die E-Mail-Adresse des vorhandenen Benutzers und ein optionales ActionCodeSettings Objekt an. Der Vorgang wird mit dem E-Mail-Aktionslink gelöst. Die verwendete E-Mail muss 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 Standard-Landingpage zum Zurücksetzen des Passworts verwenden und Ihren eigenen benutzerdefinierten Handler erstellen, lesen Sie den Abschnitt Erstellen benutzerdefinierter E-Mail-Aktionshandler .

Um einen E-Mail-Bestätigungslink zu generieren, geben Sie die nicht bestätigte E-Mail-Adresse des vorhandenen Benutzers und ein optionales ActionCodeSettings Objekt an. Der Vorgang wird mit dem E-Mail-Aktionslink gelöst. Die verwendete E-Mail muss 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 Standard-Zielseite für die E-Mail-Verifizierung verwenden und Ihren eigenen benutzerdefinierten Handler erstellen, lesen Sie den Abschnitt Erstellen benutzerdefinierter E-Mail-Aktionshandler .

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

Um einen Anmeldelink zu generieren, geben Sie 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 er zum Abschluss der Anmeldung auf den Link geklickt hat. Der Vorgang wird mit dem E-Mail-Aktionslink gelöst.

Im Gegensatz zum Zurücksetzen des Passworts und zur E-Mail-Verifizierung muss die verwendete E-Mail nicht unbedingt zu einem bestehenden Benutzer gehören, da dieser Vorgang verwendet werden kann, um neue Benutzer per E-Mail-Link bei 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 wird, nachdem der Benutzer auf den Link geklickt hat und zurück zur App weitergeleitet wird.