Aplikacje mobilne czasami muszą wchodzić w interakcję z użytkownikami i zachęcać ich do podejmowania określonych działań, wysyłając e-maile.
Pakiety SDK Firebase Client umożliwiają wysyłanie użytkownikom e-maili zawierających linki, których mogą używać do resetowania hasła, weryfikowania adresu e-mail i logowania się za pomocą adresu e-mail. Te e-maile oparte na szablonach są wysyłane przez Google i mają ograniczone możliwości dostosowania.
Jeśli chcesz używać własnych szablonów e-maili i własnej usługi dostarczania e-maili, na tej stronie dowiesz się, jak za pomocą pakietu Firebase Admin SDK programowo generować linki do działań w przypadku opisanych powyżej procesów, które możesz umieszczać w e-mailach wysyłanych do użytkowników.
Dzięki temu zyskasz te korzyści:
- Dostosowywanie szablonów e-maili. Obejmuje to możliwość dodawania nowych stylów i niestandardowego brandingu, zmiany treści i logo, zwracania się do użytkowników po imieniu zamiast po imieniu i nazwisku itp.
- Stosowanie różnych szablonów w zależności od kontekstu. Jeśli na przykład użytkownik weryfikuje swój adres e-mail, aby zapisać się do newslettera, kontekst może być potrzebny w treści e-maila. Innym przykładem jest logowanie za pomocą linku w e-mailu: w jednym przypadku może to być spowodowane przez tego samego użytkownika, a w innym – przez zaproszenie od innego użytkownika. Kontekst należy uwzględnić w e-mailu.
- Lokalizowanie dostosowanych szablonów e-maili.
- Możliwość wygenerowania linku w bezpiecznym środowisku serwera.
- Możliwość dostosowania sposobu otwierania linku (w aplikacji mobilnej lub przeglądarce) oraz sposobu przekazywania dodatkowych informacji o stanie itp.
- Możliwość dostosowania domeny linku mobilnego używanej w procesach aplikacji mobilnej podczas tworzenia linku do działania w e-mailu.
Inicjowanie ActionCodeSettings
Zanim wygenerujesz link do działania w e-mailu, być może będziesz musiał zainicjować instancję ActionCodeSettings.
ActionCodeSettings umożliwia przekazywanie dodatkowych informacji o stanie za pomocą adresu URL dalszego działania, który jest dostępny po kliknięciu przez użytkownika linku w e-mailu. Dzięki temu użytkownik może wrócić do aplikacji po zakończeniu działania. Możesz też określić, czy link do działania w e-mailu ma być obsługiwany 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 wykonać kilka czynności, aby wykryć te linki w aplikacji mobilnej. Zapoznaj się z instrukcjami dotyczącymi konfigurowania linków mobilnych do działań w e-mailu.
Aby zainicjować instancję ActionCodeSettings, podaj te dane:
| Parametr | Typ | Opis |
|---|---|---|
url |
ciąg znaków | Ustawia link (adres URL stanu/URL dalszego działania), który ma różne znaczenia w różnych kontekstach:
|
iOS |
({bundleId: string}|undefined) | Ustawia identyfikator pakietu iOS, aby pomóc Firebase Authentication określić, czy ma utworzyć link tylko do internetu, czy link mobilny, który zostanie otwarty na urządzeniu Apple. |
android |
({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) | Ustawia nazwę pakietu Android, aby pomóc Firebase Authentication określić, czy ma utworzyć link tylko do internetu, czy link mobilny, który zostanie otwarty na urządzeniu z Androidem. |
handleCodeInApp |
(boolean|undefined) | Czy link do działania w e-mailu ma być otwierany najpierw w aplikacji mobilnej czy w linku internetowym. Wartość domyślna to fałsz (false). Jeśli ustawisz wartość true, link do kodu działania zostanie wysłany jako link uniwersalny lub link aplikacji na Androida i zostanie otwarty przez aplikację, jeśli jest zainstalowana. W przypadku wartości false kod zostanie najpierw wysłany do widżetu internetowego, a następnie po kontynuacji przekieruje do aplikacji, jeśli jest zainstalowana. |
linkDomain |
(string|undefined) | Gdy dla projektu są zdefiniowane niestandardowe domeny linków Hosting, określ, której z nich należy użyć, gdy link ma być otwierany przez określoną aplikację mobilną. W przeciwnym razie automatycznie wybierana jest domena domyślna (np. PROJECT_ID.firebaseapp.com |
dynamicLinkDomain |
(string|undefined) | Rola wycofana. Nie podawaj tego parametru. |
Poniższy przykład pokazuje, jak wysłać link weryfikacyjny, który zostanie otwarty najpierw w aplikacji mobilnej. Precyzyjny link będzie zawierać ładunek adresu URL dalszego działania https://www.example.com/checkout?cartId=1234. Używana niestandardowa Hosting
domena linku to custom-domain.com, którą należy skonfigurować do użycia z
Firebase Hosting.
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',
},
// The domain must be configured in Firebase Hosting and owned by the project.
linkDomain: 'custom-domain.com',
};
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",
LinkDomain = "coolapp.page.link",
};
Więcej informacji znajdziesz w artykule Przekazywanie stanu w działaniach w e-mailu.
Generowanie linku w e-mailu do resetowania hasła
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ą linku do działania w e-mailu. 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.
});
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 wstawić do niestandardowego e-maila z prośbą o zresetowanie hasła, a następnie 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 niestandardowy moduł obsługi, zapoznaj się z artykułem Tworzenie niestandardowych modułów obsługi działań w e-mailu.
Generowanie linku weryfikacyjnego
Aby wygenerować link weryfikacyjny, podaj niezweryfikowany adres e-mail istniejącego użytkownika i opcjonalny obiekt ActionCodeSettings. Operacja zostanie rozwiązana za pomocą linku do działania w e-mailu.
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.
});
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 linku 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, zapoznaj się z artykułem Tworzenie niestandardowych modułów obsługi działań w e-mailu.
Generowanie linku w e-mailu do logowania
Zanim zaczniesz uwierzytelniać użytkowników za pomocą logowania za pomocą linku w e-mailu, musisz włączyć logowanie za pomocą linku w e-mailu w projekcie w Firebase.
Aby wygenerować link do logowania, podaj adres e-mail użytkownika i obiekt ActionCodeSettings. W tym przypadku obiekt ActionCodeSettings jest wymagany, aby podać informacje o tym, gdzie przekierować użytkownika po kliknięciu linku w celu dokończenia logowania. Operacja zostanie rozwiązana za pomocą linku do działania w e-mailu.
W przeciwieństwie do resetowania hasła i potwierdzania adresu e-mail użyty adres e-mail nie 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ą 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żna go wstawić do niestandardowego e-maila z prośbą o zalogowanie się, a następnie wysłać do odpowiedniego użytkownika za pomocą niestandardowego serwera SMTP.
Więcej informacji o uwierzytelnianiu użytkowników za pomocą Firebase za pomocą linków w e-mailu. Pomoże to uzyskać informacje o tym, jak dokończyć logowanie po kliknięciu linku przez użytkownika i przekierowaniu go z powrotem do aplikacji.