iOS那点事儿

苹果内购(IAP)填坑记

2019-03-14  本文已影响20人  SPKane

前言

目前有很多关于iOS内购帖子及开源项目,但是没有一个相对合适自己项目的,所以就多研究下.主要还是因为苹果的IAP太坑了,所以笔者自己基于目前网上的部分代码以及平时项目的BUG反馈封装了一套内购方案和大家分享探讨.

内购的坑

其实苹果的IAP还是做了很多操作了,但是现实用起来发现还是有很多坑爹的地方,防不胜防.由于自己项目须在IAP进行前就需要获取一个自己服务器的订单才能进行IAP购买验证,所以会出现以下几个问题:

  1. 用户购买,IAP无回调响应,用户退出程序导致定单异常.
  1. 用户完成苹果购买,自己的服务器网络发生错误,无法及时到账.

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction
回调未结束的订单,即使重新安装程序也会有回调.

  1. SKPaymentTransaction.applicationUsername丢失,程序崩溃.
  1. 用户卸载程序导致本地订单号丢失.
  1. 获取本地苹果票据为空.

由于内购的地方很多,为此封装了一套JKIAPHelp用于快速接入.

JKIAPHelp基本逻辑:

  1. 用户注册后,开始购买商品,把自己服务器上的订单号传给JKIAPHelp.
  2. JKIAPHelp在系统支付回调

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction

SKPaymentTransactionStatePurchasing时将订单相关信息(订单号以及物品价格)加入到钥匙串中保证订单信息的完整性与可靠性.

  1. 在SKPaymentTransactionStatePurchased的时候来验证订单.验证是通过开发者实现JKIAPHelp代理

-(void)verifyWithModel:(JKIAPTransactionModel *)model resultAction:(VerifyRsultBlock)resultAction

来向开发者自己的服务器完成订单的验证.(开发者通过调用resultAction回调服务器验证状态).

上一篇下一篇

猜你喜欢

热点阅读