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

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

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

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

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

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

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

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

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

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

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

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это и есть глубокая ссылка в параметре запроса continueUrl .
  • Когда ссылка обрабатывается непосредственно в приложении, это параметр запроса continueUrl в глубокой ссылке динамической ссылки.
iOSBundleId Нить Задает идентификатор пакета. Это позволит попытаться открыть ссылку в приложении Apple, если оно установлено. Приложение должно быть зарегистрировано в консоли. Если идентификатор пакета не указан, значение этого поля устанавливается равным идентификатору пакета основного пакета приложения.
androidPackageName Нить Задает имя пакета Android. Это позволит попытаться открыть ссылку в приложении Android, если оно установлено.
androidInstallApp буль Указывает, следует ли устанавливать приложение Android, если устройство его поддерживает и приложение еще не установлено. Если это поле указано без параметра packageName, будет выдана ошибка, объясняющая, что параметр packageName необходимо указать вместе с этим полем.
androidMinimumVersion Нить Минимальная версия приложения, поддерживаемая в данном процессе. Если указана минимальная версия, и установлена ​​более старая версия приложения, пользователь перенаправляется в Play Store для обновления приложения. Приложение Android необходимо зарегистрировать в консоли.
handleCodeInApp буль Определяет, будет ли ссылка в электронном письме сначала открываться в мобильном приложении или по веб-ссылке. По умолчанию — false. Если установлено значение true, ссылка с кодом действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В случае значения false код будет сначала отправлен в веб-виджет, а затем при продолжении будет перенаправлен в приложение, если оно установлено.
dynamicLinkDomain Нить (Устарело, используйте `linkDomain`) Задает домен (или поддомен) динамической ссылки, используемой для текущей ссылки, если она должна быть открыта с помощью динамических ссылок Firebase. Поскольку для одного проекта можно настроить несколько доменов динамических ссылок, это поле позволяет явно выбрать один из них. Если домен не указан, по умолчанию используется первый домен. linkDomain Нить Дополнительный пользовательский домен Firebase Hosting, используемый при открытии ссылки через указанное мобильное приложение. Домен должен быть настроен в Firebase 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 при отправке ссылки, предназначенной для открытия в мобильном приложении. Для использования этой функции необходимо настроить динамические ссылки в консоли Firebase.

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

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

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

    3. Если вы уже создали домен с динамическими ссылками, запишите его. Обычно домен с динамическими ссылками выглядит следующим образом:

      example.page.link

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

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

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

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

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

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

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

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

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

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

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

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

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