BlogRight arrowTutorialRight ArrowiOS应用内购买,第5部分:SKError代码列表和处理方法
BlogRight arrowTutorialRight ArrowiOS应用内购买,第5部分:SKError代码列表和处理方法

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

iOS应用内购买,第5部分:SKError代码列表和处理方法
Listen to the episode
iOS应用内购买,第5部分:SKError代码列表和处理方法

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

⭐️ Download our guide on in-app techniques which will make in-app purchases in your app perfect

SKError.Code.unknown,code 0

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

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

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

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

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

SKError.Code.cloudServicePermissionDenied,code 6

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

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

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

SKError.Code.cloudServiceNetworkConnectionFailed,code 7

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

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

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

Start for free

Adapty handles all SKErrors automatically,

as well as provides the server-side validation and covers all side cases

Start for free

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),它能够更轻松地实现应用内购买,还能提供其他好处,如订阅分析、群组分析(cohort analysis)、付费墙(paywall)的a/b测试(a/b test)以及服务器端收据验证。

Further reading

iOS in-app purchases, part 5: list of SKError codes and how to handle them
iOS in-app purchases, part 5: list of SKError codes and how to handle them
August 30, 2021
6 min read
Ultimate guide on Apple Subscription Offers. Part 1
Ultimate guide on Apple Subscription Offers. Part 1
February 23, 2021
7 min read
Growing mobile in-app subscriptions: the right way
Growing mobile in-app subscriptions: the right way
June 22, 2020
15 min read