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

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

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

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

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

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

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

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

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

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

Метод Описание
setUrl(String url)

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Если ссылка обрабатывается непосредственно в приложении, это параметр запроса continueUrl в глубинной ссылке ссылки Hosting .
setIOSBundleId(String iOSBundleId) Устанавливает идентификатор пакета iOS, который помогает Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Apple.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android.
setHandleCodeInApp(boolean status) Будет ли ссылка действия, отправленная по электронной почте, сначала открываться в мобильном приложении или на веб-странице. Значение по умолчанию — false. При значении true ссылка с кодом действия будет отправлена как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при нажатии Continue перенаправит в приложение, если оно установлено.
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 Authentication использует Firebase Hosting при отправке ссылки, предназначенной для открытия в мобильном приложении. Для использования этой функции необходимо настроить ссылки Hosting в консоли Firebase .

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

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

    1. Если вы планируете обрабатывать эти ссылки из своего приложения iOS, вам потребуется настроить домен ссылки Hosting как ассоциированный домен в возможностях вашего приложения.
    2. Более подробную информацию см. в разделе «Инструкции по получению ссылок на хостинг iOS» .

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

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

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

В этом случае ссылка в параметре запроса continueUrl будет ссылкой Hosting , полезной нагрузкой которой является URL указанный в объекте ActionCodeSettings .

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

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

Вы можете указать, следует ли сначала обрабатывать ссылку с кодом действия в мобильном приложении, если оно установлено. Если ссылка нажата с устройства, не поддерживающего мобильное приложение, она открывается на веб-странице. Это делается вызовом метода setHandleCodeInApp(true) в объекте ActionCodeSettings.Builder . Также необходимо указать имя пакета Android или идентификатор пакета iOS мобильного приложения.

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

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

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