Состояние активации

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.