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

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

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

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

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

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

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

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

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

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

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

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Когда ссылка обрабатывается в приложении напрямую, это параметр запроса continueUrl в глубокой ссылке динамической ссылки.
iOSBundleId Нить Устанавливает идентификатор пакета. Это попытается открыть ссылку в приложении Apple, если оно установлено. Приложение должно быть зарегистрировано в консоли. Если идентификатор пакета не указан, значение этого поля устанавливается на идентификатор пакета основного пакета приложения.
androidPackageName Нить Задает имя пакета Android. Это попытается открыть ссылку в приложении Android, если оно установлено.
androidInstallApp бул Указывает, следует ли устанавливать приложение Android, если устройство его поддерживает и приложение еще не установлено. Если это поле указано без packageName, выдается ошибка, объясняющая, что packageName необходимо указать вместе с этим полем.
androidMinimumVersion Нить Минимальная версия приложения, поддерживаемая в этом потоке. Если указано minimumVersion и установлена ​​более старая версия приложения, пользователь перенаправляется в Play Store для обновления приложения. Приложение Android должно быть зарегистрировано в Console.
handleCodeInApp бул Будет ли ссылка действия электронной почты сначала открыта в мобильном приложении или веб-ссылке. Значение по умолчанию — false. Если установлено значение true, ссылка кода действия будет отправлена ​​как универсальная ссылка или ссылка приложения Android и будет открыта приложением, если оно установлено. В случае false код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлен в приложение, если оно установлено.
dynamicLinkDomain Нить (Устарело, используйте `linkDomain`) Устанавливает домен динамической ссылки (или поддомен), который будет использоваться для текущей ссылки, если она будет открыта с помощью Firebase Dynamic Links. Поскольку для каждого проекта можно настроить несколько доменов динамической ссылки, это поле предоставляет возможность явно выбрать один из них. Если ничего не указано, по умолчанию используется первый домен. linkDomain Нить Необязательный пользовательский домен Firebase Hosting, который следует использовать, когда ссылка должна открываться через указанное мобильное приложение. Домен должен быть настроен в Firebase Hosting и принадлежать проекту. Это не может быть доменом Hosting по умолчанию (`web.app` или `firebaseapp.com`). Это заменяет устаревшую настройку `dynamicLinkDomain`.

В следующем примере показано, как отправить ссылку для подтверждения адреса электронной почты, которая сначала откроется в мобильном приложении как динамическая ссылка Firebase с использованием пользовательского домена динамической ссылки example.page.link (приложение iOS com.example.ios или приложение Android com.example.android где приложение будет установлено, если оно еще не установлено, и минимальная версия — 12 ). Глубокая ссылка будет содержать полезную нагрузку URL продолжения https://www.example.com/?email=user@example.com .

final user = FirebaseAuth.instance.currentUser;

final actionCodeSettings = ActionCodeSettings(
  url: "http://www.example.com/verify?email=${user?.email}",
  iOSBundleId: "com.example.ios",
  androidPackageName: "com.example.android",
);

await user?.sendEmailVerification(actionCodeSettings);

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

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

    1. В консоли Firebase откройте раздел «Динамические ссылки» .

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

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

      example.page.link

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

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

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

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

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

Вы можете указать, хотите ли вы сначала обработать ссылку на код действия в вашем мобильном приложении, при условии, что оно установлено. В приложениях Android вы также можете указать через androidInstallApp , что приложение должно быть установлено, если устройство поддерживает его и оно еще не установлено. Если ссылка нажата с устройства, которое не поддерживает мобильное приложение, она открывается с веб-страницы. Это делается путем установки handleCodeInApp в значение true в объекте ActionCodeSettings . Также необходимо указать имя пакета Android мобильного приложения или идентификатор пакета. Резервный веб-URL, используемый здесь, когда мобильное приложение недоступно, — это URL-адрес, настроенный в разделе шаблонов действий электронной почты. Для всех проектов предоставляется URL-адрес по умолчанию. Подробнее о настройке обработчиков действий электронной почты см. в разделе Настройка обработчиков электронной почты.

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

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