处理 iOS SDK 中的错误

Adapty SDK 为各类错误提供了统一的包装器,称为 AdaptyError。基本上,SDK 返回的每个错误都是 AdaptyError。它有两个实用属性:originalErroradaptyErrorCode,详述如下。

originalError 包含原始错误,以便您在需要时直接使用。可以是 SKErrorNSError 或普通的 Swift Error。该属性是可选的,因为某些错误可能直接由 SDK 生成(例如数据不一致或缺失),此时不存在用于构建包装器的原始错误。

adaptyErrorCode 可用于处理常见问题,例如:

  • 无效凭据
  • 网络错误
  • 取消付款
  • 结算问题
  • 无效收据
  • 以及更多情况

检查错误的特定代码并作出相应响应非常简单。

do {
    let info = try await Adapty.makePurchase(product: product)
} catch {
    if error.adaptyErrorCode == .paymentCancelled {
        // purchase was cancelled
        // you can offer discount to your user or remind them later
    }
}

如果上述解决方案未能解决您的问题,请参阅其他问题,了解联系支持前需要采取的步骤,以帮助我们更高效地为您提供协助。

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 中指定的价格已不再有效。优惠必须始终代表折扣价格。
noProductIDsFound1000

此错误表示您在付费墙上请求的产品虽然已在 App Store 中列出,但均无法购买。此错误有时会伴随 InvalidProductIdentifiers 警告出现。如果仅出现警告而没有错误,请忽略该警告。

如果您遇到此错误,请按照 修复 Code-1000 noProductIDsFound 错误 部分中的步骤操作。

productRequestFailed1002当前无法获取可用产品。
cantMakePayments1003此设备不允许应用内购买。请参阅故障排查指南
cantReadReceipt1005

设备上没有有效的收据。这可能是沙盒测试期间的问题。

在沙盒环境中,在实际完成一次购买之前,您不会有有效的收据文件,因此请确保在访问收据之前先完成一次购买。沙盒测试期间,还请确保您在设备上登录了有效的 Apple 沙盒账户。

productPurchaseFailed1006产品购买失败。这是与 Adapty 无关的 StoreKit 错误。请尝试使用新的沙盒用户画像。如果问题仍未解决,请联系 Apple 支持。
refreshReceiptFailed1010收据刷新操作失败。
fetchSubscriptionStatusFailed1020从 App Store 获取订阅状态失败。
unknownTransactionId1030交易标识符未知。
paymentPendingError1050付款当前处于待处理状态。

网络错误

错误代码解决方案
notActivated2002Adapty SDK 未激活。您需要使用 Adapty.activate 方法正确配置 Adapty SDK
badRequest2003请求无效。
请确保您已完成与 App Store 集成所需的所有步骤。
serverError2004服务器错误。
请稍后重试。如果问题未解决,请联系 Adapty 支持团队。
networkFailed2005该错误表示用户设备的网络连接存在问题。
请尝试禁用 VPN,或从蜂窝网络切换到 WiFi,反之亦然。
decodingFailed2006该错误表示响应解码失败。
请检查您的代码,确保您发送的参数有效。例如,此错误可能表明您使用了无效的 API 密钥。
encodingFailed2009该错误表示请求编码失败。

常规错误

错误代码解决方案
analyticsDisabled3000由于您已选择退出,我们无法处理分析事件。
wrongParam3001此错误表示您的某些参数不正确。
如果您正在使用 Adapty 付费墙编辑工具,但因此错误无法显示付费墙,请在付费墙编辑工具中开启 Show on device
另一个可能的原因是本地备用付费墙文件版本与 SDK 版本不匹配。请在看板中下载新文件。
activateOnceError3005无法多次调用 .activate 方法。
profileWasChanged3006操作过程中用户画像已更改。
当您调用 identify 后,在 identify 成功之前又调用了其他方法时,可能会出现此错误。为避免此问题,请等待 identify 成功后再调用其他方法。
unsupportedData3007此错误表示 SDK 不支持该数据格式。
unidentifiedUserLogout3020无法对未识别用户调用 logout 方法。
fetchTimeoutError3101此错误表示获取操作已超时。
operationInterrupted9000此操作被系统中断。

其他问题

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

  • 将 SDK 升级到最新版本:我们始终建议升级到最新的 SDK 版本,因为它们更加稳定,并包含已知问题的修复。
  • 联系支持团队或在支持论坛中获取开发者社区的帮助
  • 通过 [email protected] 或在线聊天联系支持团队:如果您暂时不打算升级 SDK,或升级后问题仍未解决,请联系我们的支持团队。请注意,如果您启用详细日志记录并将日志分享给团队,您的问题将得到更快解决。您也可以附上相关的代码片段。