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

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

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

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

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

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

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

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

Для безопасной передачи URL-адреса продолжения необходимо добавить домен этого URL-адреса в качестве авторизованного домена:

  1. В консоли Firebase перейдите в раздел Безопасность > Аутентификация > Вкладка Настройки .

  2. В разделе «Авторизованные домены» нажмите «Добавить домен» и добавьте URL-адрес.

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

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

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

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

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

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

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

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

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