При отправке электронных писем с инструкциями по сбросу пароля или подтверждению электронной почты пользователя можно передавать состояние через URL-адрес продолжения. Это позволяет пользователю вернуться в приложение после завершения действия. Кроме того, можно указать, следует ли обрабатывать ссылку на электронное письмо непосредственно из установленного мобильного приложения, а не с веб-страницы.
Это может быть чрезвычайно полезно в следующих распространенных ситуациях:
Пользователь, в данный момент не авторизованный, может пытаться получить доступ к контенту, для доступа к которому требуется вход в систему. Однако пользователь мог забыть свой пароль и, следовательно, запустить процесс сброса пароля. В конце этого процесса пользователь ожидает вернуться к тому разделу приложения, к которому он пытался получить доступ.
Приложение может предоставлять доступ только подтвержденным учетным записям. Например, приложение для рассылки новостей может потребовать от пользователя подтверждения адреса электронной почты перед подпиской. Пользователь пройдет процедуру подтверждения электронной почты и будет ожидать возвращения в приложение для завершения подписки.
Как правило, когда пользователь начинает процесс сброса пароля или подтверждения электронной почты в приложении Apple, он ожидает завершить этот процесс внутри приложения; возможность передачи состояния через URL-адрес продолжения делает это возможным.
Возможность передавать состояние через URL-адрес продолжения — это мощная функция, предоставляемая Firebase Auth, которая может значительно улучшить пользовательский опыт.
Передача состояния URL-адреса продолжения в действиях электронной почты
Для безопасной передачи URL-адреса продолжения необходимо добавить домен этого URL-адреса в качестве авторизованного домена:
В консоли Firebase перейдите в раздел Безопасность > Аутентификация > Вкладка Настройки .
В разделе «Авторизованные домены» нажмите «Добавить домен» и добавьте URL-адрес.
Для отправки письма для сброса пароля или письма с подтверждением необходимо предоставить экземпляр FIRActionCodeSettings . Этот интерфейс принимает следующие параметры:
Быстрый
| Параметр | Тип | Описание |
|---|---|---|
URL | Нить | Задает ссылку (URL состояния/продолжения), которая имеет различное значение в разных контекстах:
|
iOSBundleID | Нить | Устанавливает идентификатор пакета iOS, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Apple. |
androidPackageName | Нить | Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android. |
handleCodeInApp | Логический | Определяет, будет ли ссылка в электронном письме сначала открываться в мобильном приложении или по веб-ссылке. По умолчанию — false. Если установлено значение true, ссылка с кодом действия будет отправлена как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В случае значения false код будет сначала отправлен в веб-виджет, а затем при продолжении будет перенаправлен в приложение, если оно установлено. |
linkDomain | Нить | При определении пользовательских доменов для ссылок хостинга для проекта укажите, какой из них следует использовать при открытии ссылки указанным мобильным приложением. В противном случае автоматически выбирается домен по умолчанию (например,PROJECT_ID .firebaseapp.com ). |
dynamicLinkDomain | Нить | Устарело. Не указывайте этот параметр. |
Objective-C
| Параметр | Тип | Описание |
|---|---|---|
URL | NSString | Задает ссылку (URL состояния/продолжения), которая имеет различное значение в разных контекстах:
|
iOSBundleID | NSString | Устанавливает идентификатор пакета iOS, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android или Apple. |
androidPackageName | NSString | Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android или Apple. |
handleCodeInApp | БУЛ | Определяет, будет ли ссылка в электронном письме сначала открываться в мобильном приложении или по веб-ссылке. По умолчанию — false. Если установлено значение true, ссылка с кодом действия будет отправлена как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В случае значения false код будет сначала отправлен в веб-виджет, а затем при продолжении будет перенаправлен в приложение, если оно установлено. |
linkDomain | NSString | При определении пользовательских доменов для ссылок Hosting для проекта укажите, какой из них следует использовать при открытии ссылки указанным мобильным приложением. В противном случае автоматически выбирается домен по умолчанию (например,PROJECT_ID .firebaseapp.com ). |
dynamicLinkDomain | NSString | Устарело. Не указывайте этот параметр. |
Следующий пример иллюстрирует, как отправить ссылку для подтверждения электронной почты, которая сначала откроется в мобильном приложении, используя доменное имя Hosting custom-domain.com . Эта прямая ссылка будет содержать URL-адрес для продолжения: https://www.example.com/?email=user@example.com .
Быстрый
var actionCodeSettings = ActionCodeSettings.init() actionCodeSettings.canHandleInApp = true let user = Auth.auth().currentUser() actionCodeSettings.URL = String(format: "https://www.example.com/?email=%@", user.email) actionCodeSettings.iOSbundleID = Bundle.main.bundleIdentifier! actionCodeSettings.setAndroidPakageName("com.example.android") // Specify a custom Hosting link domain to use. The domain must be // configured in Firebase Hosting and owned by the project. actionCodeSettings.linkDomain = "custom-domain.com" user.sendEmailVerification(withActionCodeSettings:actionCodeSettings { error in if error { // Error occurred. Inspect error.code and handle error. return } // Email verification sent. })
Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; actionCodeSettings.handleCodeInApp = YES; FIRUser *user = [FIRAuth auth].currentUser; NSString *urlString = [NSString stringWithFormat:@"https://www.example.com/?email=%@", user.email]; actionCodeSettings.URL = [NSURL URLWithString:urlString]; actionCodeSettings.iOSBundleID = [NSBundle mainBundle].bundleIdentifier; // Specify a custom Hosting link domain to use. The domain must be // configured in Firebase Hosting and owned by the project. actionCodeSettings.linkDomain = @"custom-domain.com"; [actionCodeSettings setAndroidPackageName:@"com.example.android"]; [user sendEmailVerificationWithActionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { if (error) { // Error occurred. Inspect error.code and handle error. return; } // Email verification sent. }];
Настройка ссылок Firebase Hosting
Firebase Authentication использует Firebase Hosting при отправке ссылки, предназначенной для открытия в мобильном приложении. Для использования этой функции необходимо настроить ссылки Hosting в консоли Firebase .
Настройка приложений Apple:
- Если вы планируете обрабатывать эти ссылки из своего приложения, вам потребуется настроить домен ссылки Hosting как связанный домен в параметрах вашего приложения.
- Для получения более подробной информации обратитесь к инструкциям по получению ссылок на iOS-хостинг .
Настройка приложений Android:
- Если вы планируете обрабатывать эти ссылки из своего Android-приложения, необходимо указать имя пакета вашего приложения в настройках проекта в консоли Firebase . Кроме того, необходимо предоставить хеши SHA-1 и SHA-256 сертификата приложения.
- Вам также потребуется настроить фильтр намерений для глубокой ссылки в файле
AndroidManifest.xml. - Для получения более подробной информации по этому вопросу обратитесь к инструкциям по получению ссылок на хостинг Android .
Обработка действий с электронной почтой в веб-приложении
Вы можете указать, хотите ли вы сначала обработать ссылку с кодом действия из веб-приложения, а затем перенаправить пользователя на другую веб-страницу или в мобильное приложение после успешного завершения, при условии, что мобильное приложение доступно. Это делается путем установки handleCodeInApp в false в объекте FIRActionCodeSettings (Obj-C) или ActionCodeSettings (Swift). Хотя идентификатор пакета или имя пакета Android не обязательны, их предоставление позволит пользователю вернуться в указанное приложение после завершения действия с кодом действия в электронном письме.
Здесь используется веб-адрес, настроенный в разделе шаблонов действий электронной почты. Для всех проектов предоставляется адрес по умолчанию. Подробнее о настройке обработчика действий электронной почты см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка в параметре запроса continueURL будет ссылкой Hosting , полезной нагрузкой которой является URL указанный в объекте ActionCodeSettings .
При обработке действий с электронной почтой, таких как подтверждение адреса электронной почты, код действия из параметра запроса oobCode необходимо извлечь из прямой ссылки, а затем применить с помощью applyActionCode чтобы изменения вступили в силу, то есть, чтобы электронное письмо было подтверждено.
Обработка действий с электронной почтой в мобильном приложении
Вы можете указать, хотите ли вы сначала обрабатывать ссылку с кодом действия в своем мобильном приложении, при условии, что оно установлено. Если ссылка будет нажата с устройства, не поддерживающего мобильное приложение, она откроется с веб-страницы. Это делается путем установки handleCodeInApp в true в объекте FIRActionCodeSettings (Obj-C) или ActionCodeSettings (Swift). Также необходимо указать имя пакета Android или идентификатор пакета мобильного приложения. В качестве резервного веб-адреса, используемого в случае отсутствия мобильного приложения, используется адрес, настроенный в разделе шаблонов действий электронной почты. Для всех проектов предоставляется адрес по умолчанию. Подробнее о настройке обработчика действий электронной почты см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка на мобильное приложение, отправленная пользователю, будет представлять собой ссылку Hosting , полезная нагрузка которой — это URL-адрес кода действия, настроенный в консоли, с параметрами запроса oobCode , mode , apiKey и continueUrl . Последний будет исходным URL указанным в объекте FIRActionCodeSettings (Obj-C) или ActionCodeSettings (Swift). Код действия можно применить непосредственно из мобильного приложения аналогично тому, как это обрабатывается в веб-процессе, описанном в разделе настройки обработчиков электронной почты .
При обработке действий с электронной почтой, таких как подтверждение адреса электронной почты, код действия из параметра запроса oobCode необходимо извлечь из прямой ссылки, а затем применить с помощью applyActionCode чтобы изменения вступили в силу, то есть, чтобы электронное письмо было подтверждено.