Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В следующем примере показано , как отправить ссылку для подтверждения электронной почты , которая будет открыта в мобильное приложение сначала в качестве Firebase Dynamic Link (Apple приложение com.example.ios или Android приложение com.example.android , где приложение будет установить , если он еще не установлен и минимальная версия - 12). Глубокая ссылка будет содержать по- прежнему URL полезной нагрузки https://www.example.com/checkout?cartId=1234 . Домен динамическая связь используется coolapp.page.link , который должен быть настроен для использования с Firebase Dynamic Links.

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

Чтобы узнать больше, см Передача государства в E - mail Actions .

Для того, чтобы сгенерировать ссылку для сброса пароля, обеспечивает электронную почту существующего пользователя и дополнительный 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());
}

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 объект. Операция будет разрешена с помощью ссылки на действие электронной почты. Используемый адрес электронной почты должен принадлежать существующему пользователю.

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

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 объект в этом случае требуется , чтобы предоставить информацию о том, где пользователь возвращается после нажатия на ссылку для входа в завершении. Операция будет разрешена с помощью ссылки на действие электронной почты.

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

Node.js

// Admin SDK API to generate the sign in with email link.
const usremail = 'user@example.com';
getAuth()
  .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 ссылки . Это поможет предоставить информацию о том, как выполнить вход после того, как пользователь щелкнет ссылку и будет перенаправлен обратно в приложение.