由于用户网络状况、苹果服务器稳定状况、以及其余不肯定因素,内购不可避免的老是出现掉单状况,这是很是影响用户体验的,因此防掉单机制是很是有必要的。数据库
1.客户端下单,下单成功后获取的订单号服务器
2.获取到订单号后,开始内购markdown
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的内购收入信息,以及咱们本身服务器的订单信息,三方核对。
若是有认识不全面或者错误的地方,欢迎你们评论指出