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

Вы можете передавать состояние через 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 необходимо зарегистрировать в консоли.
handleCodeInApp бул Будет ли ссылка действия, отправленная по электронной почте, сначала открываться в мобильном приложении или на веб-странице. Значение по умолчанию — false. При значении true ссылка с кодом действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при нажатии Continue перенаправит в приложение, если оно установлено.
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 при отправке ссылки, предназначенной для открытия в мобильном приложении. Для использования этой функции динамические ссылки необходимо настроить в консоли Firebase.

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