ios - 获取 "Purchase stop"用于应用内购买

标签 ios testing in-app-purchase sandbox storekit

我已经创建了一个测试用户,并在“设置”中退出了我的手机。 当我尝试使用我的测试帐户在我的应用程序中尝试应用程序内购买时,我得到了“确认您的订阅”,这很好,但后来我得到了“购买已停止”

我不知道我错过了哪一步。感谢任何能给我任何线索的人。

最佳答案

使用测试帐户调试应用程序。 App Store 是一个交易环境,任何用户都可以在这个环境中购买应用程序,但是如果要在正在开发的过程中测试应用程序,就不能在真正的 Apple store 中进行支付。苹果为开发者提供了调试购买行为的测试沙箱,它完全照搬了app store的交易环境,但是在沙箱环境中,我们不能使用通常的苹果账户,而是需要使用测试账户。 (只要有app id,就可以添加其商品并进行测试。) 在iTunesConnect首页可以点击Manage Users进入用户管理页面,然后选择Test User创建测试账号。根据最新的Apple Developer致谢,创建测试账号必须使用真实的Email地址,并且密码必须符合要求,激活后需要在邮件中使用测试账号。这里创建的可用于购买应用程序开发过程中的高级帐户,必须记住,该帐户不能用于测试在生产环境中登陆真实应用商店和购买行为,否则您的 iTunes 帐户将可能被停止使用。 (测试账号可以通过itunes connect添加,这里添加账号信息就行了,注意这个账号只能用于我们的应用沙箱测试,不能用于正常购买的商品(比如购买已经在里面申请的下架商品),否则苹果将禁用该帐户。) 当我们确认购买了一个产品后,我们会在transactionReceipt里面得到一个SKPaymentTransaction对象来验证信息(就是一组json字符串),我们进行base64加密,然后按照Apple要求的格式(具体引用文档 ) 被发送到上面的验证地址。鉴权成功后,应用商店内返回的购买商品的信息中包含具体可以使用的信息,可以进行对账。

购买完商品后,我们本地的交易队列,会有一个新的对象,这个交易队列是保存在本地硬盘上的,除非我们调用finishTransaction,否则这个交易对象是不会被删除的。而当程序打开时(这里要注意,后面会详细说明)如果事务队列不为空,那么我们会通知ios事务队列状态更新,我们会根据事务的状态进行处理目的。 SKPaymentTransactionStatePurchased 交易成功,那么钱已经扣完了,我们要保证商品会送到用户手中 SKPaymentTransactionStateFailed 交易失败的原因有很多(可以通过SKPaymentTransaction.error.code查看具体失败原因),最常见的是SKErrorPaymentCancelled(用户取消交易),或者没有输入有效的itunes id SKPaymentTransactionStateRestored 已购买的非消耗品,则按交易成功处理。

如果交易失败,我们可以将交易从交易队列中移除。如果成功,则要发起认证,等待处理认证结果。结果不超过三个,验证成功,验证不合法,验证错误。我们要讲交易成功和非法交易对象从队列中移除,验证错误很可能是验证服务器失败,我们不应该删除交易对象,要回到程序上重新验证,直到成功或失败

关于ios - 获取 "Purchase stop"用于应用内购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22828877/

相关文章:

iOS 应用内购买防止通过网站收取 30% 的订阅费

iOS横向定位问题Swift SpriteKit

ios - 如何获取具有所有(递归)子项的 PFUser 对象

testing - Jira 作为测试用例执行工具

android - 如何确定获取 Google 用户 ID(不是设备 ID)?

android - 应用内购买能否防止软件盗版

ios - 如何更改 XCode ios SDK 编译器设置以允许非 void 方法的 void return 语句?

ios - 如何在 Objective C++ 中创建模型类?

python - 异常测试失败

git - 如果 diff'ing 不在存储库中,则没有选项可以忽略文件模式吗?