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

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

Tip

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

Important

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

using AdaptySDK;

Adapty.MakePurchase(product, (result, error) => {
  if (error != null && error.Code == AdaptyErrorCode.CantMakePayments) {
      // In-app purchases are not allowed on this device
  }
});
Note

Отмена покупки пользователем не является ошибкой. MakePurchase сообщает об этом через результат: result.Type равен AdaptyPurchaseResultType.UserCancelled — см. Совершение покупок.

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

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

Пользователь отменил платёж.

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

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

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

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

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

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

ОшибкаКодРешение
adaptyNotInitialized20Необходимо правильно настроить Adapty SDK с помощью метода Adapty.activate. Узнайте, как это сделать для Unity.
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Встроенные покупки не разрешены на этом устройстве. См. гайд по устранению неполадок здесь.
cantReadReceipt1005

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

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

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

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

ОшибкаКодРешение
notActivated2002SDK Adapty не активирован.
Чаще всего возникает, когда экран загрузки или ранний хук скрипта вызывают методы Adapty до завершения Adapty.Activate. Симптом непостоянен и может не воспроизводиться в редакторе, поскольку тайминг на реальном устройстве отличается. Дождитесь колбэка завершения Activate перед любым другим вызовом SDK. Подробнее — в разделе Порядок вызовов в Unity 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 перед любым вызовом, связанным с действием пользователя. Подробнее — в разделе Порядок вызовов в Unity SDK.
unsupportedData3007Формат данных не поддерживается SDK.
fetchTimeoutError3101Истекло время ожидания операции получения данных.
operationInterrupted9000Операция была прервана системой.
Повторите вызов.

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

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

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