Вы можете передавать состояние через URL-адрес продолжения при отправке действий по электронной почте для сброса пароля или подтверждения адреса электронной почты пользователя. Это позволяет пользователю вернуться в приложение после завершения действия. Кроме того, вы можете указать, следует ли обрабатывать ссылку на действие по электронной почте непосредственно из мобильного приложения, если оно установлено, а не с веб-страницы.
Это может быть чрезвычайно полезно в следующих распространенных сценариях:
Пользователь, не вошедший в систему, может пытаться получить доступ к контенту, требующему входа в систему. Однако он мог забыть пароль и запустить процесс сброса пароля. В конце процесса пользователь ожидает вернуться в раздел приложения, к которому пытался получить доступ.
Приложение может предоставлять доступ только к подтверждённым учётным записям. Например, приложение для новостной рассылки может потребовать от пользователя подтверждения адреса электронной почты перед подпиской. Пользователь должен пройти процедуру подтверждения адреса электронной почты и ожидать возврата в приложение для завершения подписки.
Как правило, когда пользователь начинает процедуру сброса пароля или проверки адреса электронной почты в приложении Apple, он ожидает завершить процесс внутри приложения; возможность передачи состояния через URL-адрес продолжения делает это возможным.
Возможность передачи состояния через URL-адрес продолжения — мощная функция, предоставляемая Firebase Auth, которая может значительно улучшить пользовательский опыт.
Передача состояния URL-адреса продолжения в действиях электронной почты
Для безопасной передачи URL-адреса продолжения домен этого URL-адреса должен быть добавлен в белый список в консоли Firebase . Это можно сделать в разделе «Аутентификация» , добавив этот домен в список авторизованных доменов на вкладке «Способ входа», если он там ещё не находится.
При отправке письма для сброса пароля или письма с подтверждением необходимо предоставить экземпляр FIRActionCodeSettings
. Этот интерфейс принимает следующие параметры:
Быстрый
Параметр | Тип | Описание |
---|---|---|
URL | Нить | Устанавливает ссылку (URL состояния/продолжения), которая имеет разные значения в разных контекстах:
|
iOSBundleID | Нить | Устанавливает идентификатор пакета iOS, который помогает Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Apple. |
androidPackageName | Нить | Задает имя пакета Android, чтобы помочь Firebase Authentication определить, следует ли создавать веб-ссылку или мобильную ссылку, открываемую на устройстве Android. |
handleCodeInApp | Бул | Будет ли ссылка действия, отправленная по электронной почте, сначала открываться в мобильном приложении или на веб-странице. Значение по умолчанию — false. При значении true ссылка с кодом действия будет отправлена как универсальная ссылка или ссылка на приложение Android и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при нажатии Continue перенаправит в приложение, если оно установлено. |
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 и будет открыта приложением, если оно установлено. В противном случае код сначала будет отправлен в веб-виджет, а затем при нажатии Continue перенаправит в приложение, если оно установлено. |
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 не являются обязательными, их предоставление позволит пользователю перенаправляться обратно в указанное приложение при завершении кода действия в электронной почте.
Используемый здесь URL-адрес веб-сайта настроен в разделе шаблонов действий с электронной почтой. Для всех проектов предусмотрен URL-адрес по умолчанию. Подробнее о настройке обработчика действий с электронной почтой см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка в параметре запроса continueURL
будет ссылкой Hosting , полезной нагрузкой которой является URL
указанный в объекте ActionCodeSettings
.
При обработке действий с электронной почтой, таких как проверка электронной почты, код действия из параметра запроса oobCode
необходимо проанализировать из глубинной ссылки, а затем применить через applyActionCode
, чтобы изменения вступили в силу, т. е. чтобы адрес электронной почты был проверен.
Обработка действий с электронной почтой в мобильном приложении
Вы можете указать, хотите ли вы сначала обрабатывать ссылку с кодом действия в вашем мобильном приложении, если оно установлено. Если ссылка нажата с устройства, не поддерживающего мобильное приложение, она открывается с веб-страницы. Это делается путем установки handleCodeInApp
в true
в объекте FIRActionCodeSettings
(Obj-C) или ActionCodeSettings
(Swift). Также необходимо указать имя пакета Android или идентификатор пакета мобильного приложения. В качестве резервного веб-URL, используемого при отсутствии мобильного приложения, используется URL-адрес, настроенный в разделе шаблонов действий электронной почты. Для всех проектов предусмотрен URL-адрес по умолчанию. Подробнее о настройке обработчика действий электронной почты см. в разделе «Настройка обработчиков электронной почты».
В этом случае ссылка на мобильное приложение, отправляемая пользователю, будет представлять собой ссылку Hosting , полезной нагрузкой которой является URL-адрес кода действия, настроенный в консоли, с параметрами запроса oobCode
, mode
, apiKey
и continueUrl
. Последний будет исходным URL
указанным в объекте FIRActionCodeSettings
(Obj-C) или ActionCodeSettings
(Swift). Код действия можно применить непосредственно из мобильного приложения, аналогично тому, как это делается в веб-процессе, описанном в разделе «Настройка обработчиков электронной почты» .
При обработке действий с электронной почтой, таких как проверка электронной почты, код действия из параметра запроса oobCode
необходимо проанализировать из глубинной ссылки, а затем применить через applyActionCode
, чтобы изменения вступили в силу, т. е. чтобы адрес электронной почты был проверен.