Устранение неполадок
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-код не сканируется
- Проверьте, что QR сгенерирован из строки
sessionId, полученной черезgetPaymentSessionId(). - Убедитесь, что
QuickPayConfig.environmentсовпадает с окружением кассового ПО (оба —SANDBOXили оба —PRODUCTION). - Проверьте, что сессия не истекла —
onSessionExpired()должен был прийти, если сессия устарела.
Биометрический запрос появляется в неожиданный момент
При вызове getPaymentSessionId() SDK может инициировать биометрическую аутентификацию, если с момента последней разблокировки прошло достаточно времени. Это ожидаемое поведение в целях безопасности. Убедитесь, что initUi() вызван заранее — без него биометрический диалог не сможет отобразиться.