iOS - 内购总结
如果有人以后要在做内购这一块。希望可以好好的阅读这篇文章,虽然不是字字珠玑。但是也是本人亲人趟过了无数的坑,希望可以对大家有所帮助!
下面是在研究工程中遇到的问题(
iOS 内购的流程如下
1. 程序向服务器发送请求,获得一份产品列表。
2. 服务器返回包含产品标识符的列表。
3. 程序向App Store发送请求,得到产品的信息。
4. App Store返回产品信息。
5. 程序把返回的产品信息显示给用户(App的store界面)
6. 用户选择某个产品
7. 程序向App Store发送支付请求
8. App Store处理支付请求并返回交易完成信息。
9. 程序从信息中获得数据,并发送至服务器。
10. 服务器纪录数据,并进行审(我们的)查。
11. 服务器将数据发给App Store来验证该交易的有效性。
12. App Store对收到的数据进行解析,返回该数据和说明其是否有效的标识。
13. 服务器读取返回的数据,确定用户购买的内容。
14. 服务器将购买的内容传递给程序。
因为我在填写完税务信息之后一直显示合同正在处理,然后也没处理就开始集成代码但是一直提示我产品获取失败,尝试了各种方法之后依然没什么卵用。后来才知道因为我们的项目是第一次进行内购方面的申请需要所以需要必须审核通过之后才能进行测试。终于开始测试了,一点要切记!在完成这一步后苹果会给你一份官方的文档。但是写的比较简单。时不时就会崩溃!最大的问题就是连接不到itunes 所以这一块一定要自己在做一步处理。要不就是在给自己挖坑!SKPaymentQuent来做一个一个监听,处理各种反馈情况!
2.内购的话还有一点是需要注意的就是内购的时候发生漏单的情况
1.你和苹果交互成功了。但是苹果没有把订单的信息给服务器造成了漏单的情况
2.你和苹果交互成功了。苹果和你的服务器也交互成功了但是服务器没有把成功的信息给你造成漏单的情况(当然这样的情况会与很多可能在服务器给你数据的时候应用闪退或者请求超时都可能造成这种情况的发生)
大概的内购发生漏单的情况主要就是这2种
下面我们来说说如何去避免这种情况的发生
1.首先苹果的服务器并没有大家想的那么的稳定。苹果的服务器其实很多时候都是不稳定的。所以入如果是第一种情况下造成的漏单的情况。只能说我们也是无能为力了。因为我们根本拿不到关于订单的任何信息。这样发生的漏单的
我们暂时做不了任何的处理 (在平常的项目使用中这种情况还是比较常见。)
2.针对第二种情况我们还是可以有好多的优化地方。基本上可以规避这种情况下的漏单。不是有那么一句话吗尽人事。知天命!
下面就是解决办法
1. 我们用的是SKPaymentQuent
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
通过这样的方法来监听购买的结果,SKPaymentQuent有个机制有个特点就是如果监听到的结果是失败,那么在下次APP重新启动的时候就会继续往下走。所以这个监听类可以
处理一部分的漏单情况直到直到SKPaymentQuent 这个类销毁
[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
2.本地的缓存 下面是具体实现的逻辑和思路
在请求咱们的服务器的时候把苹果给你的那一长串验证码先进行一个的本地的缓存 。经过慎重的思考和讨论建议缓存如下几个内容:1.验证码,2.用户名 3.当前的时间
如果请求成功则把当前缓存的内容删除。如果没成功在下次进入该界面的时候直接进行请求。
3.服务器做一个记录。苹果给服务器的时候做个记录以确保万无一失!
by : 乔智祥