iOS订阅测试终极指南The Ultimate Guide to iOS Subscription Testing
订阅测试如何测试呢?平时遇到的都是消耗型商品,没有持续性,买完就完了,而订阅型是一个持续时间段,这个时间内有很多故事发生,测试起来相对也是复杂的多。找到一篇文章,参考下:
找到并修复错误,这样你就不会因为订阅代码中的问题而赔钱。
测试appstore订阅非常重要,但也很难做好。苹果的订阅相关文档是。。。嗯。。。缺乏!而且苹果在提供测试资源方面也从来没有做得很好。本指南可能随着时间的推移而过时,因为苹果会对订阅进行更改,但我们也会找出更好的测试方法。如果您看到任何需要修复或需要添加的内容,请提交拉取请求!
基础知识
有3种不同的测试环境:生产(AppStore)、TestFlight(生产沙盒)和沙盒(开发人员构建)。它们的行为稍有不同,需要单独测试。
1sandbox试验
开发者沙盒是第一道防线。确保您了解开发过程中的怪癖和限制,以便在进行生产测试时节省时间。
2TestFlight试验
虽然对beta测试人员没有特别大的帮助,但是您应该在产品发布之前花一些时间在产品沙盒中进行测试。TestFlight的行为类似于沙盒,但使用的是生产应用程序商店帐户。
3生产测试
即使在发布版本发布到应用商店之前,也有一些在生产中进行测试的技巧,但是你也希望随着应用程序的更新,在应用程序商店中进行实时测试。
附加测试策略
与TestFlight测试人员沟通
TestFlight订阅测试的局限性使得beta测试人员很难为您充分测试订阅。
测试免费试用和其他介绍性服务
您可以提供折扣价或免费试用的可续费订阅,以便新客户可以体验您的订阅价值,然后再支付全价。
测试订阅服务
具有自动续费订阅的应用程序可以为现有或以前订阅的客户提供特定期限的折扣价格。
质量保证检查表
这个方便的清单将帮助您确保在测试订阅时已经覆盖了您的基础。
随机提示
有太多随机的、没有文档记录的行为,无法为每个行为创建一个页面。这是一些可能有助于了解的随机事件的集合。
sandbox test
要在开发人员沙盒中测试,应用程序必须在Xcode中构建为开发人员内部版本。开发人员通常在开发过程中使用它在设备上快速测试,但是您也可以提供设备并将开发人员构建分发给QA和其他内部测试人员,而不必经过TestFlight和他们的beta应用程序审查。为了防止应用程序在应用程序商店外广泛传播,苹果将设备配置限制为每种设备类型(iPhone、iPad、Apple Watch、Apple TV和Mac)的100台,总共500台设备。
在开发人员沙盒中测试需要一个沙盒帐户。苹果在这方面的文件很好,希望能保持最新。
若要首次使用新沙盒帐户登录,必须尝试在应用程序的开发人员版本中进行购买。使用此方法登录沙盒帐户后,可以转到设备的“设置”应用程序,轻触“iTunes & app Store”,然后滚动到底部的“沙盒帐户”部分。在这里,您可以登录和注销不同的沙盒帐户进行测试。如果您意外地在生产应用程序商店中使用了沙盒帐户,则该帐户将不再在沙盒中工作。当有疑问时,创建一个新的沙盒帐户并重新测试。
(设置应用程序的沙盒帐户部分是在iOS12中引入的。在iOS 11或更早版本上进行测试时,您需要注销生产应用程序商店帐户,然后在应用程序中出现提示时使用测试帐户登录。)
虽然它们应该独立工作,但我们注意到,如果您的设备同时使用生产帐户和沙盒帐户登录,那么购买沙盒将不起作用。如果可能,我们建议只登录到测试设备上的沙盒帐户。
沙盒可靠性
众所周知,开发人员沙盒是不可靠的。目前还不清楚苹果是否有意降低开发人员沙盒的性能,以模仿生产中可能出现的问题,或者苹果是否将开发人员沙盒用作自己的沙盒,并意外频繁地破坏它。不管怎样,请记住,即使您的代码按预期工作,开发人员沙盒有时也会出错。当这种情况发生时,这是一个寻找处理意外错误的方法的好机会。
也就是说,永远不要假设某个问题在您投入生产时会神奇地自行修复。本指南中记录了一些已知的沙盒怪癖,但在发布应用程序之前,您应该仍然能够在沙盒中完整地测试购买行为。
开发人员沙盒中的订阅持续时间
出于测试目的,订阅长度已显著缩短。这使开发人员能够快速测试多个续订和过期。
(3天的持续时间在任何地方都没有记录,但可以通过查看沙盒交易找到。)
每个帐户将自动续订6次。实际的续约次数是随机的。最多更新6次后,订阅将自动停止续订。无论应用程序是否打开,这些更新都会自动进行,就像应用程序商店中的续订一样。与应用商店不同,没有退订或退款的选项,因此无法直接测试这些场景。也没有办法测试订阅管理。
每次自动续订都会添加到付款队列中。下一次打开应用程序时,将处理该事务(或多个事务,具体取决于经过的时间)。请确保关闭应用程序并重新打开它以查看更新的回执。如果要刷新收据服务器端,这些附加事务应该在收据中可见。
测试过程
这几个关键步骤,我觉得还是不翻译更好,更能体现原文的意思,直接粘过来了,其实也很好懂。
1.Testing renewals and expiration: 订阅加过期测试
- Subscribe to a monthly subscription.
- Close the app and set a 20-minute timer.
- After 20 minutes, launch the app again to make sure your app is still in the subscribed state.
- Close the app and set another 20-minute timer.
- After 20 more minutes (approx. 40 minutes since originally purchasing the subscription), launch the app again. It should now revert to the unsubscribed state and allow the user to resubscribe.
2.Test restoring purchases after expiration: 过期后恢复
- Subscribe to a monthly subscription.
- Close the app and wait 35-40 minutes.
- Launch the app (it should revert to the un-subscribed state).
- Tap the “Restore Purchases” button.
- No active subscription should be found, and the user should be shown a message to that effect.
Test restoring purchases during active subscription: 订阅期内恢复
One big caveat in the sandbox environment is that there is no receipt file on the device until a purchase is made. This differs from the production sandbox and production environments, where a receipt file is generated at the time of installation. To fully test restores in the sandbox, you need to add a button, gesture, or other means to revert the app to the unsubscribed state.
- Subscribe to a monthly subscription.
- Use a button/gesture to revert the app to the unsubscribed state.
- Tap the “Restore Purchases” button.
- If done before the 35-minute subscription cycle, an active subscription should be found, and the app should change to the subscribed state.
Test restoring purchases across devices: 跨设备恢复
- Subscribe to a monthly subscription on device A.
- Install the app on a device B before the subscription expires.
- On device B, log into the same sandbox account that was used on device A.
- Launch the app on device B.
- Tap the “Restore Purchases” button.
Test upgrades, downgrades, and crossgrades: 升级,降级或跨级订阅
Because the sandbox environment doesn’t have a subscription management UI like the production App Store, you’ll need to expose buttons or other means within the app to test purchases that trigger upgrades, downgrades, and cross grades.
Important Takeaways 关键点
- Subscriptions renew at an accelerated rate in sandbox 沙盒的订阅时间是被缩短的
- Subscriptions are automatically canceled and cannot be managed by the user 用户不能管理订阅,只能自动过期
- There’s no receipt available in sandbox until a purchase is made 知道购买完成,沙盒不会有可用的收据
- Upgrades/crossgrades don’t work in sandbox 沙盒无法测试升级或跨级订阅
References
TestFlight Testing
通过TestFlight分发的应用程序将自动使用生产沙盒环境进行购买。用户不会在testflight构建中收费,但他们可以查看付费过程并逐步完成购买过程,而无需实际花钱。
不幸的是,生产沙盒的购买过程并没有模仿appstore的购买流程,这让beta测试人员感到困惑。(苹果短暂地启用了类似应用商店的支付流程,但很快又恢复了。希望有一天它会回来!)
生产沙盒中的订阅持续时间
出于测试目的,订阅长度已显著缩短。这使开发人员能够快速测试多个续订和过期。查看以上部分的详细信息和注意事项。
测试提示
为了使测试更简单,可以在应用程序的TestFlight构建中添加一个按钮或秘密手势,以在不同的购买状态之间切换应用程序(确保在应用程序商店构建中设置一个删除此项的构建标志!)。当招募beta测试人员来帮助测试付费墙时,别忘了在TestFlight发布说明中提到这一点。
请记住,虽然TestFlight使用生产沙箱环境,但提交给TestFlight的构建应该与发布到appstore的构建相同。如果您有一个带有登台和生产环境的后端,这意味着TestFlight在您的生产后端上运行,但是购买将转到生产沙箱环境。典型的设置是:
Testing Procedures
The testing procedure in TestFlight should be the same as in sandbox.
References
- Apple: Testing Apps with TestFlight
- Apple: Test In-App Purchases
- Apple: Beta Testing Made Simple with TestFlight
生产环境测试(发布以后)
这个主要是利用审核通过后,没有对外发布时,通过促销代码进行付费方式的测试。其实也可以选取一小份地区进行发布来测试。
对于一个尚未在appstore上发布的应用程序,获得app的早期版本是测试订阅的一个很好的方法。
发布前测试准备
向app Review提交应用程序的测试版。请确保将“版本发布”设置为“手动发布此版本”,以便应用程序不会在应用程序商店中发布。
为应用程序生成促销代码。这可以为已批准但尚未在应用商店上线的免费应用程序完成。
使用促销代码从应用商店下载应用程序。
订阅
由于此应用程序已经通过审批,订阅将完全按照应用程序在app Store上直播时的表现进行,包括向订阅的测试人员收费,并允许测试人员管理其在app Store应用程序上的订阅。
你可以给测试人员促销代码,让他们免费测试应用程序。通过促销代码支付的订阅与付费订阅的工作方式完全相同,只是它们不自动续订。
这里需要注意的另一件事是,在appstore上线之前,通过promo代码下载的应用程序在下载包中似乎没有合适的收据文件。收据应该在购买时刷新,但是这个问题可以用来测试一种罕见的情况,即应用程序的实际用户最终会处于一种状态,即应用程序捆绑包中没有包含准确的收据。
新产品发布时间
需要注意的一点是,应用程序和应用内购买(产品)可能不会同时传播到应用程序商店。这似乎只会影响新产品,而不是之前随应用发布的产品。新的应用程序、应用程序更新或新产品在应用程序商店中可用可能需要超过24小时,并且应用程序/更新可能在购买产品前几个小时出现。这意味着您可以下载该应用程序的生产版本,但该应用程序将无法购买任何产品。耐心等待,并在应用程序和产品获得批准后24小时以上再试一次。
测试续期和到期日
测试续订和过期在生产中很困难,因为订阅没有缩短。一个月的更新换代,要等一个月才能生产。要测试年度订阅的到期时间,您必须等待一年。这是不切实际的,这就是为什么苹果缩短了沙盒测试环境中的订阅持续时间。如果续订和过期在这些环境中正常工作,那么它们在appstore上应该可以正常工作。
测试取消和退款
在生产环境中测试是不可能的,因为在沙箱中测试是不可能的。
测试取消:
每月订阅一次。
确保应用程序进入已订阅状态,功能已解锁。
转到App Store应用程序并取消订阅。
等待一两分钟,给苹果时间将取消添加到付款队列中。
重新打开应用程序。
此时,应在收据上禁用自动续订。应用程序应保持订阅状态,然后在当前计费周期结束后恢复为未订阅状态。
测试退款:
每月订阅一次。
确保应用程序进入已订阅状态,功能已解锁。
联系苹果并要求退款。
等待一天,让苹果有时间处理退款并将其添加到付款队列中。
重新打开应用程序。
此时,应该从支付队列中读取退款事件,应用程序应恢复为未订阅状态。
测试“恢复购买”按钮:
理想情况下,你的应用程序将自动确定订阅状态并解锁或锁定应用程序。但是,即使这一切如期而至,收据有时也需要刷新。
订阅应用程序。
删除应用程序,重新启动设备,然后重新安装应用程序。
启动应用程序。
如有必要,点击“恢复购买”按钮。
应找到活动订阅,应用程序应更改为已订阅状态。
测试免费试用和其他介绍性服务
由于免费试用是一种介绍性服务,大多数订阅应用程序开发人员即使没有意识到这一点也会使用它。
这里最重要的是确保你的应用程序只向符合条件的用户提供介绍性服务。
需要注意的一点是,一旦某个帐户兑换了介绍性优惠,该帐户就不再有资格获得同一订阅组内任何产品的介绍性优惠。因此,如果你测试一个免费试用版,这个服务将不再对该帐户可用(除了创建一个新的沙盒帐户外,似乎没有其他方法可以重置它)。
理想情况下,你的应用程序应该检查介绍性优惠资格,并在用户不符合条件时隐藏“免费试用”和其他与优惠相关的消息。然而,把这一点弄错是经常被拒绝的原因,所以要错误地让每个人都有资格,而不是让每个人都不合格。
References
Testing Subscription Offers
iOS Subscription Offers can only be redeemed in sandbox after a subscription has expired. This is related to the fact that product changes don’t work in sandbox. In production, an active or lapsed subscriber will be able to redeem an iOS Subscription Offer.
References
- Apple: Implementing Subscription Offers in Your App
- Apple: Setting Up Subscription Offers
- WWDC Video: Subscription Offers Best Practices
- RevenueCat: Signing iOS Subscription Offers with RevenueCat
QA Checklist
Developer Sandbox Testing
- Test subscription purchase
- Test subscription renewal and expiration
- Test restoring purchases after subscription expiration
- Test restoring purchases during an active subscription
- Test restoring purchases across devices
Production Sandbox Testing
- Test subscription purchase
- Test subscription renewal and expiration
- Test restoring purchases after subscription expiration
- Test restoring purchases during an active subscription
- Test restoring purchases across devices
Production Testing
- Pre-launch purchase test
- Launch day purchase test
- Cancelation test
- Refund test
- Restore purchase test
其它建议提示
对订阅使用促销代码
您可以在App Store Connect中为订阅生成促销代码,但在决定使用它们之前,有几个注意事项需要注意。
通过促销代码授予的订阅将不会自动续订。因此,如果你给某人一个免费月的促销代码,他们该月就可以免费获得,然后订阅结束,他们必须使用正常的应用内流程购买订阅。
如果你给一个现有用户一个月的免费促销代码,使用它将取消他们现有的订阅,并给他们一个不自动续订的免费月。
如果你的应用程序是付费应用程序,你必须先生成一个单独的促销代码来下载该应用程序。
翻译自:
https://www.revenuecat.com/blog/the-ultimate-guide-to-subscription-testing-on-ios
本文来自博客园,作者:{Julius},转载请注明原文链接:https://www.cnblogs.com/bestechshare/p/16447630.html
可微信加我,了解更多,WeChat:{KingisOK}