原文链接:
AIR Native Extension实现iOS应用内付费(In-App Purchase)全教程(三)——iOS应用内付费简介和准备流程

本文的主要内容如下:

  • IAP简介
  • 商品与交易
  • 测试IAP的准备流程

————————————————————————————
IAP简介

IAP的全称是In-App Purchase,应用内付费。这种业务模式允许用户免费下载试用,对应用内提供的商品选择消费,比如购买游戏道具,购买游戏等级等等。相比完全收费的应用而言,应用内付费给用户试用的机会,不会让优秀的应用因为缺乏用户的认知而丧失消费者;而且对于开发商,也不需要为了让用户试用而单独发布一款免费的精简版本。

————————————————————————————
商品与交易

苹果官方的关于IAP的帮助文档是只对注册开发者开放的,所以我不方便把它转载在这里,但我可以对IAP里的关键因素做一个通俗易懂的介绍。

IAP里有两个关键的词,商品(Product)和交易(Transaction)。
商品可以是一种虚拟的道具,一个隐藏的关卡或者地图,但必须是直观的,可以让用户购买后直接获益的产品。IAP的商品从消费性质上分为四种:

1,消耗型商品,比如游戏道具,子弹,药品等等。由于这类商品可以被消耗,所以支持重复购买。苹果应用商店不保存此类商品的购买记录,如果要保存则需要开发者同步到自己的服务器上。

2,非消耗型商品,比如游戏关卡,隐藏地图等等。这类商品只要购买一次便可以了,苹果应用商店里每一个用户对非消耗型商品的购买都有记录,可以在不同的设备上恢复购买状态,这个恢复的过程叫做Restore。

3,自动重置型订阅,比如电子杂志,读物等。消费者购买这类商品时会从列表中选择一个有效期限,卖家在定义商品的时候从一群固定的选项中选择添加一个有效期,比如7天,一个月,两个月。过了有效期之后,商品的购买状态会被自动重置成未购买,要想继续获得内容则需要再次订阅。这种类型的商品和非消耗型商品一样,会在苹果商店内保存购买记录。

4,非自动重置型订阅,比如用户订阅电子杂志和读物报刊时需要从自定义的期限列表中选择期限,而不是苹果提供的固定选项,比如9天,一个半月或任意时间。在这种情况下,苹果商店无法根据期限来控制订阅的到期行为,所以一切都需要开发商自己编写相应的逻辑来实现。

交易是指用户对一个商品的购买行为,当用户点击购买一件商品时,一个新的付费行为就被添加到付费队列中,付费队列是一条系统线程,即使应用程序终止仍然会继续执行。

————————————————————————————
测试IAP的准备流程

如果你是一个注册的苹果开发者,接受了最新的苹果开发者协议,并且签署了iOS付费应用合同,那么你就可以继续IAP的测试了。

如果此时你对iOS的开发流程不是很熟悉,在阅读下面的内容之前,我强烈建议你先看看我的这几篇文章:
如何成为一个合法的iOS开发者
如何使用iOS开发者授权以及如何申请证书
如何为iTunes Connect准备应用

如果你已经注册成为苹果开发者,并且熟知了如何给设备授权,如何申请证书,如何发布应用,那么请继续阅读我下面的内容:

使用未越狱的设备
测试IAP的项目不能使用越狱的设备,否则会出现无法连接到应用商店的错误。恢复设备到未越狱的系统后,登陆Provisioning Portal添加设备的UID。

使用没有通配符的App ID
在定义App的Bundle ID的时候,我曾经介绍过可以使用类似 com.jamesli.* 这样的值来覆盖多个应用的ID。这种定义方式不能用在打算使用IAP的应用上面,定义IAP的应用必须使用唯一的ID,如com.jamesli.ghostbride。如果正确定义了,应用的In-App Purchase的功能是默认开启的,如下图:

在iTunesConnect创建应用
登陆iTunesConnect,创建一个新的应用,即使该应用尚未开发,也可以用一些假的文字和图片来代替,创建好之后切记要点击Ready to Upload binary将应用的状态变为Waiting for upload。

管理In-App Purchase商品
在应用列表中点击新创建的应用图标,进入应用首页,在右面的一行按钮中选择Manage In-App Purchase,进入内付费商品管理页面。通过点击左上角的Create New按钮可以进入商品页面选择创建一个新的商品。页面中显示的四种商品分别是我在本文介绍过的四种商品,消耗型商品(Consumable),非消耗型商品(Non-Consumable),自动重置型订阅(Auto-Renewable Subscriptions),非自动重置型订阅(Non-Renewing Subscription)。

以消耗型商品为例,点击Select进入创建页面。
Reference Name是商品名字,这不是最终用户会看到的名字,而是会在内付费管理的商品列表中显示的字符,类似于变量名。
Product ID是商品的唯一标识,这个ID十分重要,在编写应用程序的时候会用它来识别改商品。

接下来是为不同的语言定义该商品的显示名称,最终用户看到的就是这个名称。定义好名称后是为商品定价以及上传缩略图,这个商品就算是定义完了。如下图,定义完成的商品会显示在内付费管理的商品列表中。每一个内付费商品的创建和修改都需要提交审核,但这里需要注意的是,在一个新的应用版本内创建的内付费商品,必须和这个应用版本一起提交审核,而在该应用版本通过审核之后再为它创建的内付费商品,可以通过这个列表中的Ready to submit按钮来提交。
product-iap

刚刚创建好的内付费应用,已经可以用来调试了。

使用测试帐号调试应用

苹果应用商店是一个交易环境,任何用户可以在这个环境内购买应用,但如果要测试正在开发过程中的应用内付费,我们不能在真正的苹果商店里进行。苹果给开发者提供了一个用于调试购买行为的测试沙箱,它完全复制了应用商店的交易环境,但在沙箱环境中我们不能用平常的苹果帐号,而是需要用测试帐号。

在iTunesConnect的首页可以点击Manage Users进入用户管理页面,然后选择Test User来创建测试帐号。创建测试帐号可以使用一个不存在的Email地址,但是密码必须是符合规范的。这里创建的帐号可以用来购买开发过程中的应用内付费,但必须记住,测试帐号不能用来登陆真正的应用商店并在产品环境中进行购买行为,否则你的iTunes帐号将有可能被停用。