在 React Native SDK 中处理错误

SDK 返回的每个错误都是 AdaptyErrorCode 类型。以下是一个示例:

Tip

开启详细日志再调试。 大多数 AdaptyError 都包含一个底层的 StoreKit、Play Billing、网络或后端错误。开启详细日志(adapty.setLogLevel('verbose')——查看 纯 RNExpo 的日志配置说明),该底层错误会打印到控制台,通常能直接告诉你真正的原因。

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

优惠 identifier 无效。例如,您未在 App Store 中设置具有该标识符的优惠,或您已撤销该优惠。

请确保您在 AppStore Connect 中设置了所需的优惠,并传入有效的优惠标识符。

invalidSignature12此错误码表示付款折扣中的签名无效。
missingOfferParams13此错误码表示付款折扣中缺少参数。
invalidOfferPrice14此错误码表示您在 App Store Connect 中指定的价格不再有效。优惠必须始终代表折扣价格。

自定义 Android 错误码

错误代码解决方案
adaptyNotInitialized20您需要通过 Adapty.activate 方法正确配置 Adapty SDK。了解如何在 React Native 中进行配置。
productNotFound22此错误表示请求购买的产品在商店中不可用。
currentSubscriptionToUpdateNotFoundInHistory24未找到需要续订的原始订阅。
billingServiceTimeout97此错误表示请求在 Google Play 响应之前已达到最大超时时间。例如,这可能是由 Play Billing Library 调用所请求的操作执行延迟引起的。
featureNotSupported98当前设备上的 Play Store 不支持所请求的功能。
billingServiceDisconnected99此严重错误表示客户端应用通过 BillingClient 与 Google Play Store 服务之间的连接已断开。
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 中均无法购买,即使它们已在 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 之一,最常见的是 paymentCancelledpaymentInvalidpaymentNotAllowedinvalidOfferPrice。如果无法确定具体原因,请尝试新建沙盒用户画像;如果问题仍然存在,请联系 Apple 支持。
refreshReceiptFailed1010此错误表示未收到收据。仅适用于 StoreKit 1。
receiveRestoredTransactionsFailed1011购买恢复失败。

自定义网络错误码

错误代码解决方案
notActivated2002Adapty SDK 未激活。
最常见的情况是,启动页或早期 UI 钩子在 adapty.activate 返回之前调用了 Adapty 方法。该问题偶发,在模拟器上可能无法复现,因为真机的时序不同。请在安排任何其他 SDK 调用之前 await activate。完整调用顺序请参见 React Native SDK 调用顺序
badRequest2003请求无效。
请确认已完成接入 App Store 所需的所有步骤。
serverError2004服务器错误。
请稍后重试。如果问题持续存在,请联系 Adapty 支持团队。
networkFailed2005该错误表示用户设备存在网络连接问题。
请尝试关闭 VPN,或在蜂窝网络与 WiFi 之间切换。
decodingFailed2006该错误表示响应解码失败。
请检查代码,确保发送的参数有效。例如,此错误可能表明您使用了无效的 API 密钥。
encodingFailed2009该错误表示请求编码失败。
analyticsDisabled3000由于您已禁用分析事件,我们无法处理相关事件。
wrongParam3001该错误表示某些参数不正确。
如果您在使用 Adapty 付费墙编辑工具时因此错误无法展示付费墙,请在付费墙编辑工具中开启 Show on device
另一个可能的原因是本地备用付费墙文件版本与 SDK 版本不匹配,请在看板中下载新文件。
activateOnceError3005.activate 方法不能被调用超过一次。
profileWasChanged3006操作过程中用户画像发生了变更。
这通常发生在 adapty.identify 仍在进行时调用了其他方法——进行中的调用落在即将被切换的用户画像上,SDK 将其拒绝。请始终在任何用户操作调用之前 await identify。请参见 React Native SDK 调用顺序
unsupportedData3007该错误表示 SDK 不支持此数据格式。
persistingDataError3100保存数据时发生错误。
fetchTimeoutError3101该错误表示获取操作已超时。
operationInterrupted9000此操作被系统中断。
请重试该调用。

其他问题

如果您尚未找到解决方案,可以采取以下步骤:

  • 将 SDK 升级到最新版本:我们始终建议升级到最新的 SDK 版本,因为它们更稳定并包含已知问题的修复。
  • 联系支持团队或在支持论坛中获取开发者社区的帮助
  • 通过 support@adapty.io 或在线聊天联系支持团队:如果您还没准备好升级 SDK,或升级后问题仍未解决,请联系我们的支持团队。请注意,如果您启用详细日志记录并与团队共享日志,您的问题将得到更快解决。您也可以附上相关代码片段。