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

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

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

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

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

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

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

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

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

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

Быстрый

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

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

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

Цель-C

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

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Когда ссылка обрабатывается в приложении напрямую, это параметр запроса continueUrl в глубокой ссылке динамической ссылки.
iOSBundleID NSString Устанавливает идентификатор пакета. Это попытается открыть ссылку в приложении Apple, если оно установлено. Приложение должно быть зарегистрировано в консоли.
androidPackageName NSString Устанавливает имя пакета Android. Это попытается открыть ссылку в приложении для Android, если оно установлено.
androidInstallIfNotAvailable BOOL указывает, следует ли устанавливать приложение Android, если устройство поддерживает его, а приложение еще не установлено. Если это поле предоставлено без имени пакета, выдается ошибка, объясняющая, что имя пакета должно быть предоставлено вместе с этим полем.
androidMinimumVersion NSString Минимальная версия приложения, поддерживаемая в этом потоке. Если указано MinimumVersion и установлена ​​более старая версия приложения, пользователь перенаправляется в Play Store для обновления приложения. Приложение Android должно быть зарегистрировано в консоли.
handleCodeInApp BOOL Будет ли ссылка действия электронной почты сначала открыта в мобильном приложении или в веб-ссылке. Значение по умолчанию — ложь. Если установлено значение true, ссылка на код действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В ложном случае код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлен в приложение, если оно установлено.
dynamicLinkDomain NSString Устанавливает домен динамической ссылки (или поддомен), который будет использоваться для текущей ссылки, если она должна быть открыта с использованием динамических ссылок 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,
                                         minumumVersion:"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. Если вы еще не приняли условия динамических ссылок и не создали домен динамических ссылок, сделайте это сейчас.

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

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