在 React Native SDK 中处理错误
SDK 返回的每个错误都是 AdaptyErrorCode 类型。以下是一个示例:
如果以上方案未能解决问题,请在联系支持前先查看其他问题中的操作步骤,以便我们更高效地帮助你。
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 的映射方向相反——从数字映射到名称——因此适合用于日志记录,而非比较。
用户取消的购买不是错误。makePurchase 会返回一个 AdaptyPurchaseResult,其 type 为 'user_cancelled' —— 详见发起购买。
系统 StoreKit 错误码
| 错误 | 错误码 | 解决方案 |
|---|---|---|
| unknown | 0 | 表示发生了未知或意外错误的错误码。 请重试或参阅其他问题部分。 |
| clientInvalid | 1 | 此错误码表示客户端不被允许执行所尝试的操作。 |
| paymentCancelled | 2 | 此错误码表示用户取消了付款请求。 无需采取任何操作,但从业务逻辑角度,您可以向用户提供折扣或稍后提醒他们。 |
| paymentInvalid | 3 | 此错误表示 App Store 无法识别某个付款参数。 |
| paymentNotAllowed | 4 | 此错误码表示用户不被允许授权付款。 |
| storeProductNotAvailable | 5 | 此错误码表示所请求的产品在商店中不可用。 请尝试重新安装应用。 |
| cloudServicePermissionDenied | 6 | 此错误码表示用户未允许访问云服务信息。 |
| cloudServiceNetworkConnectionFailed | 7 | 此错误码表示设备无法连接到网络。 |
| cloudServiceRevoked | 8 | 此错误码表示用户已撤销使用此云服务的权限。 |
| privacyAcknowledgementRequired | 9 | 此错误码表示用户尚未确认 Apple 的隐私政策。 |
| unauthorizedRequestData | 10 | 此错误码表示应用正在尝试使用其没有所需权限的属性。 |
| invalidOfferIdentifier | 11 | 优惠 请确保您在 AppStore Connect 中设置了所需的优惠,并传入有效的优惠标识符。 |
| invalidSignature | 12 | 此错误码表示付款折扣中的签名无效。 |
| missingOfferParams | 13 | 此错误码表示付款折扣中缺少参数。 |
| invalidOfferPrice | 14 | 此错误码表示您在 App Store Connect 中指定的价格不再有效。优惠必须始终代表折扣价格。 |
自定义 Android 错误码
| 错误 | 代码 | 解决方案 |
|---|---|---|
| adaptyNotInitialized | 20 | 您需要通过 Adapty.activate 方法正确配置 Adapty SDK。了解如何在 React Native 中进行配置。 |
| productNotFound | 22 | 此错误表示请求购买的产品在商店中不可用。 |
| currentSubscriptionToUpdateNotFoundInHistory | 24 | 未找到需要续订的原始订阅。 |
| billingServiceTimeout | 97 | 此错误表示请求在 Google Play 响应之前已达到最大超时时间。例如,这可能是由 Play Billing Library 调用所请求的操作执行延迟引起的。 |
| featureNotSupported | 98 | 当前设备上的 Play Store 不支持所请求的功能。 |
| billingServiceDisconnected | 99 | 此严重错误表示客户端应用通过 BillingClient 与 Google Play Store 服务之间的连接已断开。 |
| billingServiceUnavailable | 102 | 此临时错误表示 Google Play Billing 服务当前不可用。大多数情况下,这意味着客户端设备与 Google Play Billing 服务之间的某处存在网络连接问题。 |
| billingUnavailable | 103 | 此错误表示购买过程中发生了用户结算错误。可能发生此情况的示例包括: 1. 用户设备上的 Play Store 应用已过期。 2. 用户所在的国家/地区不受支持。 3. 用户是企业用户,其企业管理员已禁止用户进行购买。 4. Google Play 无法向用户的付款方式收费。例如,用户的信用卡可能已过期。 5. 用户未登录 Play Store 应用。 |
| developerError | 105 | 这是一个严重错误,表示您使用 API 的方式不正确。 |
| billingError | 106 | 这是一个严重错误,表示 Google Play 本身存在内部问题。 |
| itemAlreadyOwned | 107 | 该消耗型商品已被购买。 |
| itemNotOwned | 108 | 此错误表示对该商品请求的操作失败。 |
| billingNetworkError | 112 | 此错误表示设备与 Play 系统之间的网络连接存在问题。 |
自定义 StoreKit 错误码
| 错误 | 代码 | 解决方案 |
|---|---|---|
| noProductIDsFound | 1000 | 此错误表示您在付费墙上请求的产品在 App Store 中均无法购买,即使它们已在 App Store 中列出。此错误有时会伴随 如果您遇到此错误,请按照 修复 Code-1000 |
| productRequestFailed | 1002 | 当前无法获取可用产品。可能的原因: - 尚未创建缓存,同时也没有网络连接。 |
| cantMakePayments | 1003 | 此设备不允许进行应用内购买。请参阅故障排除指南。 |
| noPurchasesToRestore | 1004 | 在 Adapty React Native SDK 4.0.3 中已弃用:restorePurchases() 不再返回此错误。当没有可恢复的内容时,该方法会返回当前用户画像,请检查其中的访问等级状态。在更早的 SDK 版本中,此错误表示 Google Play 未找到可恢复的购买记录。 |
| cantReadReceipt | 1005 | 设备上没有有效的收据。这在沙盒测试期间可能会出现。 无需采取任何操作,但从业务逻辑角度,您可以为用户提供折扣或稍后提醒他们。 |
| productPurchaseFailed | 1006 | 产品购买失败。此错误封装了底层 StoreKit 错误——请读取封装的错误(或启用详细日志在控制台中查看)以了解实际原因。封装的错误通常是上表中 StoreKit 代码 0–14 之一,最常见的是 paymentCancelled、paymentInvalid、paymentNotAllowed 或 invalidOfferPrice。如果无法确定具体原因,请尝试新建沙盒用户画像;如果问题仍然存在,请联系 Apple 支持。 |
| refreshReceiptFailed | 1010 | 此错误表示未收到收据。仅适用于 StoreKit 1。 |
| receiveRestoredTransactionsFailed | 1011 | 购买恢复失败。 |
自定义网络错误码
| 错误 | 代码 | 解决方案 |
|---|---|---|
| notActivated | 2002 | Adapty SDK 未激活。 最常见的情况是,启动页或早期 UI 钩子在 adapty.activate 返回之前调用了 Adapty 方法。该问题偶发,在模拟器上可能无法复现,因为真机的时序不同。请在安排任何其他 SDK 调用之前 await activate。完整调用顺序请参见 React Native SDK 调用顺序。 |
| badRequest | 2003 | 请求无效。 请确认已完成接入 App Store 所需的所有步骤。 |
| serverError | 2004 | 服务器错误。 请稍后重试。如果问题持续存在,请联系 Adapty 支持团队。 |
| networkFailed | 2005 | 该错误表示用户设备存在网络连接问题。 请尝试关闭 VPN,或在蜂窝网络与 WiFi 之间切换。 |
| decodingFailed | 2006 | 该错误表示响应解码失败。 请检查代码,确保发送的参数有效。例如,此错误可能表明您使用了无效的 API 密钥。 |
| encodingFailed | 2009 | 该错误表示请求编码失败。 |
| analyticsDisabled | 3000 | 由于您已禁用分析事件,我们无法处理相关事件。 |
| wrongParam | 3001 | 该错误表示某些参数不正确。 如果您在使用 Adapty 付费墙编辑工具时因此错误无法展示付费墙,请在付费墙编辑工具中开启 Show on device。 另一个可能的原因是本地备用付费墙文件版本与 SDK 版本不匹配,请在看板中下载新文件。 |
| activateOnceError | 3005 | .activate 方法不能被调用超过一次。 |
| profileWasChanged | 3006 | 操作过程中用户画像发生了变更。 这通常发生在 adapty.identify 仍在进行时调用了其他方法——进行中的调用落在即将被切换的用户画像上,SDK 将其拒绝。请始终在任何用户操作调用之前 await identify。请参见 React Native SDK 调用顺序。 |
| unsupportedData | 3007 | 该错误表示 SDK 不支持此数据格式。 |
| persistingDataError | 3100 | 保存数据时发生错误。 |
| fetchTimeoutError | 3101 | 该错误表示获取操作已超时。 |
| operationInterrupted | 9000 | 此操作被系统中断。 请重试该调用。 |
其他问题
如果您尚未找到解决方案,可以采取以下步骤:
- 将 SDK 升级到最新版本:我们始终建议升级到最新的 SDK 版本,因为它们更稳定并包含已知问题的修复。
- 联系支持团队或在支持论坛中获取开发者社区的帮助。
- 通过 support@adapty.io 或在线聊天联系支持团队:如果您还没准备好升级 SDK,或升级后问题仍未解决,请联系我们的支持团队。请注意,如果您启用详细日志记录并与团队共享日志,您的问题将得到更快解决。您也可以附上相关代码片段。