Передача состояния в действиях по электронной почте

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

Это может быть чрезвычайно полезно в следующих распространенных сценариях:

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

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

  • Как правило, когда пользователь начинает процесс сброса пароля или проверки электронной почты в приложении Apple, он ожидает завершения процесса внутри приложения; возможность передавать состояние через URL-адрес продолжения делает это возможным.

Возможность передавать состояние через URL-адрес продолжения — это мощная функция, предоставляемая Firebase Auth, которая может значительно улучшить взаимодействие с пользователем.

Передача состояния URL-адреса продолжения в действиях по электронной почте

Чтобы безопасно передать URL-адрес продолжения, домен URL-адреса должен быть внесен в белый список в консоли Firebase . Это делается в разделе «Аутентификация» путем добавления этого домена в список Авторизованных доменов на вкладке «Метод входа», если его там еще нет.

Экземпляр FIRActionCodeSettings необходимо предоставить при отправке электронного письма для сброса пароля или электронного письма с подтверждением. Этот интерфейс принимает следующие параметры:

Быстрый

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

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Если ссылка обрабатывается непосредственно в приложении, это параметр запроса continueUrl в глубокой ссылке ссылки Hosting .
iOSBundleID Нить Устанавливает идентификатор пакета iOS, чтобы помочь Firebase Authentication определить, следует ли создавать ссылку только для Интернета или для мобильных устройств, которая открывается на устройстве Apple.
androidPackageName Нить Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать ссылку только для Интернета или для мобильных устройств, которая открывается на устройстве Android.
handleCodeInApp Бул Будет ли ссылка на действие по электронной почте сначала открыта в мобильном приложении или по веб-ссылке. По умолчанию — ложь. Если установлено значение true, ссылка на код действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлено в приложение, если оно установлено.
linkDomain Нить Если для проекта определены пользовательские домены ссылок на хостинг, укажите, какой из них использовать, когда ссылка должна открываться указанным мобильным приложением. В противном случае автоматически выбирается домен по умолчанию (например, PROJECT_ID .firebaseapp.com ).
dynamicLinkDomain Нить Устарело. Не указывайте этот параметр.

Цель-C

Параметр Тип Описание
URL НСстринг

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Когда ссылка обрабатывается непосредственно в приложении, это параметр запроса continueUrl в глубокой ссылке ссылки Hosting .
iOSBundleID НСстринг Устанавливает идентификатор пакета iOS, чтобы помочь Firebase Authentication определить, следует ли создавать ссылку только для Интернета или для мобильных устройств, которая открывается на устройстве Android или Apple.
androidPackageName НСстринг Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать ссылку только для Интернета или для мобильных устройств, которая открывается на устройстве Android или Apple.
handleCodeInApp БООЛ Будет ли ссылка на действие по электронной почте сначала открыта в мобильном приложении или по веб-ссылке. По умолчанию — ложь. Если установлено значение true, ссылка на код действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлено в приложение, если оно установлено.
linkDomain НСстринг Если для проекта определены пользовательские домены ссылок Hosting , укажите, какой из них использовать, когда ссылка должна открываться указанным мобильным приложением. В противном случае автоматически выбирается домен по умолчанию (например, PROJECT_ID .firebaseapp.com ).
dynamicLinkDomain НСстринг Устарело. Не указывайте этот параметр.

В следующем примере показано, как отправить ссылку для подтверждения по электронной почте, которая сначала откроется в мобильном приложении, используя собственный домен ссылки Hosting custom-domain.com . Глубокая ссылка будет содержать полезные данные URL-адреса продолжения https://www.example.com/?email=user@example.com .

Быстрый

var actionCodeSettings =  ActionCodeSettings.init()
actionCodeSettings.canHandleInApp = true
let user = Auth.auth().currentUser()
actionCodeSettings.URL =
    String(format: "https://www.example.com/?email=%@", user.email)
actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier!
actionCodeSettings.setAndroidPakageName("com.example.android")
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
actionCodeSettings.linkDomain = "custom-domain.com"
user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in
  if error {
    // Error occurred. Inspect error.code and handle error.
    return
  }
  // Email verification sent.
})

Цель-C

 FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init];
 actionCodeSettings.handleCodeInApp = YES;
 FIRUser *user = [FIRAuth auth].currentUser;
 NSString *urlString =
     [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email];
 actionCodeSettings.URL = [NSURL URLWithString:urlString];
 actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier;
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
 actionCodeSettings.linkDomain = @"custom-domain.com";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

Firebase Authentication использует Firebase Hosting при отправке ссылки, которая должна быть открыта в мобильном приложении. Чтобы использовать эту функцию, ссылки Hosting необходимо настроить в консоли Firebase .

  1. Настройка приложений Apple:

    1. Если вы планируете обрабатывать эти ссылки из своего приложения, вам необходимо настроить домен ссылки Hosting как связанный домен в возможностях вашего приложения.
    2. Подробнее об этом читайте в инструкциях по получению ссылок на хостинг iOS .
  2. Настройка Android-приложений:

    1. Если вы планируете обрабатывать эти ссылки из своего приложения Android, имя пакета вашего приложения необходимо указать в настройках проекта консоли Firebase . Кроме того, необходимо предоставить SHA-1 и SHA-256 сертификата приложения.
    2. Вам также потребуется настроить фильтр намерений для глубокой ссылки в файле AndroidManifest.xml .
    3. Подробнее об этом читайте в инструкциях по получению ссылок на хостинг Android .

Обработка действий с электронной почтой в веб-приложении

Вы можете указать, хотите ли вы сначала обработать ссылку с кодом действия из веб-приложения, а затем перенаправить на другую веб-страницу или мобильное приложение после успешного завершения, при условии, что мобильное приложение доступно. Это делается путем установки handleCodeInApp значения false в объекте FIRActionCodeSettings (Obj-C) или ActionCodeSettings (Swift). Хотя идентификатор пакета или имя пакета Android не требуются, их предоставление позволит пользователю перенаправить обратно в указанное приложение после завершения кода действия по электронной почте.

Здесь используется веб-URL-адрес, настроенный в разделе шаблонов действий по электронной почте. Для всех проектов предусмотрен стандарт по умолчанию. Обратитесь к настройке обработчиков электронной почты , чтобы узнать больше о том, как настроить обработчик действий электронной почты.

В этом случае ссылка в параметре запроса continueURL будет ссылкой Hosting , полезной нагрузкой которой является URL указанный в объекте ActionCodeSettings .

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

Обработка действий с электронной почтой в мобильном приложении

Вы можете указать, хотите ли вы сначала обрабатывать ссылку с кодом действия в своем мобильном приложении, если оно установлено. Если ссылка нажимается на устройстве, которое не поддерживает мобильное приложение, вместо этого она открывается с веб-страницы. Это делается путем установки handleCodeInApp значения true в объекте FIRActionCodeSettings (Obj-C) или ActionCodeSettings (Swift). Также необходимо указать имя или идентификатор пакета Android мобильного приложения. Резервный URL-адрес веб-сайта, используемый здесь, когда мобильное приложение недоступно, настроен в разделе шаблонов действий по электронной почте. Для всех проектов предусмотрен стандарт по умолчанию. Обратитесь к настройке обработчиков электронной почты , чтобы узнать больше о том, как настроить обработчик действий электронной почты.

В этом случае ссылка на мобильное приложение, отправленная пользователю, будет ссылкой Hosting , полезной нагрузкой которой является URL-адрес кода действия, настроенный в консоли, с параметрами запроса oobCode , mode , apiKey и continueUrl . Последний будет исходным URL указанным в объекте FIRActionCodeSettings (Obj-C) или ActionCodeSettings (Swift). Код действия можно применить непосредственно из мобильного приложения аналогично тому, как он обрабатывается из веб-потока, описанного в разделе настройки обработчиков электронной почты .

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