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

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

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

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

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

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

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

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

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

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

Быстрый

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

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Если ссылка обрабатывается непосредственно в приложении, это параметр запроса continueUrl в глубокой ссылке динамической ссылки.
iOSBundleID Нить Устанавливает идентификатор пакета. Будет предпринята попытка открыть ссылку в приложении Apple, если оно установлено. Приложение необходимо зарегистрировать в консоли. Если идентификатор пакета не указан, значение этого поля устанавливается на идентификатор основного пакета приложения.
androidPackageName Нить Устанавливает имя пакета Android. Будет предпринята попытка открыть ссылку в приложении Android, если оно установлено.
androidInstallIfNotAvailable Бул Указывает, следует ли устанавливать приложение Android, если устройство его поддерживает и приложение еще не установлено. Если это поле указано без имени пакета, выдается ошибка, объясняющая, что имя пакета должно быть указано вместе с этим полем.
androidMinimumVersion Нить Минимальная версия приложения, поддерживаемая в этом потоке. Если указан минимумVersion и установлена ​​более старая версия приложения, пользователь перенаправляется в Play Store для обновления приложения. Приложение Android необходимо зарегистрировать в консоли.
handleCodeInApp Бул Будет ли ссылка на действие по электронной почте сначала открыта в мобильном приложении или по веб-ссылке. По умолчанию — ложь. Если установлено значение true, ссылка на код действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлено в приложение, если оно установлено.
dynamicLinkDomain Нить Устанавливает домен динамической ссылки (или поддомен), который будет использоваться для текущей ссылки, если она должна быть открыта с помощью динамических ссылок Firebase. Поскольку для каждого проекта можно настроить несколько доменов динамических ссылок, это поле дает возможность явно выбрать один из них. Если ничего не указано, по умолчанию используется первый домен.

Цель-C

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

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Если ссылка обрабатывается непосредственно в приложении, это параметр запроса continueUrl в глубокой ссылке динамической ссылки.
iOSBundleID НСстринг Устанавливает идентификатор пакета. Будет предпринята попытка открыть ссылку в приложении Apple, если оно установлено. Приложение необходимо зарегистрировать в консоли.
androidPackageName НСстринг Устанавливает имя пакета Android. Будет предпринята попытка открыть ссылку в приложении Android, если оно установлено.
androidInstallIfNotAvailable БООЛ указывает, следует ли устанавливать приложение Android, если устройство его поддерживает и приложение еще не установлено. Если это поле указано без имени пакета, выдается ошибка, объясняющая, что имя пакета должно быть указано вместе с этим полем.
androidMinimumVersion НСстринг Минимальная версия приложения, поддерживаемая в этом потоке. Если указано минимальное значение и установлена ​​более старая версия приложения, пользователь перенаправляется в Play Store для обновления приложения. Приложение Android необходимо зарегистрировать в консоли.
handleCodeInApp БООЛ Будет ли ссылка на действие по электронной почте сначала открыта в мобильном приложении или по веб-ссылке. По умолчанию — ложь. Если установлено значение true, ссылка на код действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлено в приложение, если оно установлено.
dynamicLinkDomain НСстринг Устанавливает домен динамической ссылки (или поддомен), который будет использоваться для текущей ссылки, если она должна быть открыта с помощью динамических ссылок Firebase. Поскольку для каждого проекта можно настроить несколько доменов динамических ссылок, это поле дает возможность явно выбрать один из них. Если ничего не указано, по умолчанию используется первый домен.

В следующем примере показано, как отправить ссылку для подтверждения электронной почты, которая сначала откроется в мобильном приложении как динамическую ссылку Firebase, используя собственный домен динамических ссылок example.page.link (приложение для iOS com.example.ios или приложение для Android com.example.android , на который будет установлено приложение, если оно еще не установлено, и минимальная версия — 12 ). Глубокая ссылка будет содержать полезные данные 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",
                                         installIfNotAvailable:true,
                                         minimumVersion:"12")
// When multiple custom dynamic link domains are defined, specify which one to use.
actionCodeSettings.dynamicLinkDomain = "example.page.link"
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;
 // When multiple custom dynamic link domains are defined, specify which one to use.
 actionCodeSettings.dynamicLinkDomain = @"example.page.link";
 [actionCodeSettings setAndroidPackageName:@"com.example.android"
                     installIfNotAvailable:YES
                            minimumVersion:'12'];
 [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings
                                        completion:^(NSError *_Nullable error) {
   if (error) {
     // Error occurred. Inspect error.code and handle error.
     return;
   }
   // Email verification sent.
 }];

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

  1. Включите динамические ссылки Firebase:

    1. В консоли Firebase откройте раздел Dynamic Links .
    2. Если вы еще не приняли условия Dynamic Links и не создали домен Dynamic Links , сделайте это сейчас.

      Если вы уже создали домен Dynamic Links , обратите на это внимание. Домен Dynamic Links обычно выглядит следующим образом:

      example.page.link

      Это значение понадобится вам, когда вы настроите приложение Apple или Android для перехвата входящей ссылки.

  2. Настройка Android-приложений:

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

    1. Если вы планируете обрабатывать эти ссылки из своего приложения, идентификатор пакета необходимо указать в настройках проекта Firebase Console. Кроме того, необходимо указать идентификатор App Store и идентификатор команды разработчиков Apple.
    2. Вам также потребуется настроить домен универсальной ссылки FDL как связанный домен в возможностях вашего приложения.
    3. Если вы планируете распространять свое приложение на iOS версии 8 и ниже, вам нужно будет установить идентификатор пакета в качестве собственной схемы для входящих URL-адресов.
    4. Дополнительную информацию см. в инструкциях по получению динамических ссылок на платформах Apple .

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

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

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

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

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

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

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

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

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