苹果内购(IAP)调研报告

一.适用情况:

什么时候使用苹果内购?为什么时候苹果内购?

在苹果制定的游戏规则中,所有在App内提供的服务需要付费时,都应当使用IAP,比如解锁软件功能、游戏道具;所有在App外提供的服务需要付费时,都应使用其他支付方式,比如比如淘宝、京东等一堆电商,他们的商品都是不存在于App中的。

列举一些相关实例,

1.在IAP里,可以出售:

数字内容:比如杂志、图片、游戏关卡解锁、相机付费滤镜等;

软件功能:如各种扩展features;

一次性服务:比如一次语音通话等。

2.在IAP里,不能出售:

现实世界的商品或服务

3.现在有很多比如网易云课堂,腾讯课堂等等在线教育App,可以在App中购买视频并在APP中观看,也就是说’观看视频’这个功能是本身就存在于APP中的,只是需要你先购买视频,才能使用’观看视频’这个功能,这个时候,这种解锁APP已有功能的操作,就必须要使用iap

当然,肯定有APP不是这样,毕竟谁也不愿意让苹果抽那么多钱,那些APP也许是用了一些什么欺骗手段,比如后台写个开关,审核的时候打开,所有功能都能使用,上线后再关闭开关啊什么的。这样的APP有可能随时会被警告并下架,严重点的封号也不是没可能 o(╯□╰)o

第三点就提到了为什么使用苹果内购? 极大降低了应用审核被拒的风险以及被迫下架的可能性,还可以大力推广应用的付费功能.

二.关于商品类型:iap创建商品时选择的商品类型大概分三类

1.消耗型商品:

就是类似游戏中的钻石,还有现在某些APP中的货币,比如什么鱼丸,鱼翅什么的,会被消耗的,要选择消耗型商品

2.非消耗型商品:

无法被消耗的商品,比如上文提到的视频课程,一次购买,就应该永久可以观看,视频你怎么消耗?打赏多少多少视频?o(╯□╰)o

3.订阅类型商品:

多用于会员,需要注意的一个地方就是苹果似乎没有保存期限,所以这个期限要后台保存的.另外需要注意的一个地方是当APP中有过订阅类型商品,注意是有过,曾经有过删除也算的,这个APP是无法转移账号的.

三.在itunes connect 里面签署相关协议

将上图标注的关于联系人信息,税务,银行信息填写完成就ok.

四.添加内购项目

五.应用内代码实现 && 沙盒测试

可以参考此博客,博客中介绍的比较详尽.

六.内购的两种模式—内置模式 && 服务器模式(相对可靠,安全,首选)

使用内置模式。 需要交付的产品已经在程序内部。 这种方式通常用在一些被锁定的功能上。 也可以用来交付在程序束(App Bundle)中的内容。 该方式的一个重要的优点是你可以及时的给客户交付产品,大多数的内置产品应为非消耗性商品。

使用服务器模式,要提供另外的服务器将产品发送给程序。 服务器交付适用于订阅、内容类商品和服务,因为商品可以作为数据发送,而不需改动程序束。 例如,一个游戏提供的新的内容(关卡等)。 Store Kit不会对服务器端的设计和交互做出定义,这方面工作需要你来完成。 而且,Store Kit不提供验证用户身份的机制,你需要来设计。 如果你的程序需要以上功能,例如,纪录特定用户的订阅计划, 你需要自己来设计和实现。

1.内置模式的流程:

app从app store 获取产品信息

用户选择需要购买的产品

app发送支付请求到AppStore

AppStore处理支付请求,返回transaction信息

app将购买的内容展示给用户

2.服务器模式的流程:

app从服务器获取产品标识列表

app从app store 获取产品信息

用户选择需要购买的产品

app 发送支付请求到AppStore

AppStore处理支付请求,返回transaction信息

app将 transaction receipt 发送到服务器

服务器收到收据后发送到app stroe验证收据的有效性

app store 返回收据的验证结果

根据app store 返回的结果决定用户是否购买成功

上述两种模式的不同之处主要在于:交易的收据验证,内建模式没有专门去验证交易收据,而服务器模式会使用独立的服务器去验证交易收据。内建模式简单快捷,但容易被破解。服务器模式流程相对复杂,但相对安全

开发之初,苹果官方就很负责的告知:我们的服务器不稳定。真正开发之后,发现苹果方果然是很负责的,不仅是不稳定,而且足够慢。app store server验证一个收据需要3-6s时间

用户能否忍受3-6s的等待时间

如果app store server 宕机,如何确保成功付费的用户能够得到正常服务。

对于第一个问题,我们有理由相信用户完全无法忍受,所以采用异步验证的方式,服务器收到客户端的请求后,就将请求放到MCQ中去处理。

对于第二个问题,由于苹果人员很负责人的告知:我们的服务器不稳定,所以不排除收据验证超时的情况。对于验证超时的收据,保存到数据库中并标记为验证超时,定时任务每隔一定的时间去app store验证,确保能够获取收据的验证结果。此处摘自博客