iOS应用内购买,第5部分:SKError代码列表和处理方法
Updated: March 20, 2023
在这篇文章中,我将阐述SKErrors:它们意味着什么问题以及解决方法:对于每个错误,我们将找出三个方面:为什么会发生错误、如何处理,以及在错误通知中显示什么消息。
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。
显示的消息:这种产品在你们地区没有。请更改商店并再试一次。
2024 subscription benchmarks and insights
Get your free copy of our latest subscription report to stay ahead in 2024.
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),它能够更轻松地实现应用内购买,还能提供其他好处,如订阅分析、群组分析(cohort analysis)、付费墙(paywall)的a/b测试(a/b test)以及服务器端收据验证。