当应用完成测试后,就可以提交应用以供审核。 该章节重点介绍一些提示来帮助开发者通过审核过程。
一、递交产品供审核
当第一次提交审核程序时,同时需要提交内购产品以供审核。 第一次递交通过审核后,后续更新应用程序和内购产品时则可以分别提交。 更多信息,请看 In-App Purchase Configuration Guide for iTunes Connect.
二、在测试环境中的收据
当应用程序在开发,审核以及产品过程中,在不同的环境中运行。如下图
在开发过程中,应用程序的版本是开发签名的版本,它连接到应用开发服务器以及应用程序中的测试环境。 在产品过程中,用户运行产品签名版本的应用程序,它连接到应用产品服务器以及产品应用商店。 然而,在应用程序审核过程中,应用程序运行在混合的产品/测试环境中:它是产品签名并且连接到应用产品服务器,但是它连接到应用商店的测试环境中。
当验证在服务器中收据时,服务器需要能够处理产品签名的应用程序,它从苹果的测试环境中获取它的收据。 推荐方法是总是首先为应用产品服务器激活收据而不是为产品应用商店。 如果激活出现 “Sandbox receipt used in production" 错误,则验证测试环境。
三、实现核对清单
在递交审核应用之前,验证已经实现了所有需要的行为。 确保应用已经实现了以下内核内购行为(以典型的开发过程顺序列出):
- 在 iTunes Connect里创建并配置产品。
- 在过程中更改产品,但是在测试任何代码前,至少需要已经配置好的产品
- 从应用 Bubdle 或服务器上获取产品 ID (product identifiers). 用 SKProductsRequest 对象把列表发送给应用商店。
- 使用应用商店返回的 SKProduct 对象,为应用商店实现用户界面。开发过程中使用简单的界面,比如表格视图或一些按钮。在开发过程中运行顺利后可以实现最终的用户界面。
- 使用 SKPaymentQueue的addPayment: 方法来添加一个 SKPayment 对象到交易队列,用来请求支付。
- 使用 paymentQueue:updateTransactions: 方法来实现交易队列观察者 (transaction queue observer)。
- 在开发过程中有任何需要时, 在 SKPaymentTransactionObserver 协议里实现其它方法。
- 为了以后能够启动,做永久交易记录,传递已被购买的产品,下载全部相关内容,并在最后调用 SKPaymentQueue 的 finishTransaction:方法。在开发过程中,只实现该代码的简易版本--比如,只是简单的在屏幕上显示“Product Delivered” 字样---然后在开发过程中有任何需要时实现真实版本。
如果应用程序出售非消耗产品,自动更新订阅,或者非自动更新订阅,验证你已经实现了以下恢复逻辑:
- 提供 UI 来开启恢复过程。
- 通过使用 SKReceiptRefreshRequest 类来刷新应用收据或者使用 SKPaymentQueue 类的 restoreCompletedTransactions 方法来恢复完整交易,来获取过去购买的信息。
- 允许用户重新下载内容。如果使用苹果托管内容,恢复完整交易并使用交易的downloads特性得到SKDownload类的对象。
- 如果应用服务器是托管内容,正确访问应用服务器。
如果应用程序出售自动或非自动订阅,验证已经实现以下订阅逻辑:
- 通过传递最新发布的内容片断来处理崭新的购买订阅---比如,一本杂志最新的问题。
- 当新内容发布时,用户是可以使用的。
- 当订阅到期后,允许用户重新更新它。
如果应用程序出售自动订阅,允许应用商店处理该过程,不要尝试自己来处理如下内容。如果应用程序出售非自动订阅,应用程序负责处理如下过程。
- 当订阅到期后,停止用户使用新内容。更新应用界面,这样用户就可以选择再次购买该订阅并重新激活它的内容。
- 实现系统来跟踪最新发布的内容。 当恢复购买时,使用该系统,让用户可以根据订阅激活的时间来访问他们已经支付的内容。