Устранение неполадок
Колбэки QuickPaymentStateListener не приходят
SDK хранит листенер как weak-ссылку. Если нет другого владельца, ARC освободит объект.
// Неправильно — объект немедленно освобождается
YandexQuickPay.initialize(
configuration: config,
presenterViewController: nil,
quickPaymentStateListener: MyListener() // ← временный объект
)
// Правильно — свойство держит сильную ссылку
final class AppDelegate: UIApplicationDelegate {
let listener = MyListener()
func application(...) -> Bool {
YandexQuickPay.initialize(
configuration: config,
presenterViewController: nil,
quickPaymentStateListener: listener
)
return true
}
}
OAuth-авторизация не завершается / зависает
Не подключены обработчики URL. Добавьте в AppDelegate/SceneDelegate:
// AppDelegate
func application(_ app: UIApplication, open url: URL, options: [...]) -> Bool {
return YandexQuickPay.instance.handleOpenURL(url)
}
// SceneDelegate
func scene(_ scene: UIScene, openURLContexts: Set<UIOpenURLContext>) {
if let url = openURLContexts.first?.url {
_ = YandexQuickPay.instance.handleOpenURL(url)
}
}
Также проверьте handleUserActivity для Universal Links.
Виджет отображается пустым
initialize() не был вызван перед createPaymentMethodsWidget(). Порядок вызовов:
YandexQuickPay.initialize(configuration:presenterViewController:quickPaymentStateListener:)— инициализация SDKYandexQuickPay.instance.createPaymentMethodsWidget()— создание виджета
FintechQuickPaymentError.noPresentationContext
getPaymentSessionId() или enableQuickPayment() вызваны до отображения ViewController. Переместите вызов в viewDidAppear или используйте Task внутри .onAppear в SwiftUI.
Колбэки приходят, но UI не обновляется
Колбэки могут вызываться не на Main thread. Оборачивайте обновления UI:
func onSessionExpired() {
DispatchQueue.main.async {
self.delegate?.sessionExpired()
}
}
QR-код не сканируется
- Убедитесь, что QR сгенерирован из
sessionId, полученного черезgetPaymentSessionId(). - Окружение SDK (
sandbox/production) должно совпадать с окружением кассового ПО. - Проверьте, что сессия актуальна — при истечении вызывается
onSessionExpired().
Была ли статья полезна?
Предыдущая
Следующая