Generowanie linków akcji e-mail

Aplikacje mobilne czasami muszą wchodzić w interakcję z użytkownikami i namawiać ich do podjęcia określonych działań poprzez wysyłanie wiadomości e-mail.

Pakiety SDK klienta Firebase umożliwiają wysyłanie do użytkowników wiadomości e-mail zawierających łącza, których mogą używać do resetowania haseł, weryfikacji adresu e-mail i logowania za pomocą poczty e-mail. Te e-maile oparte na szablonach są wysyłane przez Google i mają ograniczone możliwości dostosowywania.

Jeśli zamiast tego chcesz używać własnych szablonów wiadomości e-mail i własnej usługi dostarczania wiadomości e-mail, na tej stronie wyjaśniono, jak używać pakietu Firebase Admin SDK do programowego generowania linków do działań dla powyższych przepływów, które możesz dołączać do wiadomości e-mail wysyłanych do użytkowników.

Wiąże się to z następującymi korzyściami:

  • Dostosuj szablony e-maili. Obejmuje to możliwość dodawania nowych stylów i niestandardowego brandingu, zmiany sformułowań i logo, zwracania się do użytkowników po imieniu zamiast pełnego imienia i nazwiska i tak dalej.
  • Zastosuj różne szablony w zależności od kontekstu. Na przykład, jeśli użytkownik weryfikuje swój adres e-mail, aby zapisać się do newslettera, konieczne może być podanie kontekstu w treści wiadomości e-mail. Innym przykładem jest logowanie za pomocą łącza e-mail: w jednym scenariuszu może to zostać wywołane przez tego samego użytkownika lub w wyniku zaproszenia innego użytkownika. Kontekst powinien zostać uwzględniony w wiadomości e-mail.
  • Lokalizuj niestandardowe szablony wiadomości e-mail.
  • Możliwość wygenerowania łącza z bezpiecznego środowiska serwerowego.
  • Możliwość dostosowania sposobu otwierania linku poprzez aplikację mobilną lub przeglądarkę, sposobu przekazywania dodatkowych informacji o stanie itp.
  • Możliwość dostosowania domeny łącza dynamicznego używanej w przepływach aplikacji mobilnych podczas konstruowania łącza akcji e-mail, a nawet określenia innej domeny łącza dynamicznego w zależności od kontekstu lub aplikacji mobilnej.

Zainicjuj ustawienia ActionCode

Przed wygenerowaniem łącza do akcji e-mail może być konieczne zainicjowanie instancji ActionCodeSettings .

ActionCodeSettings umożliwiają przekazywanie dodatkowego stanu za pośrednictwem adresu URL kontynuacji, który jest dostępny po kliknięciu przez użytkownika łącza e-mail. Zapewnia to również użytkownikowi możliwość powrotu do aplikacji po zakończeniu akcji. Ponadto możesz określić, czy link do akcji e-mail ma być obsługiwany bezpośrednio z aplikacji mobilnej po jej zainstalowaniu, czy z przeglądarki.

W przypadku linków, które mają być otwierane za pośrednictwem aplikacji mobilnej, musisz włączyć Linki dynamiczne Firebase i wykonać pewne zadania, aby wykryć te linki w aplikacji mobilnej. Zapoznaj się z instrukcjami konfigurowania łączy dynamicznych Firebase do działań e-mailowych.

Aby zainicjować instancję ActionCodeSettings , podaj następujące dane:

Parametr Typ Opis
url strunowy

Ustawia link (adres URL stanu/kontynuacji), który ma różne znaczenia w różnych kontekstach:

  • Gdy łącze jest obsługiwane w widżetach akcji sieciowych, jest to łącze głębokie w parametrze continueUrl .
  • Gdy łącze jest obsługiwane bezpośrednio w aplikacji, jest to parametr continueUrl w głębokim łączu łącza dynamicznego.
iOS ({bundleId: string}|niezdefiniowany) Ustawia identyfikator pakietu. Spowoduje to próbę otwarcia łącza w aplikacji Apple, jeśli jest zainstalowana. Aplikację należy zarejestrować w Konsoli.
android ({nazwa pakietu: string, installApp:boolean|niezdefiniowana, minimalna wersja: ciąg|niezdefiniowana}|niezdefiniowana) Ustawia nazwę pakietu Androida. Spowoduje to próbę otwarcia łącza w aplikacji na Androida, jeśli jest zainstalowana. Jeśli installApp zostanie przekazany, określa, czy zainstalować aplikację na Androida, jeśli urządzenie ją obsługuje, a aplikacja nie jest jeszcze zainstalowana. Jeśli to pole zostanie podane bez packageName , zostanie zgłoszony błąd wyjaśniający, że w połączeniu z tym polem należy podać packageName . Jeśli określono minimumVersion i zainstalowano starszą wersję aplikacji, użytkownik zostanie przeniesiony do Sklepu Play w celu uaktualnienia aplikacji. Aplikację na Androida należy zarejestrować w Konsoli.
handleCodeInApp (logiczna|nieokreślona) Określa, czy link do akcji e-mail zostanie najpierw otwarty w aplikacji mobilnej, czy w łączu internetowym. Wartość domyślna to fałsz. Jeśli ma wartość true, link do kodu akcji zostanie wysłany jako łącze uniwersalne lub łącze do aplikacji na Androida i zostanie otwarte przez aplikację, jeśli jest zainstalowana. W fałszywym przypadku kod zostanie najpierw wysłany do widżetu internetowego, a następnie kontynuowanie przekieruje do aplikacji, jeśli jest zainstalowana.
dynamicLinkDomain (ciąg|nieokreślony) Ustawia domenę (lub subdomenę) łącza dynamicznego, która będzie używana dla bieżącego łącza, jeśli ma ono zostać otwarte przy użyciu łączy dynamicznych Firebase. Ponieważ w jednym projekcie można skonfigurować wiele domen łączy dynamicznych, to pole umożliwia wyraźny wybór jednej. Jeśli nie podano żadnej, domyślnie używana jest najstarsza domena.

Poniższy przykład ilustruje, jak wysłać link weryfikacyjny e-mailem, który najpierw otworzy się w aplikacji mobilnej jako link dynamiczny Firebase (aplikacja Apple com.example.ios lub aplikacja na Androida com.example.android , gdzie aplikacja zostanie zainstalowana, jeśli nie została jeszcze zainstalowana i minimalna wersja to 12). Głęboki link będzie zawierał ładunek adresu URL https://www.example.com/checkout?cartId=1234 . Używana domena łącza dynamicznego to coolapp.page.link i musi być skonfigurowana do użycia z łączami dynamicznymi Firebase.

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

Jawa

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

Pyton

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

Iść

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

Aby dowiedzieć się więcej, zobacz Przekazywanie stanu w akcjach e-mailowych .

Aby wygenerować link do resetowania hasła, podaj adres e-mail istniejącego użytkownika i opcjonalny obiekt ActionCodeSettings . Operacja zostanie rozwiązana za pomocą łącza do akcji e-mail. Użyty adres e-mail musi należeć do istniejącego użytkownika.

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

Jawa

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

Pyton

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)

Iść

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

Po wygenerowaniu linku można go wstawić do niestandardowej wiadomości e-mail dotyczącej resetowania hasła, a następnie wysłać e-mailem do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Jeśli nie używasz domyślnej strony docelowej resetowania hasła i nie tworzysz własnego niestandardowego modułu obsługi, zobacz tworzenie niestandardowych programów obsługi akcji e-mail .

Aby wygenerować link weryfikacyjny adresu e-mail, podaj niezweryfikowany adres e-mail istniejącego użytkownika i opcjonalny obiekt ActionCodeSettings . Operacja zostanie rozwiązana za pomocą łącza do akcji e-mail. Użyty adres e-mail musi należeć do istniejącego użytkownika.

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

Jawa

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

Pyton

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)

Iść

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

Po wygenerowaniu linku można go wstawić do niestandardowej wiadomości weryfikacyjnej, a następnie wysłać e-mailem do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Jeśli nie korzystasz z domyślnej strony docelowej weryfikacji za pomocą poczty e-mail i tworzysz własny, niestandardowy moduł obsługi, zobacz tworzenie niestandardowych programów obsługi działań za pośrednictwem poczty e-mail .

Zanim będziesz mógł uwierzytelniać użytkowników za pomocą linku e-mailowego, musisz włączyć logowanie za pomocą linku e-mailowego w swoim projekcie Firebase.

Aby wygenerować link logowania, podaj adres e-mail użytkownika i obiekt ActionCodeSettings . Obiekt ActionCodeSettings jest w tym przypadku wymagany w celu przekazania informacji gdzie zwrócić użytkownika po kliknięciu linku w celu zakończenia logowania. Operacja zostanie rozwiązana za pomocą łącza do akcji e-mail.

W przeciwieństwie do resetowania hasła i weryfikacji adresu e-mail, użyty adres e-mail niekoniecznie musi należeć do istniejącego użytkownika, ponieważ tej operacji można użyć do zarejestrowania nowych użytkowników w aplikacji za pośrednictwem łącza 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.
  });

Jawa

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

Pyton

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)

Iść

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

Po wygenerowaniu linku można go wstawić do niestandardowej wiadomości e-mail logowania, a następnie wysłać e-mailem do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Dowiedz się więcej o uwierzytelnianiu użytkowników w Firebase za pomocą linków e-mailowych . Pomoże to w uzyskaniu informacji o tym, jak dokończyć logowanie po kliknięciu łącza i przekierowaniu użytkownika z powrotem do aplikacji.