iOS沙盒testing用户帐户订阅pipe理

我目前正在尝试将IAP添加到现有的应用程序。 为此,我添加了一些产品并创build了一些testing用户。 产品是定期订阅。 我正在testing的设备是iOS 4的iPhone 4S。

我可以成功地查询我的产品的商店,并成功购买我的新testing用户。 我遇到的问题是,如果我尝试从“商店设置应用”pipe理我的订阅,它会强制我通过告诉我“此帐户尚未用于购买AppStore中的任何内容,请检查您的帐户并继续“。 如果我查看帐户,不会让我继续提供CreditCard信息。

最终的结果是,我永远不能取消我的testing订阅。 我删除了testing用户并创build了新的用户,删除了应用程序并重新安装了它,杀了StoreApp和Settings App,重新启动了设备,在购买之前通过电子邮件validation了帐户,未在购买前通过电子邮件validation帐户…所有排列似乎失败了。

有时我会购买相同的订阅两次,这将提示StoreKit要求我pipe理我的订阅设置。 有时会导致以前的“帐户审核”stream程,有时会导致出现“无法连接到iTunes Store”的警报。

我已经没有了如何继续的想法。

编辑 – 下面是我创build的任何iTunesConnecttesting用户的事件stream程

初始认购
初始认购

使用现有的ID
使用现有的ID

testing帐户login
测试帐户登录

pipe理订阅
管理订阅

AppStorelogin
AppStore登录

无法连接到AppStore
无法连接

检查您的帐户
评论

然后,审查过程迫使我inputCreditCard信息,即使它的地址是“1 Infinite Loop Cupertino,CA”(即它知道这是一个testing帐户)。

有苹果开发者的回应。(Rich Kubota)关于沙盒环境下的订阅testing。

这是应用内购买模拟过程中的一个漏洞。 没有支持的方式来模拟取消过程或模拟用户iTunes应用程序的pipe理订阅过程。 TestFlight版本的应用程序也存在此限制。 将应用程序的TestFlight版本提交给用户并testing应用程序时,用户帐户实际上正在沙箱环境中运行。 您已经validation了这一点,因为TestFlight应用程序不会在TestFlight用户iTunespipe理的订阅部分显示为托pipe应用程序。 这是因为该应用程序在沙盒环境中,iTunes应用程序对此一无所知。 我已经在这个论坛上回复了一段时间,但是validation应用程序处理自动更新过程的最好方法是validation应用程序是否也正确处理了通过transactionObserver检测到自动续订订阅续订。 例如,如果您在沙盒环境中购买1个月的订阅。 然后杀死应用程序,等待6分钟,然后重新启动应用程序,transactionObserver是否检测到有一个incompleteTransaction(压缩的一个月更新)要处理。 这与用户在iTunes订阅pipe理页面重新启动订阅的情况非常相似。 该交易由iTunes商店logging,并且启用用于用户帐户/应用程序捆绑ID的incompleteTransaction。 当应用程序启动并激活transactionObserver(通过调用addTransactionObserver)时,会检测incompleteTransaction并调用updatedTransaction delefgate方法来处理续订。 然后,应用程序可以validationapplicationReceipt,以validation现在是否有in_app数组项目,用于自动更新订阅项目,该项目的expire_date大于当前date,并知道自动续订订阅product_id处于活动状态。 至于testing自动更新订阅已被取消,这再次需要iTunes Store服务器支持来模拟。 但是,接收validation过程每天都在工作,并且可以检测哪个in_app数组项目是自动更新订阅的最新项目,然后检测是否设置了cancel_date告诉应用程序订阅已被取消。 请注意,只要检测到任何元素的cancel_date字段都可能导致误报。 用户可能已经取消了自动更新订阅,然后决定不再那么糟糕,并重新购买了该项目。 由于这个原因,逻辑需要确保在最新的in_app数组元素中设置了cancel_date字段,以知道当前的订阅已经被实际取消。 我试图确定的一个问题 – 如果取消的项目将expire_date移动到cancel_date,以便取消的订阅可以看起来像过期的订阅一样。 似乎是正确的举动 – 但这些信息由iTunes Store服务器团队控制。 如果你想追求一个机制来模拟沙箱中的生产环境的这些function,我build议你使用Apple Developer Bug Report网页提交一个增强请求。 请为iTunes错误报告selectiTunesConnect产品,因为build议是iTunes Store模拟的,而不是iOS。

你不能真正地pipe理沙箱中的订阅,但正如Jean-Paul de Ville de Goyet在苹果开发者论坛上发现的那样:

1个月订阅每5分钟自动更新一次。 到现在为止还挺好。 他们自动更新5次,然后停止,所以25分钟后,你会得到21006错误。 但是,即使重新购买相同的订阅,它也不会在同一个testing帐户上自动更新,因为它已经自动更新了5次。 所以,如果你想testing续订,你已经搞乱了这些订阅一段时间,你需要创build一个新的iTunes连接testing用户。 这真的很烦人,如果我们可以重置一个testing用户帐户的整个购买历史将会更容易。

我以同样的方式testing了我的订阅。