Generuję linki do czynności związanych z e-mailami

Aplikacje mobilne czasami muszą wchodzić w interakcję z użytkownikami i zachęcać ich do wykonywania określonych działań, wysyłając e-maile.

Pakiety SDK klienta Firebase umożliwiają wysyłanie użytkownikom e-maili z linkami, które mogą oni wykorzystać do resetowania hasła, weryfikacji adresu e-mail i logowania się za pomocą poczty e-mail. Te oparte na szablonach e-maile są wysyłane przez Google i można je w ograniczonym zakresie dostosować.

Jeśli chcesz zamiast tego użyć własnych szablonów e-maili i usługi dostarczania poczty e-mail, na tej stronie dowiesz się, jak za pomocą pakietu SDK Firebase Admin automatycznie generować linki do działań dla powyższych procesów, które możesz umieszczać w e-mailach wysyłanych do użytkowników.

Dzięki temu:

  • dostosowywanie szablonów e-maili. Obejmuje to możliwość dodawania nowych stylów i marki niestandardowej, zmieniania sformułowania i logo, zwracania się do użytkowników po imieniu zamiast po imieniu i nazisku itp.
  • stosować różne szablony w zależności od kontekstu; Jeśli na przykład użytkownik weryfikuje swój adres e-mail, aby zasubskrybować newsletter, w treści e-maila może być konieczne podanie kontekstu. Innym przykładem jest logowanie się za pomocą linku w e-mailu. W jednym scenariuszu może to być wywoływane przez tego samego użytkownika lub przez zaproszenie innego użytkownika. W e-mailu musisz podać kontekst.
  • Lokalizacja niestandardowych szablonów e-maili.
  • Możliwość generowania linku z bezpiecznego środowiska serwera.
  • Możliwość dostosowania sposobu otwierania linku w aplikacji mobilnej lub przeglądarce oraz przekazywania dodatkowych informacji o stanie itp.
  • Możliwość dostosowywania domeny linku dynamicznego używanego w przepływach aplikacji mobilnej podczas tworzenia linku akcji e-maila, a nawet określania innej domeny linku dynamicznego w zależności od kontekstu lub aplikacji mobilnej.

Inicjowanie ActionCodeSettings

Zanim będzie można wygenerować link do działania w e-mailu, może być konieczne zainicjowanie instancji ActionCodeSettings.

ActionCodeSettings umożliwiają przekazanie dodatkowych informacji za pomocą adresu URL kontynuacji, który jest dostępny po kliknięciu przez użytkownika linku w e-mailu. Dzięki temu użytkownik może też wrócić do aplikacji po wykonaniu działania. Dodatkowo możesz określić, czy link do działania w e-mailu ma być obsługiwany bezpośrednio w aplikacji mobilnej po jej zainstalowaniu lub w przeglądarce.

Aby linki były otwierane w aplikacji mobilnej, musisz włączyć Linki dynamiczne Firebase i wykonać kilka czynności, aby wykrywać te linki w aplikacji mobilnej. Zapoznaj się z instrukcjami konfigurowania Linków dynamicznych Firebase na potrzeby działań w e-mailach.

Aby zainicjować instancję ActionCodeSettings, podaj te dane:

Parametr Typ Opis
url ciąg znaków

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

  • Gdy link jest obsługiwany w widżetach działań w przeglądarce, 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 dynamicznego.
iOS ({bundleId: string}|undefined) Ustawia identyfikator pakietu. Spowoduje to próbę otwarcia linku w aplikacji Apple, jeśli jest ona zainstalowana. Aplikacja musi być zarejestrowana w Konsoli.
android ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) Ustawia nazwę pakietu na Androida. Spowoduje to próbę otwarcia linku w zainstalowanej aplikacji na Androida. Jeśli przekazano parametr installApp, określa on, czy zainstalować aplikację na Androida, jeśli urządzenie ją obsługuje, a aplikacja nie jest jeszcze zainstalowana. Jeśli podasz to pole bez pola packageName, pojawi się błąd wyjaśniający, że w powiązaniu z tym polem należy podać packageName. Jeśli określona jest wartość minimumVersion, a użytkownik ma zainstalowaną starszą wersję aplikacji, przechodzi do Sklepu Play, aby zaktualizować aplikację. Aplikacja na Androida musi być zarejestrowana w Konsoli.
handleCodeInApp (wartość logiczna|nieokreślona) Określ, czy link akcji e-maila ma się najpierw otwierać w aplikacji mobilnej, czy w witrynie. Wartość domyślna to fałsz. Jeśli ta opcja ma wartość Prawda, link do kodu działania będzie wysyłany jako uniwersalny link lub link aplikacji na Androida i będzie otwierany przez aplikację, jeśli jest zainstalowana. W przypadku fałszywego wyniku kod zostanie wysłany najpierw do widżetu internetowego, a potem przekieruje do aplikacji, jeśli jest zainstalowana.
dynamicLinkDomain (ciąg tekstowy|nieokreślony) Konfiguruje domenę (lub subdomenę) linku dynamicznego, która ma być używana w bieżącym połączeniu, jeśli ma być ono otwierane za pomocą Linków dynamicznych Firebase. W każdym projekcie można skonfigurować wiele domen linków dynamicznych, dlatego to pole umożliwia wybranie jednej z nich. Jeśli nie podasz żadnej, domyślnie zostanie użyta najstarsza domena.

Z tego przykładu dowiesz się, jak wysłać e-maila z linkiem weryfikacyjnym, który najpierw otworzy się w aplikacji mobilnej jako link dynamiczny Firebase (aplikacja Apple com.example.ios lub Android com.example.android, która zostanie zainstalowana, jeśli nie jest jeszcze zainstalowana, a wersja minimalna to 12). Precyzyjny link będzie zawierać ładunek danych adresu URL do kontynuowania.https://www.example.com/checkout?cartId=1234 Użyta domena linku dynamicznego to coolapp.page.link, którą należy skonfigurować na potrzeby Linków dynamicznych 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',
};

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

Go

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

Więcej informacji znajdziesz w artykule Przesyłanie stanu w działaniach e-maila.

Aby wygenerować link do zresetowania hasła, podaj adres e-mail istniejącego użytkownika i opcjonalnie obiekt ActionCodeSettings. Operacja zostanie rozwiązana za pomocą linku do działania w e-mailu. 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.
  });

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)

Go

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 umieścić w niestandardowym e-mailu z resetem hasła, a potem wysłać do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Jeśli nie używasz domyślnej strony docelowej resetowania hasła i tworzysz własny moduł obsługi, zapoznaj się z artykułem Tworzenie niestandardowych modułów obsługi działań e-mail.

Aby wygenerować link weryfikacyjny e-maila, podaj niezweryfikowany adres e-mail istniejącego użytkownika i opcjonalnie obiekt ActionCodeSettings. Operacja zostanie zakończona po kliknięciu linku działania e-maila. 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.
  });

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)

Go

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 link można go wstawić do niestandardowego e-maila weryfikacyjnego, a następnie wysłać do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Jeśli nie używasz domyślnej strony docelowej weryfikacji adresu e-mail i tworzysz własny niestandardowy moduł obsługi, przeczytaj artykuł o tworzeniu niestandardowych modułów obsługi działań związanych z e-mailami.

Zanim zaczniesz uwierzytelniać użytkowników za pomocą logowania się za pomocą linku e-mail, musisz włączyć logowanie za pomocą linku e-mail w projekcie Firebase.

Aby wygenerować link logowania, podaj adres e-mail użytkownika i obiekt ActionCodeSettings. W tym przypadku obiekt ActionCodeSettings jest wymagany, aby podać informacje o tym, dokąd użytkownik ma wrócić po kliknięciu linku do strony logowania. Operacja zostanie rozwiązana za pomocą linku działania e-maila.

W przeciwieństwie do resetowania hasła i weryfikacji adresu e-mail użyty adres e-mail nie musi należeć do istniejącego użytkownika, ponieważ za pomocą tej operacji można zarejestrować nowych użytkowników w aplikacji za pomocą linku w e-mailu.

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)

Go

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żesz go wstawić do niestandardowego e-maila z zaproszeniem do zalogowania się, a potem wysłać go do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.

Dowiedz się więcej o uwierzytelnianiu użytkowników za pomocą Firebase przy użyciu linków e-mail. Dzięki temu możesz podać informacje o tym, jak dokończyć logowanie, gdy użytkownik kliknie link i zostanie przekierowany z powrotem do aplikacji.