iOS沙盒测试用户账户订阅管理。

45

我正在尝试为现有的应用添加IAP。 为此,我已经添加了一些产品并创建了一些测试用户。 这些产品是循环订阅。 我正在使用iOS 5.1的iPhone 4S进行测试。

我可以成功地查询商店中的产品,并使用我的新测试用户成功购买这些产品。 我遇到的问题是,如果我尝试从“商店设置”应用程序管理我的订阅,则会强制要求我通过告诉我“此帐户未在AppStore中购买任何东西,请查看您的帐户并继续。”来审核我的帐户。 如果我审核帐户,它将不允许我在没有提供信用卡信息的情况下继续。

最终结果是我无法取消我的测试订阅。 我已经删除了测试用户并创建了新的测试用户,删除了应用程序并重新安装它,杀死了商店应用程序和设置应用程序,重新启动了设备,在购买之前通过电子邮件验证了帐户,在购买之前没有验证过帐户,所有排列组合似乎都失败了。

有时我会购买相同的订阅,这会提示StoreKit要求我管理我的订阅设置。 有时这会导致先前的“帐户审核”过程,有时会导致警报显示“无法连接到iTunes Store”。

我已经没有想继续尝试的思路了。

编辑-这是我创建的任何iTunesConnect测试用户的事件流程

初始订阅
Initial Subscription

使用现有ID
Use Existing ID

测试帐户登录
Test Account Sign-In

管理订阅
Manage Subscription

AppStore签到
AppStore Sign-in

无法连接到AppStore
Cannot Connect

查看您的账户
查看

然后,审核过程要求我输入信用卡信息,尽管它已经知道这是一个测试账户,地址为“1 Infinite Loop Cupertino, CA”。


1
这篇类似的帖子找到了答案: https://dev59.com/tW455IYBdhLWcg3wD_sB - jbcaveman
2个回答

59

在沙盒环境中无法真正管理订阅,但正如Jean-Paul de Ville de Goyet在Apple开发者论坛上发现的那样:

1个月的订阅每5分钟自动续订一次。 到这里没问题。他们会自动续订5次,然后停止,因此在25分钟后您将收到21006错误。 但是,即使重新购买相同的订阅,它也不会在同一个测试帐户上再次自动续订,因为它已经自动续订了5次。 因此,如果您想测试续订并且您已经使用这些订阅进行了一段时间的操作,则需要创建一个新的iTunes Connect测试用户。 老实说,这非常令人恼火,如果我们可以重置测试用户帐户的整个购买历史记录,那将更容易。

我以同样的方式测试了我的订阅。


1
我想到的最快的方法是:在“用户和角色”中进行测试购买,然后删除电子邮件,接着使用新的后缀重新迭代创建,例如:myApptester1@gmail.com... myApptester2@gmail.com... 这是替代等待5分钟到1小时的唯一解决方案。 - lifewithelliott
16
为加速创建新账户的过程:在Chrome中,打开开发人员控制台并填写表格。页面加载完成并账户创建后,转到开发人员控制台的网络选项卡,找到第一个请求(应该是发送至 https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/users/iap/add),右键单击它并选择“复制为 cURL ”。然后,每次您想添加新账户时,只需修改cURL命令中的电子邮件地址,并在终端中运行它。瞧,您的新账户已经创建好了!无需每次都填写表格。 - Jonny Cook
现在是2019年,苹果已经加强了安全性...现在您需要使用Postman向https://appstoreconnect.apple.com/iris/v1/sandboxTesters进行HTTP POST。必要的请求标头可以在Chrome开发人员工具中找到,如@JonnyCook所述。确保包括cookie标头,否则您将收到“401 NOT AUTHORIZED”响应。实际用户数据作为JSON发送到请求正文中,只需更改每个用户的电子邮件即可。 - Magnus

19
成功购买,可以在沙箱环境中进行测试。你可以使用测试用户账户购买订阅,在等待自动续订后,检查应用的transactionObserver是否正确处理了更新。确保应用程序能够正确处理自动续订流程是非常重要的,因为这可能会影响到用户对应用的满意度。但要注意,在沙箱环境中测试仅适用于开发和测试目的,实际上线前还需要测试真实环境下的自动续订流程。

取消订阅需要iTunes Store服务器支持模拟。然而,收据验证过程每天都在工作,并且可以检测哪个in_app数组项是自动续订订阅的最新项目,然后检测cancel_date是否设置告诉应用程序该订阅已被取消。需要注意的是,仅检测任何元素的cancel_date字段可能会导致误报。用户可能先前取消了自动续订订阅,然后决定重新购买该物品。因此,逻辑需要确保在最新的in_app数组元素中设置了cancel_date字段,以知道当前订阅是否实际上已被取消。我正在尝试确定一个问题-如果取消的项目将使expire_date提前到cancel_date,以便取消的订阅可以与过期的订阅相同。看起来是正确的做法-但这些信息受到iTunes Store服务器团队的控制。
如果您希望追求在沙盒中模拟生产商店环境的机制,建议您使用Apple Developer Bug Report网页提交增强请求。请为Bug报告选择iTunesConnect产品,因为建议是iTunes Store要模拟的东西,而不是iOS。

11
这是2019年9月,iOS 13即将发布,但我们仍然存在同样的问题。常识点,苹果! - Tushar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接