---
title: "iOS应用内购买，第5部分：SKError代码列表和处理方法"
description: "iOS上的SKErrors列表。在交易处理过程中会发生什么问题，需要开发人员采取什么行动，应该显示什么警告"
url: "https://adapty.io/zh/blog/ios-in-app-purchases-part-5-list-of-skerror-codes-and-how-to-handle-them/"
language: "zh"
slug: "ios-in-app-purchases-part-5-list-of-skerror-codes-and-how-to-handle-them"
category: "adapty-updates"
date: "2021-08-30T00:00:00.000Z"
date_modified: "2021-08-30T00:00:00.000Z"
author: "Kirill Potekhin"
---

# iOS应用内购买，第5部分：SKError代码列表和处理方法

在这篇文章中，我将阐述SKErrors：它们意味着什么问题以及解决方法：对于每个错误，我们将找出三个方面：为什么会发生错误、如何处理，以及在错误通知中显示什么消息。

## SKError.Code.unknown，code 0

**含义：** 发生未知原因的错误。

**解决方法：** 开发人员不需要采取任何行动。当使用iOS 14及以上版本的模拟器时，尝试获取产品的请求也会出现此错误。在这种情况下，如需获得一个产品，可使用StoreKit本地测试或使用iOS版本低于iOS 14的真实设备/模拟器。

**显示的消息：** 对不起，购买不可用的原因不明。请稍后再试。

![6129480992e3bf3eee2b6498 6zrtcxb0l aojbaykonkyks ytivmmkytagofibbph6zuprqv 4p1h8bjunif2yqzsush8mv26sehrxknqi ajrtygdos2nrly shjoisglkplfpgmxsnc hfvmsodaxqcii5sjz3ds0 6](https://adapty.io/wp-content/uploads/2023/03/6129480992e3bf3eee2b6498_6zrtcxb0l-aojbaykonkyks-ytivmmkytagofibbph6zuprqv_4p1h8bjunif2yqzsush8mv26sehrxknqi-ajrtygdos2nrly_shjoisglkplfpgmxsnc-hfvmsodaxqcii5sjz3ds0-6.png)

## SKError.Code.clientInvalid，code 1

**含义：** 用户无法进行购买。例如，一个孩子试图在设备上的父母控制功能打开时购买东西。

**解决方法：** 开发人员不需要采取任何行动。

**显示的消息：** 无法完成购买。请更改您的账户或设备。

## SKError.Code.paymentCancelled，code 2

**含义：** 该用户进入付款界面，但改变了购买的主意，并点击了“取消”。

**解决方法：** 从技术角度来看，没有发生错误，在这种情况下，不需要做任何操作。从市场营销的角度来看，您可以继续与这样的用户合作，例如，向他提供折扣。

**显示的消息：** 您有两个选择。最简单的方法就是不要展示任何东西。但您也可以尝试用这样的消息来赢回用户：“您已取消您的购买。您是否有兴趣以折扣价订阅（subscription）？”

## SKError.Code.paymentInvalid，code 3

**含义：** 由于某种原因，付款失败：卡已过期或没有足够的资金购买。

**解决方法：** 开发人员不需要采取任何行动。

**显示的消息：** 您的购买已被拒绝。请检查付款明细，确保您的账户有足够的资金。

## SKError.Code.paymentNotAllowed，code 4

**含义：** 这张卡可能有一些购买限制：设置了限制或网上购物功能不可用。

**解决方法：** 开发人员不需要采取任何行动。

**显示的消息：** 所选择的付款方式无法购买。请确保您的支付方式允许您在线购物。

## SKError.Code.storeProductNotAvailable，code 5

**含义：** 用户正在尝试购买一种产品，该产品在该商店使用的地区无法购买。

**解决方法：** 开发人员需要检查产品在用户的商店和地区的可用性。为此，您可以使用[SKStorefront](https://developer.apple.com/documentation/storekit/skstorefront)。

**显示的消息：** 这种产品在你们地区没有。请更改商店并再试一次。

## SKError.Code.cloudServicePermissionDenied，code 6

**含义：** 该用户没有提供他的云服务信息的访问权限。

**解决方法：** 开发人员不需要采取任何行动。

**显示的消息：老实说，** 我从未遇到过这样的错误。事实上，您可以写购买已被拒绝。

## SKError.Code.cloudServiceNetworkConnectionFailed，code 7

**含义：** 购买时设备没有联网。

**解决方法：** 开发人员不需要采取任何行动。

**显示的消息：** 无法完成购买，因为您的设备没有连接到互联网。请稍后在网络连接稳定时再试一次。

## SKError.Code.cloudServiceRevoked，code 8

**含义：** 该设备没有访问StoreKit支付服务。通常，这个错误发生在沙盒（Sandbox）。

**解决方法：** 创建一个新的沙盒用户或尝试重复操作。

**显示的消息：** 对不起**，** 发生了一个错误。

## SKError.Code.privacyAcknowledgementRequired，code 9

**含义：** 用户未接受苹果应用商店的使用条款。正如文档中所说，“用户尚未承认苹果对Apple Music的隐私政策”。但这看起来像是一个错误，因为这里没有理由提及Apple Music。

**解决方法：** 开发人员不需要采取任何行动。

**显示的消息：** 因为您没有接受苹果应用商店的使用条款，所以无法完成购买。请在设置中确认同意，然后返回购买。

## SKError.Code.unauthorizedRequestData，code 10

**含义：** 您的应用（APP）ID不包含使用StoreKit所需的授权。

**解决方法：** 您需要为您的应用完成应用内购买的设置过程。

**显示的消息：** 发生错误，请稍后再试。

## SKError.Code.invalidOfferIdentifier，code 11

**含义：** 用户试图用错误的优惠推广（promotional offer）购买产品。

**解决方法：** 开发人员不需要采取任何行动。

**显示的消息：** 优惠推广无效或已过期。

## SKError.Code.invalidSignature，code 12

**含义：** StoreKit请求的优惠推广签名生成错误。

**解决方法：** 检查签名是如何生成的，并修复错误。如果您使用的是Adapty，请下载订阅密钥。

**显示的消息：** 对不起，应用优惠码时发生错误。请稍后再试。

## SKError.Code.missingOfferParams，code 13

**含义：** 优惠推广参数形成错误。

**解决方法：** 检查并更正您的优惠推广的参数。

**显示的消息：** 对不起，应用优惠推广时发生错误。请稍后再试。

## SKError.Code.invalidOfferPrice，code 14

**含义：** 用户试图以不相关的价格购买产品。很可能，AppStore中显示的价格不再有效。

**解决方法：** 在苹果应用商店中为该报价设置更新后的价格。

**显示的消息：** 对不起，您的购买无法完成。请稍后再试。

## 结论

正确的错误处理可以改善用户体验，至少可以让一些由于某些原因无法立即支付订阅费用的用户返回。以下是在iOS应用中执行购买操作时最常见的错误：

- SKError.Code.unknown，未知错误；
- SKError.Code.paymentCancelled，当用户取消购买时；
- SKError.Code.paymentInvalid，当无法处理付款时。

实际上，错误处理和购买实现是一个繁琐的过程。所以我建议尝试[适用于iOS的Adapty软件开发工具包（SDK）](https://adapty.io/sdk/ios/)，它能够更轻松地实现应用内购买，还能提供其他好处，如订阅分析、群组分析（cohort analysis）、付费墙（paywall）的a/b测试（a/b test）以及服务器端收据验证。
