苹果内购IAP防掉单处理

因为用户网络情况、苹果服务器稳定情况、以及其他不确定因素,内购不可避免的总是出现掉单情况,这是非常影响用户体验的,所以防掉单机制是非常有必要的。

内购的基本流程

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

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

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

3.如果购买成功可以拿到一个购买凭证

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

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

以上为内购基本流程

掉单的场景

1.用户付款中或者付款后,客户端因为某种原因进程结束

2.APP客户端和自己服务器通信失败

3.自己的服务器和苹果的服务器通信失败

客户端工作

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

服务器工作

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

三方验证

做好以上措施,可以很大程度降低掉单的发生率,但是完全避免还是无法做到,所以我们有时候还是需要通过运营帮忙,拿到用户的购买凭证信息、苹果开发者平台中该APP的内购收入信息,以及我们自己服务器的订单信息,三方核对。

如果有认识不全面或者错误的地方,欢迎大家评论指出

代码后续会给出...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值