Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Generowanie linków akcji e-mail

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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

Pakiety SDK klienta Firebase umożliwiają wysyłanie użytkownikom e-maili zawierających linki, których mogą używać do resetowania hasła, weryfikacji adresu e-mail i logowania się za pomocą poczty e-mail. Te e-maile oparte na szablonach są wysyłane przez Google i mają ograniczoną możliwość dostosowania.

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

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

  • Dostosuj szablony wiadomości e-mail. Obejmuje to możliwość dodawania nowych stylów i niestandardowego brandingu, zmiany słownictwa 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, może być konieczne podanie kontekstu w treści wiadomości e-mail. Innym przykładem jest logowanie się przez e-mail: w jednym scenariuszu może to zostać wywołane przez tego samego użytkownika lub jako zaproszenie innego użytkownika. Kontekst musiałby być zawarty w e-mailu.
  • Zlokalizuj niestandardowe szablony wiadomości e-mail.
  • Możliwość wygenerowania łącza z bezpiecznego środowiska serwerowego.
  • Możliwość dostosowania sposobu otwierania linku za pomocą aplikacji mobilnej lub przeglądarki, sposobu przekazywania dodatkowych informacji o stanie itp.
  • Możliwość dostosowania domeny linku dynamicznego używanej do przepływów aplikacji mobilnej podczas konstruowania linku akcji e-mail, a nawet określenia innej domeny linku dynamicznego w zależności od kontekstu lub aplikacji mobilnej.

Zainicjuj ustawienia kodu akcji

Zanim będzie można wygenerować łącze akcji wiadomości e-mail, może być konieczne zainicjowanie wystąpienia ActionCodeSettings .

ActionCodeSettings umożliwiają przekazanie dodatkowego stanu za pośrednictwem adresu URL kontynuacji, który jest dostępny po kliknięciu przez użytkownika łącza w wiadomości e-mail. Zapewnia to również użytkownikowi możliwość powrotu do aplikacji po zakończeniu akcji. Ponadto możesz określić, czy obsługiwać łącze akcji e-mail bezpośrednio z aplikacji mobilnej, gdy jest ona zainstalowana, czy z przeglądarki.

W przypadku linków, które mają być otwierane w aplikacji mobilnej, musisz włączyć Linki dynamiczne Firebase i wykonać kilka zadań, aby wykryć te linki w aplikacji mobilnej. Zapoznaj się z instrukcjami konfigurowania Linków dynamicznych Firebase dla działań związanych z e-mailami.

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

Parametr Rodzaj Opis
url strunowy

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

  • Gdy link jest obsługiwany w widżetach akcji internetowej, jest to precyzyjny link w parametrze zapytania continueUrl .
  • Gdy link jest obsługiwany bezpośrednio w aplikacji, jest to parametr zapytania continueUrl w precyzyjnym linku linku dynamicznego.
iOS ({bundleId: string}|undefined) Ustawia identyfikator pakietu. Spowoduje to próbę otwarcia łącza w aplikacji Apple, jeśli jest ona zainstalowana. Aplikację należy zarejestrować w Konsoli.
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) Ustawia nazwę pakietu Android. Spowoduje to próbę otwarcia łącza w aplikacji na Androida, jeśli jest ona 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 packageName należy podać w połączeniu z tym polem. Jeśli określono minimumVersion wersję i zainstalowana jest starsza wersja aplikacji, użytkownik zostanie przeniesiony do Sklepu Play, aby zaktualizować aplikację. Aplikację na Androida należy zarejestrować w Konsoli.
handleCodeInApp (wartość logiczna|nieokreślona) Czy link do akcji w wiadomości e-mail zostanie najpierw otwarty w aplikacji mobilnej, czy jako link internetowy. Wartość domyślna to fałsz. Po ustawieniu na true link z kodem działania zostanie wysłany jako link uniwersalny lub link do aplikacji na Androida i zostanie otwarty przez aplikację, jeśli jest zainstalowana. W fałszywym przypadku kod zostanie najpierw wysłany do widżetu internetowego, a następnie, gdy kontynuujesz, przekieruje do aplikacji, jeśli jest zainstalowana.
dynamicLinkDomain (ciąg|nieokreślony) Ustawia domenę łącza dynamicznego (lub subdomenę), która ma być używana dla bieżącego łącza, jeśli ma być otwierane za pomocą Linków dynamicznych Firebase. Ponieważ w jednym projekcie można skonfigurować wiele domen łączy dynamicznych, to pole umożliwia jednoznaczny wybór jednej z nich. Jeśli nie podano żadnej, domyślnie używana jest najstarsza domena.

Poniższy przykład ilustruje, jak wysłać link weryfikacyjny e-mail, który otworzy się najpierw w aplikacji mobilnej jako Firebase Dynamic Link (aplikacja Apple com.example.ios lub aplikacja na Androida com.example.android , gdzie aplikacja zostanie zainstalowana, jeśli nie jest jeszcze zainstalowana i minimalna wersja to 12). Precyzyjny link będzie zawierał ładunek dalszego adresu URL https://www.example.com/checkout?cartId=1234 . Użyta domena linku dynamicznego to coolapp.page.link , którą należy skonfigurować do użytku z Linkami 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 działaniach e-mail .

Aby wygenerować łącze resetowania hasła, podaj adres e-mail istniejącego użytkownika i opcjonalny obiekt ActionCodeSettings . Operacja zostanie rozwiązana za pomocą łącza akcji w wiadomości 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 korzystasz z 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 akcji w wiadomości 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 e-mail weryfikacyjnej, a następnie wysłać do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Jeśli nie korzystasz z domyślnej strony docelowej weryfikacji adresu e-mail i nie tworzysz własnego niestandardowego modułu obsługi, zobacz tworzenie niestandardowych programów obsługi działań e-mail .

Aby móc uwierzytelniać użytkowników za pomocą e-mailowego logowania za pomocą linków, musisz włączyć logowanie przez e-mail w swoim projekcie Firebase.

Aby wygenerować link do logowania, podaj adres e-mail użytkownika i obiekt ActionCodeSettings . W tym przypadku obiekt ActionCodeSettings jest wymagany do podania informacji o tym, gdzie zwrócić użytkownika po kliknięciu łącza w celu zakończenia logowania. Operacja zostanie rozwiązana za pomocą łącza akcji w wiadomości 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ż ta operacja może służyć do rejestrowania nowych użytkowników w aplikacji za pomocą łą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 niestandardowego adresu e-mail logowania, a następnie wysłać do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Dowiedz się więcej o uwierzytelnianiu użytkowników w Firebase za pomocą linków w e-mailach . Pomoże to w uzyskaniu informacji o tym, jak ukończyć logowanie, gdy użytkownik kliknie łącze i zostanie przekierowany z powrotem do aplikacji.