Состояние активации
QR‑код от Яндекс Пэй поддерживает состояние активации виджета — отдельное от авторизации. Виджет может быть неактивирован, даже если пользователь уже авторизован в других SDK финтеха.
Активация нужна, если:
- Есть потребность явно разделить авторизацию (с точки зрения UI) между QuickPay и другим флоу из Яндекс Пэй. Без отдельного состояния активации авторизованный в другом SDK пользователь сразу увидит готовый к оплате виджет, что в ряде сценариев нежелательно.
- Нужно показать FAQ до первой оплаты. Неактивированный виджет выглядит как неавторизованный; по клику на «Подключить» пользователь попадает в онбординг, и активация происходит по его итогам.
Неактивированный виджет визуально эквивалентен неавторизованному. Вызов getPaymentSessionId() в неактивированном состоянии бросит FintechQuickPaymentError.widgetNotActivated.
Конфигурация
Начальное состояние активации задаётся при инициализации SDK:
let config = QuickPayConfig(
merchantId: "YOUR_MERCHANT_ID",
environment: .sandbox,
isActivatedByDefault: true // по умолчанию true
)
| Значение | Поведение на первом запуске |
|---|---|
true (по умолчанию) |
Авторизованный пользователь сразу считается активированным — обратная совместимость с интеграциями до введения состояния активации. |
false |
После авторизации виджет находится в состоянии .accountAuthorizedNotActivated. Требуется явная активация — через онбординг/FAQ, вызов enableQuickPayment() (OAuth + активация) или программно через activateQuickPay(). |
Примечание
Если пользователь проходит авторизацию непосредственно через QuickPay (enableQuickPayment()), виджет активируется сразу — независимо от значения isActivatedByDefault. Значение isActivatedByDefault = false влияет только на случай, когда пользователь уже был авторизован в другом SDK финтеха до первого запуска QuickPay.
Состояние .accountAuthorizedNotActivated
В QuickPayAuthState добавлен новый кейс:
public enum QuickPayAuthState: Equatable {
// ...
case accountAuthorizedNotActivated
// ...
}
Эмитится только при QuickPayConfig.isActivatedByDefault = false. Означает: пользователь авторизован через Яндекс ID, но виджет ещё не активирован.
Переходы между состояниями описаны в QuickPayAuthState — Переходы между состояниями.
Новая ошибка
public enum FintechQuickPaymentError: Error {
// ...
case widgetNotActivated
}
Бросается при вызове getPaymentSessionId() в состоянии .accountAuthorizedNotActivated.
Публичное API
public final class YandexQuickPay {
func isQuickPayActivated() async -> Bool
func activateQuickPay() async throws
func deactivateQuickPay() async throws
}
isQuickPayActivated()
Возвращает текущее состояние активации виджета. До первого явного вызова activateQuickPay() или deactivateQuickPay() возвращает значение QuickPayConfig.isActivatedByDefault.
activateQuickPay()
Активирует виджет. Используется, когда пользователь уже авторизован, но виджет находится в состоянии .accountAuthorizedNotActivated — например, по итогам просмотра FAQ-экрана.
Если пользователь не авторизован, для активации вместе с OAuth используйте enableQuickPayment().
deactivateQuickPay()
Деактивирует виджет без логаута. После вызова:
- Виджет рендерится как неавторизованный.
QuickPayAuthStateпереходит в.accountAuthorizedNotActivated.getPaymentSessionId()бросаетFintechQuickPaymentError.widgetNotActivatedдо повторной активации.- Сессия Яндекс ID сохраняется — повторная активация через
activateQuickPay()не потребует OAuth.