При отправке электронных писем с действиями по сбросу пароля или подтверждению электронной почты пользователя можно передавать состояние через URL-адрес продолжения. Это позволяет пользователю вернуться в приложение после завершения действия. Кроме того, можно указать, следует ли обрабатывать ссылку на действие в электронном письме непосредственно из установленного мобильного приложения, а не с веб-страницы.
Это может быть чрезвычайно полезно в следующих распространенных ситуациях:
Пользователь, в данный момент не авторизованный, может пытаться получить доступ к контенту, для доступа к которому требуется вход в систему. Однако пользователь мог забыть свой пароль и, следовательно, запустить процесс сброса пароля. В конце этого процесса пользователь ожидает вернуться к тому разделу приложения, к которому он пытался получить доступ.
Приложение может предоставлять доступ только подтвержденным учетным записям. Например, для подписки на новостную рассылку может потребоваться подтверждение адреса электронной почты. Пользователь пройдет процедуру подтверждения электронной почты и должен будет вернуться в приложение, чтобы завершить подписку.
В других случаях пользователь мог начать процесс со своего мобильного устройства и ожидать после проверки вернуться в мобильное приложение, а не в браузер.
Возможность передавать состояние через URL-адрес продолжения — это мощная функция, предоставляемая Firebase Auth, которая может значительно улучшить пользовательский опыт.
Передача состояния URL-адреса продолжения в действиях электронной почты
Для безопасной передачи URL-адреса продолжения необходимо добавить домен этого URL-адреса в качестве авторизованного домена:
В консоли Firebase перейдите в раздел Безопасность > Аутентификация > Вкладка Настройки .
В разделе «Авторизованные домены» нажмите «Добавить домен» и добавьте URL-адрес.
Для отправки письма для сброса пароля или письма с подтверждением необходимо предоставить экземпляр firebase.auth.ActionCodeSettings . Этот интерфейс принимает следующие параметры:
| Параметр | Тип | Описание |
|---|---|---|
url | нить | Задает ссылку (URL состояния/продолжения), которая имеет различное значение в разных контекстах:
|
iOS | ({bundleId: string}|undefined) | Устанавливает идентификатор пакета iOS, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Apple. |
android | ({packageName: string, installApp:boolean|undefined, minimumVersion: string|undefined}|undefined) | Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android. |
handleCodeInApp | (логическое значение|неопределенное значение) | Определяет, будет ли ссылка в электронном письме сначала открываться в мобильном приложении или по веб-ссылке. По умолчанию — false. Если установлено значение true, ссылка с кодом действия будет отправлена как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В случае значения false код будет сначала отправлен в веб-виджет, а затем при нажатии кнопки «Продолжить» будет перенаправлен в приложение, если оно установлено. |
linkDomain | (строка|неопределено) | При определении пользовательских доменов для ссылок Hosting для проекта укажите, какой из них следует использовать при открытии ссылки указанным мобильным приложением. В противном случае автоматически выбирается домен по умолчанию (например,PROJECT_ID .firebaseapp.com ). |
dynamicLinkDomain | (строка|неопределено) | Устарело. Не указывайте этот параметр. |
Следующий пример иллюстрирует, как отправить ссылку для подтверждения электронной почты, которая сначала откроется в мобильном приложении, используя пользовательский домен Hosting custom-domain.com . Эта прямая ссылка будет содержать URL-адрес для продолжения: https://www.example.com/?email=user@example.com .
const actionCodeSettings = {
url: 'https://www.example.com/?email=' + firebase.auth().currentUser.email,
iOS: {
bundleId: 'com.example.ios'
},
android: {
packageName: 'com.example.android',
},
handleCodeInApp: true,
// Specify a custom Hosting link domain to use. The domain must be
// configured in Firebase Hosting and owned by the project.
linkDomain: "custom-domain.com"
};
firebase.auth().currentUser.sendEmailVerification(actionCodeSettings)
.then(function() {
// Verification email sent.
})
.catch(function(error) {
// Error occurred. Inspect error.code.
});
Настройка ссылок Firebase Hosting
Firebase Authentication использует Firebase Hosting при отправке ссылки, предназначенной для открытия в мобильном приложении. Для использования этой функции необходимо настроить ссылки Hosting в консоли Firebase .
Настройка приложений Android:
- Если вы планируете обрабатывать эти ссылки из своего Android-приложения, необходимо указать имя пакета вашего приложения в настройках проекта в консоли Firebase . Кроме того, необходимо предоставить хеши SHA-1 и SHA-256 сертификата приложения.
- Вам также потребуется настроить фильтр намерений для глубокой ссылки в файле
AndroidManifest.xml. - Для получения более подробной информации по этому вопросу обратитесь к инструкциям по получению ссылок на хостинг Android .
Настройка приложений iOS:
- Если вы планируете обрабатывать эти ссылки из своего iOS-приложения, вам потребуется настроить домен ссылки Hosting как связанный домен в параметрах вашего приложения.
- Для получения более подробной информации обратитесь к инструкциям по получению ссылок на iOS-хостинг .
Обработка действий с электронной почтой в веб-приложении
Вы можете указать, хотите ли вы сначала обработать ссылку с кодом действия из веб-приложения, а затем перенаправить пользователя на другую веб-страницу или в мобильное приложение после успешного завершения, при условии, что мобильное приложение доступно. Это делается путем установки handleCodeInApp в значение false в объекте firebase.auth.ActionCodeSettings . Хотя идентификатор пакета iOS или имя пакета Android не обязательны, их предоставление позволит пользователю вернуться в указанное приложение после завершения действия с кодом действия в электронном письме.
Здесь используется веб-адрес, настроенный в разделе шаблонов действий электронной почты. Для всех проектов предоставляется адрес по умолчанию. Подробнее о настройке обработчика действий электронной почты см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка в параметре запроса continueUrl будет ссылкой на хостинг, содержимое которой будет представлять собой URL указанный в объекте ActionCodeSettings .
При обработке действий с электронной почтой, таких как подтверждение адреса электронной почты, код действия из параметра запроса oobCode необходимо извлечь из прямой ссылки, а затем применить с помощью applyActionCode чтобы изменения вступили в силу, то есть, чтобы электронное письмо было подтверждено.
Обработка действий с электронной почтой в мобильном приложении
Вы можете указать, хотите ли вы сначала обрабатывать ссылку с кодом действия в своем мобильном приложении, при условии, что оно установлено. Если ссылка будет нажата с устройства, которое не поддерживает мобильное приложение, она откроется с веб-страницы. Это делается путем установки handleCodeInApp в true в объекте firebase.auth.ActionCodeSettings . Также необходимо указать имя пакета Android мобильного приложения или идентификатор пакета iOS.
В качестве резервного веб-адреса, используемого в случае отсутствия мобильного приложения, применяется адрес, указанный в разделе шаблонов действий электронной почты. Для всех проектов предусмотрен адрес по умолчанию. Дополнительную информацию о настройке обработчика действий электронной почты см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка на мобильное приложение, отправленная пользователю, будет представлять собой ссылку Hosting , полезная нагрузка которой — это URL-адрес кода действия, настроенный в консоли, с параметрами запроса oobCode , mode , apiKey и continueUrl . Последний будет исходным URL указанным в объекте ActionCodeSettings . Код действия можно применить непосредственно из мобильного приложения аналогично тому, как это обрабатывается в веб-процессе, описанном в разделе настройки обработчиков электронной почты .
При обработке действий с электронной почтой, таких как подтверждение адреса электронной почты, код действия из параметра запроса oobCode необходимо извлечь из прямой ссылки, а затем применить с помощью applyActionCode чтобы изменения вступили в силу, то есть, чтобы электронное письмо было подтверждено.