При отправке электронных писем с действиями по сбросу пароля или подтверждению электронной почты пользователя можно передавать состояние через URL-адрес продолжения. Это позволяет пользователю вернуться в приложение после завершения действия. Кроме того, можно указать, следует ли обрабатывать ссылку на действие в электронном письме непосредственно из установленного мобильного приложения, а не с веб-страницы.
Это может быть чрезвычайно полезно в следующих распространенных ситуациях:
Пользователь, в данный момент не авторизованный, может пытаться получить доступ к контенту, для доступа к которому требуется вход в систему. Однако пользователь мог забыть свой пароль и, следовательно, запустить процесс сброса пароля. В конце этого процесса пользователь ожидает вернуться к тому разделу приложения, к которому он пытался получить доступ.
Приложение может предоставлять доступ только подтвержденным учетным записям. Например, для подписки на новостную рассылку может потребоваться подтверждение адреса электронной почты. Пользователь пройдет процедуру подтверждения электронной почты и должен будет вернуться в приложение, чтобы завершить подписку.
В других случаях пользователь мог начать процесс со своего мобильного устройства и ожидать после проверки вернуться в мобильное приложение, а не в браузер.
Возможность передавать состояние через URL-адрес продолжения — это мощная функция, предоставляемая Firebase Auth, которая может значительно улучшить пользовательский опыт.
Передача состояния URL-адреса продолжения в действиях электронной почты
Для безопасной передачи URL-адреса продолжения необходимо добавить домен этого URL-адреса в качестве авторизованного домена:
В консоли Firebase перейдите в раздел Безопасность > Аутентификация > Вкладка Настройки .
В разделе «Авторизованные домены» нажмите «Добавить домен» и добавьте URL-адрес.
Для отправки письма для сброса пароля или письма с подтверждением необходимо предоставить экземпляр класса ActionCodeSettings . Его можно создать с помощью соответствующего класса ActionCodeSettings.Builder , который содержит следующие методы:
| Метод | Описание |
|---|---|
setUrl(String url) | Задает ссылку (URL состояния/продолжения), которая имеет различное значение в разных контекстах:
|
setIOSBundleId(String iOSBundleId) | Устанавливает идентификатор пакета iOS, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Apple. |
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) | Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android. |
setHandleCodeInApp(boolean status) | Определяет, будет ли ссылка в электронном письме сначала открываться в мобильном приложении или по веб-ссылке. По умолчанию — false. Если установлено значение true, ссылка с кодом действия будет отправлена как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В случае значения false код будет сначала отправлен в веб-виджет, а затем при продолжении будет перенаправлен в приложение, если оно установлено. |
setLinkDomain(String customDomain) | При определении пользовательских доменов для ссылок Hosting для проекта укажите, какой из них следует использовать при открытии ссылки указанным мобильным приложением. В противном случае автоматически выбирается домен по умолчанию (например,PROJECT_ID .firebaseapp.com ). |
setDynamicLinkDomain(String dynamicLinkDomain) | Устарело. Не указывайте этот параметр. |
Следующий пример иллюстрирует, как отправить ссылку для подтверждения по электронной почте, которая сначала откроется в мобильном приложении. Эта прямая ссылка будет содержать URL-адрес для продолжения: http://www.example.com/verify?uid=1234 .
Kotlin
val auth = Firebase.auth val user = auth.currentUser!! val url = "http://www.example.com/verify?uid=" + user.uid val actionCodeSettings = ActionCodeSettings.newBuilder() .setUrl(url) .setIOSBundleId("com.example.ios") // The default for this is populated with the current android package name. .setAndroidPackageName("com.example.android", false, null) .build() user.sendEmailVerification(actionCodeSettings) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); FirebaseUser user = auth.getCurrentUser(); String url = "http://www.example.com/verify?uid=" + user.getUid(); ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() .setUrl(url) .setIOSBundleId("com.example.ios") // The default for this is populated with the current android package name. .setAndroidPackageName("com.example.android", false, null) .build(); user.sendEmailVerification(actionCodeSettings) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Email sent."); } } });
Настройка ссылок Firebase Hosting
Firebase Authentication использует Firebase Hosting при отправке ссылки, предназначенной для открытия в мобильном приложении. Для использования этой функции необходимо настроить ссылки Hosting в консоли Firebase .
Настройка приложений Android:
- Если вы планируете обрабатывать эти ссылки из своего Android-приложения, необходимо указать имя пакета вашего приложения в настройках проекта в консоли Firebase . Кроме того, необходимо предоставить хеши SHA-1 и SHA-256 сертификата приложения.
- Вам также потребуется настроить фильтр намерений для глубокой ссылки в файле
AndroidManifest.xml. - Для получения более подробной информации по этому вопросу обратитесь к инструкциям по получению ссылок на хостинг Android .
Настройка приложений iOS:
- Если вы планируете обрабатывать эти ссылки из своего iOS-приложения, вам потребуется настроить домен ссылки Hosting как связанный домен в параметрах вашего приложения.
- Для получения более подробной информации обратитесь к инструкциям по получению ссылок на iOS-хостинг .
Обработка действий с электронной почтой в веб-приложении
Вы можете указать, хотите ли вы сначала обработать ссылку с кодом действия из веб-приложения, а затем перенаправить пользователя на другую веб-страницу или в мобильное приложение после успешного завершения, при условии, что мобильное приложение доступно. Это делается путем вызова метода setHandleCodeInApp(false) в объекте ActionCodeSettings.Builder . Хотя идентификатор пакета iOS или имя пакета Android не обязательны, их указание позволит пользователю вернуться в указанное приложение после завершения выполнения кода действия в электронном письме.
Здесь используется веб-адрес, настроенный в разделе шаблонов действий электронной почты. Для всех проектов предоставляется адрес по умолчанию. Подробнее о настройке обработчика действий электронной почты см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка в параметре запроса continueUrl будет ссылкой Hosting , содержимое которой будет представлять собой URL указанный в объекте ActionCodeSettings .
При обработке действий с электронной почтой, таких как подтверждение адреса электронной почты, код действия из параметра запроса oobCode необходимо извлечь из прямой ссылки, а затем применить с помощью applyActionCode чтобы изменения вступили в силу, то есть, чтобы электронное письмо было подтверждено.
Обработка действий с электронной почтой в мобильном приложении
Вы можете указать, хотите ли вы сначала обрабатывать ссылку с кодом действия внутри вашего мобильного приложения, при условии, что оно установлено. Если ссылка будет нажата с устройства, которое не поддерживает мобильное приложение, она откроется с веб-страницы. Это делается путем вызова setHandleCodeInApp(true) в объекте ActionCodeSettings.Builder . Также необходимо указать имя пакета Android мобильного приложения или идентификатор пакета iOS.
В качестве резервного веб-адреса, используемого в случае отсутствия мобильного приложения, применяется адрес, указанный в разделе шаблонов действий электронной почты. Для всех проектов предусмотрен адрес по умолчанию. Дополнительную информацию о настройке обработчика действий электронной почты см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка на мобильное приложение, отправленная пользователю, будет представлять собой ссылку Hosting , полезная нагрузка которой — это URL-адрес кода действия, настроенный в консоли, с параметрами запроса oobCode , mode , apiKey и continueUrl . Последний будет исходным URL указанным в объекте ActionCodeSettings . Код действия можно применить непосредственно из мобильного приложения аналогично тому, как это обрабатывается в веб-процессе, описанном в разделе настройки обработчиков электронной почты .
При обработке действий с электронной почтой, таких как подтверждение адреса электронной почты, код действия из параметра запроса oobCode необходимо извлечь из прямой ссылки, а затем применить с помощью applyActionCode чтобы изменения вступили в силу, то есть, чтобы электронное письмо было подтверждено.