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