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: string} | undefined) Устанавливает идентификатор пакета iOS. Это попытается открыть ссылку в приложении iOS, если оно установлено. Приложение iOS должно быть зарегистрировано в консоли.
android ({packageName: string, installApp: boolean | undefined, минимумVersion: строка | 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();
 

питон

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

Чтобы узнать больше, см. Passing State в действиях электронной почты .

Чтобы создать ссылку для сброса пароля, 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());
}
 

питон

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

питон

 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 объект 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());
}
 

питон

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