苹果内购IAP防掉单处理

由于用户网络状况、苹果服务器稳定状况、以及其余不肯定因素,内购不可避免的老是出现掉单状况,这是很是影响用户体验的,因此防掉单机制是很是有必要的。数据库

内购的基本流程

1.客户端下单,下单成功后获取的订单号服务器

2.获取到订单号后,开始内购markdown

  • 监听购买流程
  • 根据productID获取到具体product对象
  • 构建购买对象SKMutablePayment(SKMutablePayment区别与SKPayment能够设置applicationUsername,经过该字段存储订单号,用来处理掉单时候关联订单业务)
  • 开始购买
  • 处理购买的回调结果,而后结束购买事务[[SKPaymentQueue defaultQueue] finishTransaction: transaction]

3.若是购买成功能够拿到一个购买凭证网络

4.将购买凭证发送给服务器,服务器跟苹果服务器通讯以验证凭证的有效性app

5.服务器将验证结果返回给客户端,客户端根据验证结果处理业务spa

以上为内购基本流程代理

掉单的场景

1.用户付款中或者付款后,客户端由于某种缘由进程结束code

2.APP客户端和本身服务器通讯失败orm

3.本身的服务器和苹果的服务器通讯失败server

客户端工做

客户端须要在APP启动时候,添加[[SKPaymentQueue defaultQueue] addTransactionObserver:manager]监听操做,当还有未完成购买事务(未完成是购买事务并不会由于客户端的卸载重装丢失),将会启动- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions代理方法,咱们遍历处理transactions

服务器工做

服务器在和苹果服务器通讯中,若是失败应该设置重启验证的措施。同时服务器应该在验证购买凭证以前,先经过订单号,判断该订单是否已经生效,若是没有生效再执行验证操做,验证经过后写入数据库使订单生效,防止一个订单被重复的验证生效。

三方验证

作好以上措施,能够很大程度下降掉单的发生率,可是彻底避免仍是没法作到,因此咱们有时候仍是须要经过运营帮忙,拿到用户的购买凭证信息、苹果开发者平台中该APP的内购收入信息,以及咱们本身服务器的订单信息,三方核对。

若是有认识不全面或者错误的地方,欢迎你们评论指出

代码后续会给出...

相关文章
相关标签/搜索