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:
|
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 .
Wygeneruj link do resetowania hasła w wiadomości 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 .
Wygeneruj link weryfikacyjny 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 .
Wygeneruj link e-mail do logowania
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.