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

QR‑код от Яндекс Пэй поддерживает состояние активации виджета — отдельное от авторизации. Виджет может быть неактивирован, даже если пользователь уже авторизован в других SDK финтеха (например через Арго).

Активация нужна, если:

  • Есть потребность явно разделить авторизацию (с точки зрения UI) между QuickPay и другим флоу из Яндекс Пэй. Без отдельного состояния активации авторизованный в другом SDK пользователь сразу увидит готовый к оплате виджет, что в ряде сценариев нежелательно.
  • Нужно показать FAQ до первой оплаты. Неактивированный виджет выглядит как неавторизованный; по клику на «Подключить» пользователь попадает в онбординг, и активация происходит по его итогам.

Неактивированный виджет визуально эквивалентен неавторизованному. Вызов getPaymentSessionId() в неактивированном состоянии завершится исключением.

Конфигурация

Начальное состояние активации задаётся при инициализации SDK:

val config = QuickPayConfig(
    merchantId = "YOUR_MERCHANT_ID",
    environment = QuickPayEnvironment.SANDBOX,
    isActivatedByDefault = true, // по умолчанию true
)
Значение Поведение на первом запуске
true (по умолчанию) Авторизованный пользователь сразу считается активированным — обратная совместимость с интеграциями до введения состояния активации.
false После авторизации виджет находится в состоянии NotActivated. Требуется явная активация — через онбординг/FAQ, вызов enableQuickPayment() (OAuth + активация) или программно через activate().

Примечание

Если пользователь проходит авторизацию непосредственно через QuickPay (enableQuickPayment()), виджет активируется сразу — независимо от значения isActivatedByDefault. Значение isActivatedByDefault = false влияет только на случай, когда пользователь уже был авторизован в другом SDK финтеха до первого запуска QuickPay.

Состояние NotActivated

В QuickPayAuthorizationState добавлен новый кейс:

public data object NotActivated : QuickPayAuthorizationState

Эмитится только при QuickPayConfig.isActivatedByDefault = false. Означает: пользователь авторизован через Яндекс ID, но виджет ещё не активирован.

Переходы между состояниями описаны в QuickPayAuthorizationState — Переходы между состояниями.

Публичное API

object YandexQuickPay {
    fun isActivated(): Boolean
    fun activate()
    fun deactivate()
}

isActivated()

Возвращает текущее состояние активации виджета. До первого явного вызова activate() или deactivate() возвращает значение QuickPayConfig.isActivatedByDefault.

Исключения: IllegalStateException если SDK не инициализирован.

activate()

Активирует виджет. Используется, когда пользователь уже авторизован, но виджет находится в состоянии NotActivated — например, по итогам просмотра FAQ-экрана.

Если пользователь не авторизован, для активации вместе с OAuth используйте enableQuickPayment().

deactivate()

Деактивирует виджет без логаута. После вызова:

  • Виджет рендерится как неавторизованный.
  • QuickPayAuthorizationState переходит в NotActivated.
  • getPaymentSessionId() бросает исключение до повторной активации.
  • Сессия Яндекс ID сохраняется — повторная активация через activate() не потребует OAuth.