【问题标题】:Get "Purchase stop" for in app purchase为应用内购买获取“购买停止”
【发布时间】:2014-04-03 05:50:00
【问题描述】:

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

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

【问题讨论】:

  • 你能检查错误代码吗?

标签: ios testing in-app-purchase sandbox storekit


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多