Generieren von E-Mail-Aktionslinks

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

Die Firebase Admin SDKs bietet die Möglichkeit , Benutzer E - Mails zu senden , die Links enthalten , sie für das Zurücksetzen von Kennwörtern verwenden kann, E - Mail - Adresse Überprüfung und E - Mail-basierte Anmeldung. Diese 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-Zustellungsdienst verwenden möchten, können Sie das Firebase Admin SDK verwenden, um die Aktionslinks für die oben genannten Abläufe programmatisch zu 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 anstelle des vollständigen Namens anzusprechen und so weiter.
  • Wenden Sie je nach Kontext unterschiedliche Vorlagen an. Wenn der Benutzer beispielsweise seine E-Mail bestätigt, um einen Newsletter zu abonnieren, muss der Kontext möglicherweise im E-Mail-Inhalt angegeben werden. Ein weiteres Beispiel ist die E-Mail-Link-Anmeldung: In einem Szenario kann dies durch denselben Benutzer oder als Einladung durch einen anderen Benutzer ausgelöst werden. Der Kontext muss in die E-Mail aufgenommen werden.
  • 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 übergeben werden usw.
  • 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 eine E - Mail Aktionslink generieren können, müssen Sie möglicherweise eine initialisieren ActionCodeSettings Instanz.

ActionCodeSettings können Ihnen zusätzlichen Zustand gelangen über eine URL weiter , die zugänglich ist , nachdem der Benutzer des E - Mail - Link klickt. 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 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 in Ihrer mobilen App zu erkennen. Beachten Sie die Anweisungen zur Firebase dynamische Links konfigurieren für E - Mail - Aktionen.

Um ein zu initialisieren ActionCodeSettings Beispiel bietet die folgenden Daten:

Parameter Art Beschreibung
url Schnur

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

  • Wenn der Link in dem Web - Aktion Widgets gehandhabt wird, ist dies der Deep - Link in dem continueUrl Abfrageparameter.
  • Wenn die Verbindung direkt in der App behandelt wird, ist dies die continueUrl Abfrage - Parameter in der tiefen Verbindung des Dynamic Link.
iOS ({bundleId: string}|undefiniert) Legt die iOS-Bundle-ID fest. Dadurch wird versucht, den Link in einer iOS-App zu öffnen, falls diese installiert ist. Die iOS-App muss in der Konsole registriert werden.
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, wenn diese installiert ist. Wenn installApp übergeben wird, gibt an , ob die Android - App zu installieren , wenn das Gerät unterstützt wird und die App noch nicht installiert ist. Wenn dieses Feld ohne versehen ist packageName , wird ein Fehler erklärt geworfen , dass die packageName muss mit diesem Bereich in Verbindung bereitgestellt werden. Wenn minimumVersion angegeben ist, und eine ältere Version der App installiert ist, wird der Benutzer auf die Play Store genommen , 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 auf "true" gesetzt, 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 beim Fortfahren zur App weitergeleitet, falls sie installiert ist.
dynamicLinkDomain (Zeichenfolge|undefiniert) Legt die Dynamic Link-Domain (oder Subdomain) fest, die für den aktuellen Link verwendet werden soll, wenn er 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, eine explizit auszuwählen. Wenn keine angegeben ist, wird standardmäßig die älteste Domäne verwendet.

Das folgende Beispiel zeigt , wie ein E - Mail Bestätigungslink zu senden , die zunächst als Firebase Dynamic Link (iOS - App in einer mobilen App öffnen com.example.ios oder Android App com.example.android wo die App installieren, wenn sie nicht bereits installiert und die Mindestversion ist 12). Der Deep - Link enthält die weiterhin URL Nutzlast https://www.example.com/checkout?cartId=1234 . Dynamic Link - Domäne verwendet wird , ist coolapp.page.link , die für die Verwendung mit Firebase Dynamische Verbindungen 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",
};

Um mehr zu erfahren, siehe Passing Staat in E - Mail - Aktionen .

So generieren Sie einen Passwort - Reset - Link, geben Sie die vorhandenen Benutzer-E - Mail und ein optionales ActionCodeSettings Objekt. Der Vorgang wird mit dem E-Mail-Aktionslink behoben. 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';
admin
  .auth()
  .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 das Standard - Passwort - Reset Zielseite verwenden und den Aufbau Ihrer eigenen benutzerdefinierten Handler finden Sie das Erstellen von benutzerdefinierten E - Mail - Aktion Handler .

Einen E - Mail Bestätigungslink bietet die vorhandenen Benutzer-ungeprüfte E - Mail und optional zu erzeugen ActionCodeSettings Objekt. Der Vorgang wird mit dem E-Mail-Aktionslink behoben. 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';
admin
  .auth()
  .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 die Seite Standard - Mail - Überprüfung Landung verwenden und den Aufbau Ihrer eigenen benutzerdefinierten Handler finden Sie das Erstellen von benutzerdefinierten E - Mail - Aktion Handler .

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

Um ein Anmelde-Link zu generieren, bieten die E - Mail des Benutzers und ein ActionCodeSettings Objekt. Das ActionCodeSettings Objekt wird in diesem Fall die erforderlichen Informationen zur Verfügung zu stellen, wo der Benutzer zurückzukehren , nachdem der Link für die Anmeldung bei der Fertigstellung angeklickt wird. Der Vorgang wird mit dem E-Mail-Aktionslink behoben.

Im Gegensatz zum Zurücksetzen des Passworts und der E-Mail-Verifizierung muss die verwendete E-Mail nicht unbedingt 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 usremail = 'user@example.com';
admin
  .auth()
  .generateSignInWithEmailLink(usremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(usremail, 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 Benutzer mit E - Mail - Authentifizierung Firebase Links verwenden . Auf diese Weise erhalten Sie Informationen zum Abschließen der Anmeldung, nachdem der Benutzer auf den Link geklickt hat und zurück zur App weitergeleitet wird.