关于iap苹果内购掉单情况处理

iap的流程基本上大家都熟悉了,不过仍然对流程环节中2个可能出现的问题进行讨论。

以服务端验证为例。

情况1:

客户端提交receipt给服务端验证时候,服务端到苹果验证超时或其他情况导致不能给玩家发货。

解决方案:

将receipt同订单号对应存入数据库,然后定时轮询处理未验证的订单

情况2:

用户在支付回调有延时或者没有成功回调的时候,或者客户端拿到receipt的时候,提交服务端的过程中出现网络异常。

解决方案:

对于没有finished的交易,苹果的不会从队列中删除,在下次启动的时候,会仍然在队列中,这个时候可以拿到receipt再进行提交,

不过这个时候会有另外一个问题,这个receipt里面是没有任何和订单关联的信息,即使提交给服务端,服务端也不知道如何处理。怎么解决呢?

在ios7 苹果增加了一个属性applicationusername,所以我们可以SKMutablepayment里指定订单的数据(比如订单号),当我们再拿到trans的时候我们可以再取出,就可以达到对应的目的。

不过对于ios6的我暂时没看到有好的解决方法,估计基本上只能按照掉单处理了。但是苹果的掉单处理貌似也没有什么好方法。基本就是靠用户购买截图进行模糊判断了。

 

IAB startSetup NullPointerException