Устранение неполадок

RuntimeException: YandexQuickPay must be initialized... при вызове getPaymentSessionId()

initialize() не был вызван до обращения к SDK. Убедитесь, что вызов происходит в Application.onCreate() и класс Application зарегистрирован в AndroidManifest.xml:

<application android:name=".MyApp" ...>

Колбэки QuickPaymentStateListener не приходят

SDK хранит листенер как WeakReference. Если внешней сильной ссылки нет, объект будет собран GC. Убедитесь, что листенер хранится в поле класса (Application, Activity или ViewModel), а не создаётся как локальная переменная.

// Неправильно — объект может быть собран GC
fun setupSdk() {
    YandexQuickPay.initialize(
        config = config,
        context = this,
        quickPaymentStateListener = object : QuickPaymentStateListener { ... } // ← локальный объект
    )
}

// Правильно — поле класса держит сильную ссылку
val listener = object : QuickPaymentStateListener { ... }

fun setupSdk() {
    YandexQuickPay.initialize(config, this, listener)
}

IllegalStateException: Activity not available

initUi() не был вызван перед getPaymentSessionId() или enableQuickPayment(). Убедитесь, что initUi() вызывается в Activity.onCreate() и его выполнение завершилось до первого запроса сессии.

QR-код не сканируется

  1. Проверьте, что QR сгенерирован из строки sessionId, полученной через getPaymentSessionId().
  2. Убедитесь, что QuickPayConfig.environment совпадает с окружением кассового ПО (оба — SANDBOX или оба — PRODUCTION).
  3. Проверьте, что сессия не истекла — onSessionExpired() должен был прийти, если сессия устарела.

Биометрический запрос появляется в неожиданный момент

При вызове getPaymentSessionId() SDK может инициировать биометрическую аутентификацию, если с момента последней разблокировки прошло достаточно времени. Это ожидаемое поведение в целях безопасности. Убедитесь, что initUi() вызван заранее — без него биометрический диалог не сможет отобразиться.

Предыдущая
Следующая