如果有人以后要在做内购这一块。希望可以好好的阅读这篇文章,虽然不是字字珠玑。但是也是本人亲人趟过了无数的坑,希望可以对大家有所帮助! 
下面是在研究工程中遇到的问题(
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 : 乔智祥

 

iOS - 内购总结的更多相关文章

  1. IOS内购支付server验证模式

    IOS 内购支付两种模式: 内置模式 server模式 内置模式的流程: app从app store 获取产品信息 用户选择须要购买的产品 app发送支付请求到app store app store ...

  2. IOS内购支付服务器验证模式

    IOS 内购支付两种模式: 内置模式 服务器模式 内置模式的流程: app从app store 获取产品信息 用户选择需要购买的产品 app发送支付请求到app store app store 处理支 ...

  3. Unity苹果(iOS)内购接入(Unity内置IAP)

    https://www.jianshu.com/p/4045ebf81a1c Unity苹果(iOS)内购接入(Unity内置IAP) Kakarottog                       ...

  4. iOS 内购遇到的坑

    一.内购沙盒测试账号在支付成功后,再次购买相同 ID 的物品,会提示如下内容的弹窗.您以购买过此APP内购项目,此项目将免费恢复 原因: 当使用内购购买过商品后没有把这个交易事件关,所以当我们再次去购 ...

  5. 苹果IOS内购二次验证返回state为21002的坑

    项目是三四年前的老项目,之前有IOS内购二次验证的接口,貌似很久都没用了,然而最近IOS的妹子说接口用不了,让我看看啥问题.接口流程时很简单的,就是前端IOS在购买成功之后,接收到receipt后进行 ...

  6. iOS 内购相关

    iOS 内购相关 下面总结一下过往订阅和内购的项目的代码方面的实现细节和注意事项,特别是掉单方面的处理. 后台的协议.商品ID.银行卡.内购类型.沙盒账号测试人员都由运营或者产品在苹果后台中申请处理. ...

  7. iOS 内购讲解

    一.总说内购的内容 1.协议.税务和银行业务 信息填写 2.内购商品的添加 3.添加沙盒测试账号 4.内购代码的具体实现 5.内购的注意事项 二.协议.税务和银行业务 信息填写 2.1.协议.税务和银 ...

  8. IOS内购--后台PHP认证

    参考网址:https://blog.csdn.net/que_csdn/article/details/80861408 http://www.php.cn/php-weizijiaocheng-39 ...

  9. IOS - 内购

    内购的五种产品类别 •非消耗品(Nonconsumable)买了就有,头衔,功能 –指的是在游戏中一次性购买并拥有永久访问权的物品或服务.非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用 ...

随机推荐

  1. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

  2. 用UE4来做Zego即构的房间列表

    Zego即构是一家做直播的服务商,Zego即构自己的房间列表,本文只是测试功能用,相应代码并没完全测试,请选择性参考. 我们在UE4中来实现一下,我感觉这个过程有点意思,UE4中C++与蓝图和UI的互 ...

  3. elastalert基于微信公众号报警

    环境部署 安装其它的必需包 yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel   1,下载. ...

  4. 接口测试之soapUI(WebService)

    一.WebService介绍   WebService是一种跨编程语言和跨操作系统平台的远程调用技术,XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术.   1)XML+X ...

  5. 20个开发人员非常有用的Java功能代码

    本文将为大家介绍20个对开发人员非常有用的Java功能代码.这20段代码,可以成为大家在今后的开发过程中,Java编程手册的重要部分. 1. 把Strings转换成int和把int转换成String ...

  6. Win10个性化设置

    Win10个性化设置.. ---------------------- Capture001-我的桌面 ---------------------- Win10设置任务栏的颜色 ----------- ...

  7. 学习CSS记录:选择符优先级

    1.标有!important 关键字声明属性. 2.HTML中的CSS样式属性. 3.作者编辑的CSS文件模式属性. 4.用户设置的样式. 5.浏览器默认的样式. ------------------ ...

  8. TensorFlow框架(5)之机器学习实践

    1. Iris data set Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据集,分为3类, ...

  9. C语言:min和max头文件

    转自:http://www.cppblog.com/jince/archive/2010/09/14/126600.html min和max头文件 虽然说求最大值最小值函数在哪个头文件下并不是非常重要 ...

  10. 使用 qemu 搭建内核开发环境

    本文主要介绍在 MacOS 上使用 qemu 搭建 Linux Kernel 的开发环境.(在开始之前需要注意的是,本文中的 Linux 开发环境是一个远程服务器,而 qemu 被安装在本地的 Mac ...