Мобильным приложениям иногда необходимо взаимодействовать с пользователями и побуждать их к определенным действиям посредством отправки электронных писем.
Клиентские SDK Firebase предоставляют пользователям возможность отправлять электронные письма со ссылками для сброса пароля, подтверждения адреса электронной почты и входа в систему. Эти письма основаны на шаблонах, которые отправляются Google и имеют ограниченные возможности настройки.
Если вместо этого вы хотите использовать собственные шаблоны электронных писем и собственную службу доставки электронной почты, на этой странице объясняется, как использовать Firebase Admin SDK для программного создания ссылок действий для вышеуказанных потоков, которые вы можете включить в электронные письма своим пользователям.
Это дает следующие преимущества:
- Настраивайте шаблоны электронных писем. Это включает в себя возможность добавлять новые стили и фирменный стиль, изменять текст и логотипы, обращаться к пользователям по имени вместо полного и т. д.
- Применяйте различные шаблоны в зависимости от контекста. Например, если пользователь подтверждает свой адрес электронной почты для подписки на рассылку, контекст может потребоваться указать в тексте письма. Другой пример — вход по ссылке в письме: в одном случае это может быть инициировано тем же пользователем или приглашением от другого пользователя. Контекст необходимо включить в письмо.
- Локализуйте индивидуальные шаблоны электронной почты.
- Возможность генерации ссылки из защищенной серверной среды.
- Возможность настройки способа открытия ссылки (через мобильное приложение или браузер), а также способа передачи дополнительной информации о состоянии и т. д.
- Возможность настройки домена мобильной ссылки, используемого для потоков мобильного приложения при создании ссылки действия электронной почты.
Инициализировать ActionCodeSettings
Прежде чем вы сможете сгенерировать ссылку действия по электронной почте, вам может потребоваться инициализировать экземпляр ActionCodeSettings
.
ActionCodeSettings
позволяет передавать дополнительное состояние через URL-адрес продолжения, доступный после нажатия пользователем ссылки на электронную почту. Это также позволяет пользователю вернуться в приложение после завершения действия. Кроме того, вы можете указать, следует ли обрабатывать ссылку на действие электронной почты непосредственно из мобильного приложения после его установки или из браузера.
Для ссылок, предназначенных для открытия через мобильное приложение, вам потребуется выполнить некоторые действия для их обнаружения в мобильном приложении. Инструкции по настройке мобильных ссылок для действий с электронной почтой см. в разделе «Как настроить мобильные ссылки для действий с электронной почтой».
Чтобы инициализировать экземпляр ActionCodeSettings
, предоставьте следующие данные:
Параметр | Тип | Описание |
---|---|---|
url | нить | Устанавливает ссылку (URL состояния/продолжения), которая имеет разные значения в разных контекстах:
|
iOS | ({bundleId: string}|не определено) | Устанавливает идентификатор пакета iOS, который помогает Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Apple. |
android | ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) | Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android. |
handleCodeInApp | (логическое значение|неопределено) | Будет ли ссылка действия, отправленная по электронной почте, сначала открываться в мобильном приложении или на веб-странице. Значение по умолчанию — false. При значении true ссылка с кодом действия будет отправлена как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при нажатии Continue перенаправит в приложение, если оно установлено. |
linkDomain | (строка|не определено) | Если для проекта определены пользовательские домены для ссылок на хостинг, укажите, какой из них будет использоваться при открытии ссылки в указанном мобильном приложении. В противном случае автоматически выбирается домен по умолчанию (например,PROJECT_ID .firebaseapp.com ). |
dynamicLinkDomain | (строка|не определено) | Устарело. Не указывайте этот параметр. |
В следующем примере показано, как отправить ссылку для подтверждения по электронной почте, которая сначала откроется в мобильном приложении. Глубокая ссылка будет содержать полезную нагрузку URL-адреса для продолжения https://www.example.com/checkout?cartId=1234
. В качестве домена пользовательской ссылки Hosting используется custom-domain.com
, который необходимо настроить для использования с 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',
};
Ява
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();
Питон
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',
)
Идти
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",
}
С#
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",
};
Более подробную информацию см. в разделе Передача состояния в действиях электронной почты .
Сгенерировать ссылку для сброса пароля по электронной почте
Чтобы создать ссылку для сброса пароля, укажите адрес электронной почты текущего пользователя и необязательный объект ActionCodeSettings
. Операция будет выполнена с помощью ссылки действия «Электронная почта». Используемый адрес электронной почты должен принадлежать текущему пользователю.
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.
});
Ява
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());
}
Питон
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)
Идти
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)
С#
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);
После создания ссылки ее можно вставить в электронное письмо для сброса пароля, а затем отправить соответствующему пользователю с помощью специального SMTP-сервера.
Если вы не используете целевую страницу сброса пароля по умолчанию и не создаете собственный обработчик, см. раздел Создание пользовательских обработчиков действий электронной почты .
Создать ссылку для подтверждения адреса электронной почты
Чтобы создать ссылку для подтверждения адреса электронной почты, укажите неподтверждённый адрес электронной почты существующего пользователя и необязательный объект ActionCodeSettings
. Операция будет выполнена с помощью ссылки для действия с адресом электронной почты. Используемый адрес электронной почты должен принадлежать существующему пользователю.
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.
});
Ява
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());
}
Питон
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)
Идти
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)
С#
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);
После создания ссылки ее можно вставить в письмо с подтверждением подлинности, а затем отправить соответствующему пользователю с помощью специального SMTP-сервера.
Если вы не используете целевую страницу проверки электронной почты по умолчанию и создаете собственный обработчик, см. раздел Создание пользовательских обработчиков действий электронной почты .
Сгенерировать ссылку на электронную почту для входа
Прежде чем вы сможете аутентифицировать пользователей с помощью входа по ссылке электронной почты, вам необходимо включить вход по ссылке электронной почты для вашего проекта Firebase.
Чтобы сгенерировать ссылку для входа, укажите адрес электронной почты пользователя и объект ActionCodeSettings
. В данном случае объект ActionCodeSettings
необходим для предоставления информации о том, куда следует вернуть пользователя после нажатия ссылки для завершения входа. Операция завершится ссылкой на действие «Электронная почта».
В отличие от сброса пароля и подтверждения адреса электронной почты, используемый адрес электронной почты не обязательно должен принадлежать существующему пользователю, поскольку эту операцию можно использовать для регистрации новых пользователей в вашем приложении с помощью ссылки из электронной почты.
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.
});
Ява
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());
}
Питон
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)
Идти
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)
С#
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);
После создания ссылки ее можно вставить в электронное письмо для входа в систему, а затем отправить соответствующему пользователю с помощью специального SMTP-сервера.
Узнайте больше об аутентификации пользователей в Firebase с помощью ссылок из электронной почты . Это поможет вам узнать, как завершить вход после того, как пользователь нажмёт на ссылку и будет перенаправлен обратно в приложение.