Обработка ошибок в Flutter SDK

Каждая ошибка, возвращаемая SDK, имеет тип AdaptyErrorCode. Пример:

Tip

Включите подробные логи перед отладкой. Большинство AdaptyErrors оборачивают исходную ошибку StoreKit, Play Billing, сети или бэкенда. При включённых подробных логах (await Adapty().setLogLevel(AdaptyLogLevel.verbose) — см. Логирование) эта ошибка выводится в консоль, что обычно сразу указывает на причину.

Important

Если эти решения не помогли, см. раздел Другие проблемы, где описаны шаги, которые стоит предпринять перед обращением в поддержку — это поможет нам помочь вам быстрее.

    try {
      final result = await adapty.makePurchase(product: product);
    } on AdaptyError catch (adaptyError) {
      if (adaptyError.code == AdaptyErrorCode.paymentCancelled) {
        // Cancelled
      }
    } catch (e) {
    }

Системные коды StoreKit

ОшибкаКодРешение
unknown0Код ошибки, указывающий на возникновение неизвестной или непредвиденной ошибки.
Повторите попытку или см. раздел Другие проблемы.
clientInvalid1Этот код ошибки указывает, что клиенту не разрешено выполнять запрошенное действие.
paymentCancelled2

Этот код ошибки указывает, что пользователь отменил запрос на оплату.

Никаких действий не требуется, однако с точки зрения бизнес-логики можно предложить пользователю скидку или напомнить о покупке позже.

paymentInvalid3Эта ошибка указывает, что один из параметров платежа не был распознан App Store.
paymentNotAllowed4Этот код ошибки указывает, что пользователю не разрешено авторизовывать платежи.
storeProductNotAvailable5Этот код ошибки указывает, что запрошенный продукт недоступен в сторе.
Попробуйте переустановить приложение.
cloudServicePermissionDenied6Этот код ошибки указывает, что пользователь не разрешил доступ к информации облачного сервиса.
cloudServiceNetworkConnectionFailed7Этот код ошибки указывает, что устройству не удалось подключиться к сети.
cloudServiceRevoked8Этот код ошибки указывает, что пользователь отозвал разрешение на использование этого облачного сервиса.
privacyAcknowledgementRequired9Этот код ошибки указывает, что пользователь ещё не принял политику конфиденциальности Apple.
unauthorizedRequestData10Этот код ошибки указывает, что приложение пытается использовать свойство, для которого у него нет необходимых прав.
invalidOfferIdentifier11

identifier предложения недействителен. Например, вы не настроили предложение с таким идентификатором в App Store или отозвали его.

Убедитесь, что нужные предложения настроены в AppStore Connect, и передайте корректный идентификатор предложения.

invalidSignature12Этот код ошибки указывает, что подпись в скидке на оплату недействительна.
missingOfferParams13Этот код ошибки указывает, что в скидке на оплату отсутствуют параметры.
invalidOfferPrice14Этот код ошибки указывает, что цена, указанная вами в App Store Connect, больше не является действительной. Предложения всегда должны представлять сниженную цену.

Кастомные коды ошибок Android

ОшибкаКодРешение
adaptyNotInitialized20Необходимо правильно настроить Adapty SDK с помощью метода Adapty.activate. Узнайте, как это сделать для Flutter.
productNotFound22Эта ошибка означает, что запрошенный для покупки продукт недоступен в сторе.
invalidJson23JSON пейвола недействителен. Исправьте его в дашборде Adapty. Подробнее о том, как это сделать, читайте в разделе Настройка пейвола с помощью Remote Config.
currentSubscriptionToUpdateNotFoundInHistory24Исходная подписка, которую необходимо продлить, не найдена.
pendingPurchase25Эта ошибка означает, что статус покупки — ожидающий, а не выполненный. Подробнее см. страницу Обработка ожидающих транзакций в документации Android Developer.
billingServiceTimeout97Эта ошибка означает, что запрос достиг максимального тайм-аута до того, как Google Play успел ответить. Причиной может быть, например, задержка выполнения действия, запрошенного вызовом Play Billing Library.
featureNotSupported98Запрошенная функция не поддерживается Play Store на данном устройстве.
billingServiceDisconnected99Эта фатальная ошибка означает, что соединение клиентского приложения с сервисом Google Play Store через BillingClient было разорвано.
billingServiceUnavailable102Эта временная ошибка означает, что сервис Google Play Billing в данный момент недоступен. В большинстве случаев это свидетельствует о проблеме с сетевым соединением между клиентским устройством и сервисами Google Play Billing.
billingUnavailable103

Эта ошибка означает, что в процессе покупки произошла ошибка биллинга на стороне пользователя. Примеры ситуаций, когда это может происходить:

1. Приложение Play Store на устройстве пользователя устарело.

2. Пользователь находится в неподдерживаемой стране.

3. Пользователь является корпоративным пользователем, и администратор его организации запретил совершение покупок.

4. Google Play не может списать средства с платёжного метода пользователя. Например, срок действия банковской карты пользователя истёк.

5. Пользователь не авторизован в приложении Play Store.

developerError105Это фатальная ошибка, указывающая на некорректное использование API.
billingError106Это фатальная ошибка, указывающая на внутреннюю проблему в самом Google Play.
itemAlreadyOwned107Расходуемая покупка уже была приобретена.
itemNotOwned108Эта ошибка означает, что запрошенное действие над товаром завершилось неудачей, поскольку он не принадлежит пользователю.

Пользовательские коды StoreKit

ОшибкаКодРешение
noProductIDsFound1000

Эта ошибка означает, что ни один из продуктов, запрошенных на пейволе, недоступен для покупки в App Store, хотя они там перечислены. Иногда ошибка сопровождается предупреждением InvalidProductIdentifiers. Если предупреждение появляется без ошибки — игнорируйте его.

Если вы столкнулись с этой ошибкой, следуйте инструкциям в разделе Исправление ошибки Code-1000 noProductIDsFound.

productRequestFailed1002Не удалось загрузить доступные продукты в данный момент.
cantMakePayments1003Встроенные покупки запрещены на этом устройстве. См. гайд по устранению неполадок.
noPurchasesToRestore1004Устарело в Adapty Flutter SDK 4.0.4: restorePurchases() больше не возвращает эту ошибку. Если нечего восстанавливать, метод завершается успешно с текущим профилем — проверьте в нём статус уровня доступа. В более ранних версиях SDK эта ошибка означает, что Google Play не нашёл покупку для восстановления.
cantReadReceipt1005

На устройстве нет действительного чека. Это может быть проблемой при тестировании в песочнице.

В песочнице действительный файл чека появляется только после реальной покупки — убедитесь, что совершили её перед обращением к чеку. При тестировании в песочнице также убедитесь, что на устройстве выполнен вход с действительной учётной записью Apple sandbox.

productPurchaseFailed1006Покупка продукта не удалась. Эта ошибка оборачивает исходную ошибку StoreKit — прочитайте вложенную ошибку (или включите подробные логи, чтобы увидеть её в консоли) для выяснения причины. Вложенная ошибка, как правило, соответствует одному из кодов StoreKit 0–14 из таблицы выше — чаще всего это paymentCancelled, paymentInvalid, paymentNotAllowed или invalidOfferPrice. Если определить конкретную причину не удаётся, попробуйте новый профиль песочницы; если проблема сохраняется — обратитесь в поддержку Apple.
refreshReceiptFailed1010Эта ошибка означает, что чек не был получен. Применимо только к StoreKit 1.
receiveRestoredTransactionsFailed1011Восстановление покупок не удалось.

Пользовательские сетевые коды

ОшибкаКодРешение
notActivated2002SDK Adapty не активирован.
Чаще всего возникает, когда сплэш-экран или ранний UI-хук вызывает методы Adapty до того, как Adapty().activate завершится. Проблема носит нестабильный характер и может не воспроизводиться в эмуляторе, поскольку тайминги на реальном устройстве отличаются. Дождитесь завершения Future activate (await) прежде, чем планировать любые другие вызовы SDK. Полная последовательность описана в Порядке вызовов в Flutter SDK.
badRequest2003Некорректный запрос.
Убедитесь, что вы выполнили все необходимые шаги для интеграции с App Store.
serverError2004Ошибка сервера.
Повторите попытку через некоторое время. Если проблема не исчезнет, обратитесь в службу поддержки Adapty.
networkFailed2005Ошибка указывает на проблемы с сетевым подключением на устройстве пользователя.
Попробуйте отключить VPN или переключиться с мобильной сети на Wi-Fi (или наоборот).
decodingFailed2006Ошибка указывает на сбой при декодировании ответа.
Проверьте код и убедитесь, что передаваемые параметры корректны. Например, ошибка может означать, что используется неверный API-ключ.
encodingFailed2009Ошибка указывает на сбой при кодировании запроса.
analyticsDisabled3000Обработка аналитических событий недоступна, так как вы отключили её.
wrongParam3001Ошибка указывает на то, что один или несколько параметров заданы неверно.
Если вы используете Paywall Builder и не можете отобразить пейвол из-за этой ошибки, включите Show on device в Paywall Builder.
Другая возможная причина — версия локального файла резервного пейвола не соответствует версии SDK. Скачайте новый файл в дашборде.
activateOnceError3005Метод .activate нельзя вызывать более одного раза.
profileWasChanged3006Профиль пользователя был изменён в ходе операции.
Это происходит, когда метод вызывается, пока Adapty().identify ещё выполняется — вызов в процессе попадает на профиль, который вот-вот будет заменён, и SDK отклоняет его. Всегда дожидайтесь завершения identify (await) перед любым вызовом, инициированным действием пользователя. См. Порядок вызовов в Flutter SDK.
unsupportedData3007Ошибка указывает на то, что формат данных не поддерживается SDK.
fetchTimeoutError3101Ошибка указывает на превышение времени ожидания при выполнении операции fetch.

Пользовательский UI и коды плагинов

ОшибкаКодРешение
jsException4105Исключение было выброшено из JavaScript во время работы пейвола или онбординга, созданного в билдере. Включите подробное логирование, чтобы увидеть underlying JavaScript-ошибку.
operationInterrupted9000Операция была прервана системой.
Повторите вызов.
emptyResult10001Flutter-плагин получил пустой результат от нативного SDK.
Повторите вызов, затем обратитесь к разделу Другие проблемы.
internalPluginError10002Во Flutter-плагине произошла внутренняя ошибка.
Обратитесь к разделу Другие проблемы.

Другие проблемы

Если вы ещё не нашли решение, попробуйте следующее:

  • Обновите SDK до последней версии: мы всегда рекомендуем переходить на актуальные версии SDK — они стабильнее и содержат исправления известных проблем.
  • Обратитесь в поддержку или получите помощь от других разработчиков на форуме.
  • Напишите в поддержку на support@adapty.io или через чат: если вы не готовы обновлять SDK или это не помогло, обратитесь в нашу службу поддержки. Обратите внимание: проблема решится быстрее, если вы включите подробное логирование и поделитесь логами с командой. Также можно прикрепить соответствующие фрагменты кода.