iOS 内购漏单问题化解参考方案

题材:iOS内请漏单的题目

事由:

近期,有用户反映,大概意思是这么:苹果扣款成功了,但是尚未发放应得的内购产品,这钱消费啊去了?

及时是一个严重的漏单问题,已经获取了当时化解,现写首文章总结一下。

原理概念:

IAP:是凭In-App
Purchase,顾名思义,一种植使内之开销(内购)。但IAP不是特指苹果的内购支付方式,应用也得产生其和好的内购支付方式。

这里吧一下Apple的IAP。下图是苹果内购的开发流程图。

付出流程解释

1.客户端向Appstore请求市产品,Appstore验证产品成功后,从客户端的Apple账户中扣费。

2.Appstore向客户端返回一段落receipt-data(票据),里面著录了此次市的证书与签约信。

3.客户端向我们得以信任的服务器(后台)提供receipt-data

4.服务器对receipt-data进行同样不良base64编码

5.管编码后的receipt-data发于itunes.appstore进行认证

6.itunes.appstore返回验证结果受服务器

7.服务器对货购进状态及商品种类,向客户端发放相应的道具与推送数据更新通知

问题:

以上七独步骤实际上是一个特别安全的开支流程了。那问题会发在哪呢?

起的简单栽证方式:

IAP built-in
美学原理Model(本地验证)
:此种植方式过过来3-7步,在第2步着拿到票直接为itunes.appstore请求验证票据,根据票据的结果来修改数据。有部分单机游戏因为无关乎后台服务器会下此种植艺术,但由此单来之莫安全与否要命明白,比如有些越狱的无绳电话机会非常爱对斯进行局部数目操作。这里小勿开讨论。

IAP Server
Model(服务器验证)
:如果拿数据在服务器做校验(如实走完1-7的流水线),就甭操心客户端出现假冒票据等题材。但是这样还见面起问题。

想象一下,如果博票据说明苹果曾扣款成功,就在这向服务器发送票据验证的上起来大,这个上可能网络突然断了,未拿票发送的服务器验证,导致明明曾经看了放缓,却没有收取相应的内购产品,出现了漏单问题。

就此怎么化解之题材?解决流程如下

相同:得到票据,立即保存本地,并朝服务器验证

仲:验证成功,删除本地保存数据。若不成,再次说明重试。

其三:APP重开时,如发生当地票据则和服务器进行认证,若证明成功则去票据。

季:若以上流程还不能解决漏单问题,则可于APP增加类似找回按钮,依据当地保存票据进行检索回(流程三)。

流淌:服务器需要建表单记录票据数据,避免频繁增内购产品。