【WWDC20】 10659 - 介绍 Xcode 中 StoreKit 测试

2,598 阅读8分钟

作者:ChengzhiHuang,iOS 开发者,目前就职于字节长视频团队,曾就职于阅文集团新产品技术中心。GitHub

Session: https://developer.apple.com/videos/play/wwdc2020/10659/

本文并非是教读者如何创建 IAP 档位,如何调用 StoreKit 相关 API,应付苹果审核,而是着重于介绍苹果在这次的 WWDC2020 中对于以往 IAP 相关开发与测试中的痛点,做出了哪些改进。食用本文的读者应该拥有一定的 IAP 开发经验。并站在在笔者自己的角度,对这些改进作出基于笔者自身经验的评价,例如对于个人开发者或者是大公司开发者有多大的价值等。

  • Sandbox 环境终于可以享受跟正式环境一样的手动取消自动订阅,不用新建沙盒测试账号就能重新体验首购优惠,退款,升降级等操作了。
    • 开发者福音,苹果爸爸还是爱我们的,这个真的是极大节约了开发自动续费时的开发以及测试成本。
  • 苹果做了一个 StoreKitTest 的库,方便自动化测试。
    • 象征意义大于现实意义,在本人的工作经历下,深感自动化测试在目前国内的推进还是十分困难的。测试开发基本都是应用于接口测试。
  • 现在在本地测试的时候,可以本地自建一个沙盒购买环境(StoreKit configuration)
    • 对于个人独立开发者来说,有客户端校验订单的小型 APP,能节省相当一部分的成本;
    • 对大型 App 开发者来说,需要一定的适配成本,大公司的订单都是放在服务器校验的,且都是专职人员负责维护一个 SDK,需要外部团队配套的改动(服务器的验证)还是有一定工作量的。

本地沙盒购买环境(StoreKit Configuration File)

回顾之前的 IAP 开发体验

  1. 登陆 AppStore Connect,新建 APP
  2. 创建对应的 IAP 档位,看苹果服务器心情,大致在 2 小时之后就能在沙盒环境中访问到对应 ProductId 的商品
  3. 创建沙盒账号
  4. 如果苹果沙盒服务器给面子,一切顺利的话,可以开始测试。笔者是经常遇到沙盒环境的登陆不上去,以及根本连不上沙盒环境,希望苹果的沙盒可以更稳定一点 ...
  5. 带 APP 版本 提审 IAP 档位,期待苹果审核爸爸不要给 2.1 大礼包 或者 3.1.2 相关拒审,并且在 包过审并且档位过审 后放出版本。笔者在两家公司都遇到过 App 过审但是内购 IAP 没有过的情况:)

现在的改进

可以本地创建一个 StoreKit Configuration File, 这样可以在本地直接控制沙盒环境,新建商品,包括首开优惠,自动续费控制下次扣款,取消订阅,控制家长监控购买(Ask to Buy)等等,功能还是十分完善的,可以说是 AppStore Connect 有的,StoreKit Configuration File 基本都能满足你。(除了没有非续期订阅这种类型)

操作步骤

1. 创建模版文件,完成之后选中新创建的空文件

创建模版文件
选中空文件

2. 创建对应类型的商品,点击左下角的 + 号就能出现三个选项。

创建对应类型的商品 这里的三种 IAP 类型在下面贴上新版 AppStore Connect 的介绍,应该足够对应了。当前缺少非续期订阅的类型,苹果没有说为什么只缺了这一种,可能觉得没啥必要吧 ...
关于四种 IAP 商品的介绍

3. 消耗型项目的创建
  • ProductId 由于目前 AppStore Connect 的特性,每创建一个都是唯一的,哪怕你删掉了,都是不能再用的,所以就算创建错了,也不要删掉。不过本地的 StoreKit Configuration File 并没有这个限制。并且推荐使用语义化的创建方式,建议不要用纯数字或者随机生成的 ID,不然可读性不是很好。
  • 目前苹果似乎还没出各个国家不同的定价,输入的 Price 单位都是美刀(不过这个在开发的时候确实不重要),只要确保最后在 AppStore Connect 上创建的都是对的就行了。创建错了也没事,可以改,提审前建议多人交叉检查一遍,因为如果审核通过之后的改价很麻烦 ... 麻烦到我推荐你直接新创建一个再审一次 ... 消耗型项目的创建 在非消耗型项目的选项里还有一个 Family Sharing 的选项,一笔带过了。
4. 自动续期订阅型项目的创建
  • 需要创建一个 GroupId,这个跟在 AppStore Connect 上是一致的,因为同一个 Group 内的商品是可以升降级的。关于升降级 等操作就不在这里展开了。简单来说就是有三个等级,1-2-3,是下图的 1,可以通过拖动右侧的 2 按钮来调整,我的截图是全都是 1,这样处理起来逻辑简单一点:) Appstore Connect 上的升降级操作页面 本地的操作
  • 首开优惠 (Introductory Offer) 的类型很全,AppStore Connect 有什么,它就有什么,感受到了苹果爸爸的温暖。图中我是选了一个免费试用 7 天的首开优惠,这个优惠比较常见。
  • 促销优惠(Promotional Offers)的功能也很完善,虽然我没有用过。 自动续期订阅型项目的创建
5. 应用 StoreKit 文件

在 Edit Scheme 中切换到 Options Tab,再在 StoreKit Configuration 中选中你创建的 StoreKit 文件即可。 应用 StoreKit 文件 已选中

6. 本地管理订单状态

可以删除历史订单,删除首开优惠,可以退款等操作。还是十分方便的。
本地管理订单状态

  • 退款操作,在选中了某一笔订单之后,直接点击退款按钮即可实现。注意这里苹果给了一个新的 API 去响应。 退款 Refund
  • Ask to Buy,在选中 .storekit 文件之后,Editor 中就会出现选项,开启即可。然后购买之后就会展示 Ask to Buy 弹窗,订单状态是 Pending to Approval,可以在 Xcode 中进行操作,允许或者不允许。 开启 Ask to Buy Ask To Buy 弹窗 下图的 2 是 approve 按钮,3 是 deny 按钮。 Approve or deny
  • Other 功能,包括缩短时间(Time Rate,自动续费很舒服),允许被中断的购买(Enable Interruted Purchases)等,都可以满足特定的自测需求。 Editor 中提供的其他功能分

本地的订单校验

这里需要注意的是,订单的校验方式会有所不同。虽然走的是苹果的非对称加密,但是是另一张证书,所以验证订单的时候需要使用 PKCS7_NOCHAIN 这个参数去标明。如果不在本地验证,则需要 对应的服务器逻辑也进行响应更改PKCS7_NOCHAIN 同时,.cer 文件也是可以导出的。导出方式也在 Editor-Save Public Certificate导出Public Certificate

沙盒环境的改进

沙盒账号终于有管理页面了 你知道这几年没有管理页面我是怎么过来的吗:)
放一张我们之前申请的沙盒账号,都已经创建到 300 了,都是因为要测各种首开优惠: 曾经的沙盒账号

在 iOS14 的设备上,设置 - App Store - 翻到最下面登陆沙盒账号之后,单击沙盒账号,再点击 Manage 就可以进入管理页面啦! 进入 Manage 页面
管理页面提供了多项功能 管理页面

  1. 切换购买项目,可以测试同一个 Group 内的升降级
  2. 重制享受过的首开优惠,可以同一个沙盒账号反复测试首开优惠,而不用新开账号
  3. 取消订阅
    在以前,这些都是做不到的,可以说是极大程度方便了 QA 跟 RD 的验证。

AppStore Connect 上设置沙盒账号的 Interuptted Purchase

在 User & Access 中,Edit 开启选项即可。
Interuptted Purchase

另外一些期待的改进

  • 沙盒的环境希望能够更稳定一点,不要出现等很久结果登陆不上去。这个真的很影响开发体验。
  • 当前还是有一些 Case 只能由 RD 同学在本地进行验证(需要在 Xcode 里进行操作),没有办法使用打包机打出来的包进行试验。希望能开源一些工具包,能够在本地建一个小服务器,指定打出来的包的 IAP 走本地创建的服务器,反正现在 .cer 证书也能导出了,对于苹果来说应该是很简单就能搞定的事情,这样 QA 同学也可以自由验证所有 Case。

相关阅读

限时福利

这篇文章的内容来自于 《WWDC20 内参》。在这里给大家推荐一下这个专栏。

「WWDC 内参」系列是由老司机周报、知识小集合以及 SwiftGG 几个技术组织发起的。已经做了几年了,口碑一直不错。主要是针对每年的 WWDC 的内容,做一次精选,并号召一群一线互联网的 iOS 开发者,结合自己的实际开发经验、苹果文档和视频内容做二次创作。

今年一共有 213 个 Session 的内容。《WWDC20 内参》挑选了其中的 135 个 Session,专栏现已创作了 97 篇文章。目前正在优惠销售,只需要 29.9 元,十分优惠。

看了文章还不过瘾的朋友,抓紧订阅 《WWDC20 内参》 https://xiaozhuanlan.com/wwdc20 继续阅读吧~

关注我们

我们开通了公众号「老司机技术周报」,每期发布时公众号(LSJCoiding)会推送消息,欢迎关注。