Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

Создание ссылок на действия по электронной почте

Мобильным приложениям иногда необходимо взаимодействовать с пользователями и предлагать им выполнить определенные действия, отправляя электронные письма.

Пакеты Firebase Admin SDK предоставляют возможность отправлять пользователям электронные письма, содержащие ссылки, которые они могут использовать для сброса пароля, проверки адреса электронной почты и входа на основе электронной почты. Эти электронные письма отправляются Google и имеют ограниченную настраиваемость.

Если вы хотите вместо этого использовать собственные шаблоны электронной почты и собственную службу доставки электронной почты, вы можете использовать Firebase Admin SDK для программного создания ссылок действий для вышеуказанных потоков, которые вы можете включать в электронные письма своим пользователям.

Это дает следующие преимущества:

  • Настройте шаблоны писем. Это включает в себя возможность добавлять новые стили и индивидуальный брендинг, изменять формулировки и логотипы, обращаться к пользователям по имени вместо полного имени и так далее.
  • Применяйте разные шаблоны в зависимости от контекста. Например, если пользователь проверяет свой адрес электронной почты для подписки на информационный бюллетень, может потребоваться предоставить контекст в содержимом электронной почты. Другой пример - вход по электронной почте: в одном сценарии это может быть инициировано одним и тем же пользователем или по приглашению другого пользователя. Контекст должен быть включен в электронное письмо.
  • Локализуйте индивидуальные шаблоны писем.
  • Возможность генерировать ссылку из безопасной серверной среды.
  • Возможность настроить способ открытия ссылки через мобильное приложение или браузер, а также способ передачи дополнительной информации о состоянии и т. Д.
  • Возможность настроить домен динамической ссылки, используемый для потоков мобильных приложений при создании ссылки действия электронной почты, и даже указать другой домен динамической ссылки в зависимости от контекста или мобильного приложения.

Инициализировать ActionCodeSettings

Прежде чем вы сможете создать ссылку на действие электронной почты, вам может потребоваться инициализировать экземпляр ActionCodeSettings .

ActionCodeSettings позволяет передавать дополнительное состояние через URL-адрес продолжения, который становится доступным после того, как пользователь щелкнет ссылку электронной почты. Это также дает пользователю возможность вернуться в приложение после завершения действия. Кроме того, вы можете указать, обрабатывать ли ссылку на действие электронной почты непосредственно из мобильного приложения, когда оно установлено, или из браузера.

Для ссылок, которые предназначены для открытия через мобильное приложение, вам необходимо включить динамические ссылки Firebase и выполнить некоторые задачи для обнаружения этих ссылок из вашего мобильного приложения. См. Инструкции по настройке динамических ссылок Firebase для действий по электронной почте.

Чтобы инициализировать экземпляр ActionCodeSettings , предоставьте следующие данные:

Параметр Тип Описание
url строка

Устанавливает ссылку (URL-адрес состояния / продолжения), которая имеет разное значение в разных контекстах:

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Когда ссылка обрабатывается в приложении напрямую, это параметр запроса continueUrl в глубинной ссылке динамической ссылки.
iOS ({bundleId: строка} | не определено) Устанавливает идентификатор пакета iOS. Это попытается открыть ссылку в приложении iOS, если оно установлено. Приложение iOS необходимо зарегистрировать в консоли.
android ({packageName: string, installApp: boolean | undefined, minimumVersion: string | undefined} | undefined) Устанавливает имя пакета Android. Это попытается открыть ссылку в приложении для Android, если оно установлено. Если параметр installApp передан, он указывает, следует ли устанавливать приложение Android, если устройство поддерживает его и приложение еще не установлено. Если это поле предоставляется без packageName , packageName ошибка, объясняющая, что packageName должно быть указано вместе с этим полем. Если minimumVersion и установлена ​​более старая версия приложения, пользователь попадает в Play Store для обновления приложения. Приложение Android необходимо зарегистрировать в консоли.
handleCodeInApp (логическое | неопределенное) Будет ли сначала открываться ссылка на действие электронной почты в мобильном приложении или веб-ссылка. По умолчанию - false. Если установлено значение true, ссылка на код действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В ложном случае код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлен в приложение, если оно установлено.
dynamicLinkDomain (строка | не определено) Устанавливает домен (или поддомен) динамической ссылки, который будет использоваться для текущей ссылки, если она должна быть открыта с помощью динамических ссылок Firebase. Поскольку для одного проекта можно настроить несколько доменов с динамической связью, в этом поле можно явно выбрать один. Если ничего не указано, по умолчанию используется самый старый домен.

В следующем примере показано, как отправить ссылку для подтверждения электронной почты, которая сначала откроется в мобильном приложении как динамическая ссылка Firebase (приложение iOS com.example.ios или приложение Android com.example.android где приложение будет установлено, если оно еще не установлено, и минимальная версия - 12). Глубинная ссылка будет содержать полезную нагрузку URL продолжения https://www.example.com/checkout?cartId=1234 . Используемый домен динамической ссылки - coolapp.page.link , который необходимо настроить для использования с динамическими ссылками 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',
};

Ява

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

Идти

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

Дополнительные сведения см. В разделе « Передача состояния в действиях с электронной почтой» .

Чтобы создать ссылку для сброса пароля, ActionCodeSettings адрес электронной почты существующего пользователя и необязательный объект ActionCodeSettings . Операция будет разрешена с помощью ссылки на действие электронной почты. Используемый адрес электронной почты должен принадлежать существующему пользователю.

Node.js

// Admin SDK API to generate the password reset link.
const userEmail = 'user@example.com';
admin
  .auth()
  .generatePasswordResetLink(userEmail, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, 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());
}

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)

Идти

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);

После создания ссылки ее можно вставить в электронное письмо для сброса пароля, а затем отправить по электронной почте соответствующему пользователю с помощью настраиваемого SMTP-сервера.

Если вы не используете целевую страницу для сброса пароля по умолчанию и не создаете свой собственный обработчик, см. Создание настраиваемых обработчиков действий электронной почты .

Чтобы создать ссылку для подтверждения электронной почты, ActionCodeSettings неподтвержденный адрес электронной почты существующего пользователя и необязательный объект ActionCodeSettings . Операция будет разрешена с помощью ссылки на действие электронной почты. Используемый адрес электронной почты должен принадлежать существующему пользователю.

Node.js

// Admin SDK API to generate the password reset link.
const email = 'user@example.com';
admin
  .auth()
  .generatePasswordResetLink(email, actionCodeSettings)
  .then((link) => {
    // Construct password reset email template, embed the link and send
    // using custom SMTP server.
    return sendCustomPasswordResetEmail(email, displayName, link);
  })
  .catch((error) => {
    // Some error occurred.
  });

// Admin SDK API to generate the email verification link.
const useremail = 'user@example.com';
admin
  .auth()
  .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());
}

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)

Идти

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);

После создания ссылки ее можно вставить в настраиваемое письмо с подтверждением и затем отправить по электронной почте соответствующему пользователю с помощью настраиваемого SMTP-сервера.

Если вы не используете целевую страницу подтверждения электронной почты по умолчанию и не создаете свой собственный обработчик, см. Создание настраиваемых обработчиков действий электронной почты .

Прежде чем вы сможете аутентифицировать пользователей с помощью ссылки для входа по электронной почте, вам необходимо включить вход по электронной почте для вашего проекта Firebase.

Чтобы создать ссылку для ActionCodeSettings адрес электронной почты пользователя и объект ActionCodeSettings . В этом случае требуется объект ActionCodeSettings чтобы предоставить информацию о том, куда следует вернуть пользователя после щелчка по ссылке для завершения входа. Операция будет разрешена с помощью ссылки на действие электронной почты.

В отличие от сброса пароля и подтверждения адреса электронной почты, используемый адрес электронной почты не обязательно должен принадлежать существующему пользователю, так как эту операцию можно использовать для регистрации новых пользователей в вашем приложении по ссылке электронной почты.

Node.js

// Admin SDK API to generate the sign in with email link.
const usremail = 'user@example.com';
admin
  .auth()
  .generateSignInWithEmailLink(usremail, actionCodeSettings)
  .then((link) => {
    // Construct sign-in with email link template, embed the link and
    // send using custom SMTP server.
    return sendSignInEmail(usremail, 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());
}

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)

Идти

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);

После создания ссылки ее можно вставить в настраиваемое электронное письмо для входа, а затем отправить по электронной почте соответствующему пользователю с помощью настраиваемого SMTP-сервера.

Подробнее об аутентификации пользователей с помощью Firebase с помощью ссылок электронной почты . Это поможет предоставить информацию о том, как выполнить вход после того, как пользователь щелкнет ссылку и будет перенаправлен обратно в приложение.