Introducing StoreKit Testing in Xcode
本文食用指南:本文并非是教读者如何创建 IAP 档位,如何调用 StoreKit 相关 API,应付苹果审核,而是着重于介绍苹果在这次的 WWDC2020 中对于以往 IAP 相关开发与测试中的痛点,做出了哪些改进。食用本文的读者应该拥有一定的 IAP 开发经验。并站在在笔者自己的角度,对这些改进作出基于笔者自身经验的评价,例如对于个人开发者或者是大公司开发者有多大的价值等。
- Sandbox 环境终于可以享受跟正式环境一样的手动取消自动订阅,不用新建沙盒测试账号就能重新体验首购优惠,退款,升降级等操作了。
- 开发者福音,苹果爸爸还是爱我们的,这个真的是极大节约了开发自动续费时的开发以及测试成本。
- 苹果做了一个 StoreKitTest 的库,方便自动化测试。
- 象征意义大于现实意义,在本人的工作经历下,深感自动化测试在目前国内的推进还是十分困难的。测试开发基本都是应用于接口测试。
- 现在在本地测试的时候,可以本地自建一个沙盒购买环境(StoreKit configuration)
- 对于个人独立开发者来说,有客户端校验订单的小型 APP,能节省相当一部分的成本;
- 对大型 App 开发者来说,需要一定的适配成本,大公司的订单都是放在服务器校验的,且都是专职人员负责维护一个 SDK,需要外部团队配套的改动(服务器的验证)还是有一定工作量的。
正文开始
本地沙盒购买环境(StoreKit Configuration File)
回顾之前的 IAP 开发体验
- 登陆 AppStore Connect,新建 APP
- 创建对应的 IAP 档位,看苹果服务器心情,大致在 2 小时之后就能在沙盒环境中访问到对应 ProductId 的商品
- 创建沙盒账号
- 如果苹果沙盒服务器给面子,一切顺利的话,可以开始测试。笔者是经常遇到沙盒环境的登陆不上去,以及根本连不上沙盒环境,希望苹果的沙盒可以更稳定一点 ...
带 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. 自动续期订阅型项目的创建
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
这个参数去标明。如果不在本地验证,则需要 对应的服务器逻辑也进行响应更改
。
Introducing StoreKit Testing in Xcode
本文食用指南:本文并非是教读者如何创建 IAP 档位,如何调用 StoreKit 相关 API,应付苹果审核,而是着重于介绍苹果在这次的 WWDC2020 中对于以往 IAP 相关开发与测试中的痛点,做出了哪些改进。食用本文的读者应该拥有一定的 IAP 开发经验。并站在在笔者自己的角度,对这些改进作出基于笔者自身经验的评价,例如对于个人开发者或者是大公司开发者有多大的价值等。
- Sandbox 环境终于可以享受跟正式环境一样的手动取消自动订阅,不用新建沙盒测试账号就能重新体验首购优惠,退款,升降级等操作了。
- 开发者福音,苹果爸爸还是爱我们的,这个真的是极大节约了开发自动续费时的开发以及测试成本。
- 苹果做了一个 StoreKitTest 的库,方便自动化测试。
- 象征意义大于现实意义,在本人的工作经历下,深感自动化测试在目前国内的推进还是十分困难的。测试开发基本都是应用于接口测试。
- 现在在本地测试的时候,可以本地自建一个沙盒购买环境(StoreKit configuration)
- 对于个人独立开发者来说,有客户端校验订单的小型 APP,能节省相当一部分的成本;
- 对大型 App 开发者来说,需要一定的适配成本,大公司的订单都是放在服务器校验的,且都是专职人员负责维护一个 SDK,需要外部团队配套的改动(服务器的验证)还是有一定工作量的。
正文开始
本地沙盒购买环境(StoreKit Configuration File)
回顾之前的 IAP 开发体验
- 登陆 AppStore Connect,新建 APP
- 创建对应的 IAP 档位,看苹果服务器心情,大致在 2 小时之后就能在沙盒环境中访问到对应 ProductId 的商品
- 创建沙盒账号
- 如果苹果沙盒服务器给面子,一切顺利的话,可以开始测试。笔者是经常遇到沙盒环境的登陆不上去,以及根本连不上沙盒环境,希望苹果的沙盒可以更稳定一点 ...
带 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. 自动续期订阅型项目的创建
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
这个参数去标明。如果不在本地验证,则需要 对应的服务器逻辑也进行响应更改
。
Introducing StoreKit Testing in Xcode
本文食用指南:本文并非是教读者如何创建 IAP 档位,如何调用 StoreKit 相关 API,应付苹果审核,而是着重于介绍苹果在这次的 WWDC2020 中对于以往 IAP 相关开发与测试中的痛点,做出了哪些改进。食用本文的读者应该拥有一定的 IAP 开发经验。并站在在笔者自己的角度,对这些改进作出基于笔者自身经验的评价,例如对于个人开发者或者是大公司开发者有多大的价值等。
- Sandbox 环境终于可以享受跟正式环境一样的手动取消自动订阅,不用新建沙盒测试账号就能重新体验首购优惠,退款,升降级等操作了。
- 开发者福音,苹果爸爸还是爱我们的,这个真的是极大节约了开发自动续费时的开发以及测试成本。
- 苹果做了一个 StoreKitTest 的库,方便自动化测试。
- 象征意义大于现实意义,在本人的工作经历下,深感自动化测试在目前国内的推进还是十分困难的。测试开发基本都是应用于接口测试。
- 现在在本地测试的时候,可以本地自建一个沙盒购买环境(StoreKit configuration)
- 对于个人独立开发者来说,有客户端校验订单的小型 APP,能节省相当一部分的成本;
- 对大型 App 开发者来说,需要一定的适配成本,大公司的订单都是放在服务器校验的,且都是专职人员负责维护一个 SDK,需要外部团队配套的改动(服务器的验证)还是有一定工作量的。
正文开始
本地沙盒购买环境(StoreKit Configuration File)
回顾之前的 IAP 开发体验
- 登陆 AppStore Connect,新建 APP
- 创建对应的 IAP 档位,看苹果服务器心情,大致在 2 小时之后就能在沙盒环境中访问到对应 ProductId 的商品
- 创建沙盒账号
- 如果苹果沙盒服务器给面子,一切顺利的话,可以开始测试。笔者是经常遇到沙盒环境的登陆不上去,以及根本连不上沙盒环境,希望苹果的沙盒可以更稳定一点 ...
带 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. 自动续期订阅型项目的创建
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
这个参数去标明。如果不在本地验证,则需要 对应的服务器逻辑也进行响应更改
。