iOS-内购
前言:
关于iOS内购,参考两篇博文
iOS-iOS内购流程(手把手图文教程)
iOS内购你看我就够了(埋坑篇)
PS : 接下来,你可以下载demo将bundleID改为你自己的app,可以测试你的app内购商品购买,前提是:你需要APP开发者账号,
我自己写了一个小的demo.
GitHub : IAPKit
![](https://i-blog.csdnimg.cn/blog_migrate/6960664f7d9efa7811bafa1d86fd2e86.webp?x-image-process=image/format,png)
内购过程.png
逻辑:
1.查询到内购商品后,同时都会向服务器请求订单.
2.每次请求查询内购商品的时候,同时都会请求服务器生成一笔新的订单.
3.每次处理新的订单的时候,选择处理:购买与取消购买.
4.如果向苹果付款了,会收到一个交易凭证和交易事务.将这两个内容传会给服务验证器.
5.服务器根据当前的交易凭证,来判断该订单是否完成交易.根据判断发送对应的信息给客户端.
内购最核心的方法,需要处理的方法就是监听交易事务的状态的改变.
![](https://i-blog.csdnimg.cn/blog_migrate/2d32445e13a84a911b824cf42c7f54e7.webp?x-image-process=image/format,png)
监听方法.png
整个内购的逻辑其实很简单理解,这要主要就是注意细节:
第一步:请求商品(消费型,非消费型)
第二步:返回请求结果
第三步:将获取的商品信息发送给服务器
第四步:返回一个订单
第五步:发起购买
第六步:购买成功后返回购买凭证
第七步:将购买凭证发送给服务器验证
第八步:告诉客户端发货
这里比较关键的是第六步:
要将购买凭证发送至服务器,给服务器验证.这里就要考虑客户端出现的情况.
我自己思考了一种情况就是:
1.恰好在这个时候,用户已经支付钱给appStore了,
2.但是发送给服务器验证的时候卡主了,客户端出现网络一次,发不出去,服务器并没有收到交易凭证,
3.这就导致于说,服务器不通知客户端发货.
4.如果我是个用户,我等待的时间久了,我也不会重新再购买一次,因为我明明已经付钱了.
5.我会直接结束整个app,重新进入app.
6.当我重新进入这个app的时候,我要重新验证收据凭证来补单.
7.所以我得需要每次交易完成之后将一些交易凭证内容保存到本地.
8.每次applicationDidBecomeActive的时候验证这些订单是否已经购买.
9.也验证这些订单是否已经发货(根据服务器返回的参数决定)
还有:iOS内购你看我就够了(埋坑篇)最后提到要禁止越狱的用户内购(这个就自己另行考虑了,我还没有仔细考虑到)
思维导图 :
![](https://i-blog.csdnimg.cn/blog_migrate/8a811dbe5fa23ada63283464f75a3fa1.webp?x-image-process=image/format,png)
IAP.png