Обработка ошибок в React Native SDK

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

Tip

Включите подробные логи перед отладкой. Большинство AdaptyError оборачивают ошибку StoreKit, Play Billing, сети или бэкенда. При включённых verbose-логах (adapty.setLogLevel('verbose') — см. Логирование для pure RN или Expo) эта ошибка выводится в консоль, что обычно сразу указывает на причину.

Important

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

try {
  const params: MakePurchaseParamsInput = {};
  await adapty.makePurchase(product, params);
} catch (error) {
  if (
    error instanceof AdaptyError &&
    error.adaptyCode === getErrorCode('cantMakePayments')
  ) {
    // Встроенные покупки не разрешены на этом устройстве
  }
}

error.adaptyCode — это число, поэтому сравнивайте его с числом: либо с литералом (1003), либо с результатом getErrorCode('<name>'). ErrorCode работает в обратную сторону — преобразует число в имя — поэтому используйте его для логирования, а не для сравнения.

Note

Отмена покупки пользователем — не ошибка. makePurchase возвращает AdaptyPurchaseResult с type равным 'user_cancelled' — см. Совершение покупок.

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

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

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

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

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

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

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

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

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

ОшибкаКодРешение
adaptyNotInitialized20Необходимо правильно настроить Adapty SDK с помощью метода Adapty.activate. Узнайте, как это сделать для React Native.
productNotFound22Эта ошибка означает, что запрошенный для покупки продукт недоступен в сторе.
currentSubscriptionToUpdateNotFoundInHistory24Исходная подписка, которую необходимо обновить, не найдена.
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Эта ошибка означает, что запрошенное действие над товаром завершилось неудачей.
billingNetworkError112Эта ошибка означает, что возникла проблема с сетевым соединением между устройством и системами Play.

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

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

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

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

productRequestFailed1002

Не удаётся получить список доступных продуктов. Возможная причина:

- Кэш ещё не создан, и одновременно отсутствует интернет-соединение.

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

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

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

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

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

ОшибкаКодРешение
notActivated2002SDK Adapty не активирован.
Чаще всего возникает, когда сплэш-экран или ранний UI-хук вызывает методы Adapty до того, как adapty.activate завершится. Симптом нестабильный и может не воспроизводиться на симуляторе из-за разницы в тайминге на реальном устройстве. Добавьте await к вызову activate перед любыми другими вызовами SDK. См. Порядок вызовов в React Native 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 отклоняет его. Всегда используйте await для identify перед любым вызовом, связанным с действием пользователя. См. Порядок вызовов в React Native SDK.
unsupportedData3007Ошибка указывает на то, что формат данных не поддерживается SDK.
persistingDataError3100Произошла ошибка при сохранении данных.
fetchTimeoutError3101Ошибка указывает на превышение времени ожидания операции получения данных.
operationInterrupted9000Операция была прервана системой.
Повторите вызов.

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

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

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