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

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

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

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

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

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

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

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

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

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

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

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

  • Когда ссылка обрабатывается в виджетах веб-действий, это глубокая ссылка в параметре запроса continueUrl .
  • Если ссылка обрабатывается непосредственно в приложении, это параметр запроса continueUrl в глубокой ссылке динамической ссылки.
setIOSBundleId(String iOSBundleId) Устанавливает идентификатор пакета iOS. Будет предпринята попытка открыть ссылку в приложении iOS, если оно установлено. Приложение iOS необходимо зарегистрировать в консоли.
setAndroidPackageName(String androidPackageName, boolean installIfNotAvailable, String minimumVersion) Устанавливает имя пакета Android. Будет предпринята попытка открыть ссылку в приложении Android, если оно установлено. Если для параметра installIfNotAvailable установлено значение true , оно указывает, следует ли устанавливать приложение Android, если устройство его поддерживает и приложение еще не установлено. Если указано минимальное значение и установлена ​​более старая версия приложения, пользователь перенаправляется в Play Store для обновления приложения. Приложение Android необходимо зарегистрировать в консоли.
setHandleCodeInApp(boolean status) Будет ли ссылка на действие по электронной почте сначала открыта в мобильном приложении или по веб-ссылке. По умолчанию — ложь. Если установлено значение true, ссылка на код действия будет отправлена ​​как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при продолжении будет перенаправлено в приложение, если оно установлено.
setDynamicLinkDomain(String dynamicLinkDomain) Устанавливает домен динамической ссылки (или поддомен), который будет использоваться для текущей ссылки, если она должна быть открыта с помощью динамических ссылок Firebase. Поскольку для каждого проекта можно настроить несколько доменов динамических ссылок, это поле дает возможность явно выбрать один из них. Если ничего не указано, по умолчанию используется первый домен.

В следующем примере показано, как отправить ссылку для подтверждения по электронной почте, которая сначала откроется в мобильном приложении как динамическая ссылка Firebase (приложение iOS com.example.ios или приложение Android com.example.android ). Глубокая ссылка будет содержать полезные данные URL-адреса продолжения https://www.example.com/?email=user@example.com .

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 Auth использует динамические ссылки Firebase при отправке ссылки, которая должна быть открыта в мобильном приложении. Чтобы использовать эту функцию, динамические ссылки необходимо настроить в консоли Firebase.

  1. Включите динамические ссылки Firebase:

    1. В консоли Firebase откройте раздел Dynamic Links .
    2. Если вы еще не приняли условия Dynamic Links и не создали домен Dynamic Links , сделайте это сейчас.

      Если вы уже создали домен Dynamic Links , обратите на это внимание. Домен Dynamic Links обычно выглядит следующим образом:

      example.page.link

      Это значение понадобится вам, когда вы настроите приложение Apple или Android для перехвата входящей ссылки.

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

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

    1. Если вы планируете обрабатывать эти ссылки из своего приложения iOS, идентификатор пакета iOS необходимо указать в настройках проекта Firebase Console. Кроме того, необходимо указать идентификатор App Store и идентификатор команды разработчиков Apple.
    2. Вам также потребуется настроить домен универсальной ссылки FDL как связанный домен в возможностях вашего приложения.
    3. Если вы планируете распространять свое приложение на iOS версии 8 и ниже, вам необходимо установить идентификатор пакета iOS в качестве специальной схемы для входящих URL-адресов.
    4. Дополнительные сведения см. в разделе «Получение динамических ссылок iOS» .

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

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

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

В этом случае ссылка в параметре запроса continueUrl будет ссылкой FDL, полезной нагрузкой которой является URL указанный в объекте ActionCodeSettings . Хотя вы можете перехватывать и обрабатывать входящую ссылку из вашего приложения без какой-либо дополнительной зависимости, мы рекомендуем использовать клиентскую библиотеку FDL для анализа глубокой ссылки.

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

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

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

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

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

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