如果有人以后要在做内购这一块。希望可以好好的阅读这篇文章,虽然不是字字珠玑。但是也是本人亲人趟过了无数的坑,希望可以对大家有所帮助! 
下面是在研究工程中遇到的问题(
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. kali linux 2.0下搭建DVWA渗透测试演练平台

    DVWA (Dam Vulnerable Web Application)DVWA是用PHP+MySQL编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常 ...

  2. OpenCV探索之路(二十三):特征检测和特征匹配方法汇总

    一幅图像中总存在着其独特的像素点,这些点我们可以认为就是这幅图像的特征,成为特征点.计算机视觉领域中的很重要的图像特征匹配就是一特征点为基础而进行的,所以,如何定义和找出一幅图像中的特征点就非常重要. ...

  3. 【Ubuntu 16】安装eclipse

    1.将eclipse.tar.gz传送到/home/xxx/下,解压缩,这里我已经配置好了JDK1.7,所以eclipse配置了就可以使用 2.创建快捷方式 dream361@master:~$ to ...

  4. Servlet3.1上传图片示例

    一.前端JSP页面 <%@page pageEncoding="UTF-8"%><!DOCTYPE html><html><head> ...

  5. 关于回文串的DP问题

    问题1:插入/删除字符使得原字符串变成一个回文串且代价最小 poj 3280 Cheapest Palindrome 题意:给出一个由m中字母组成的长度为n的串,给出m种字母添加和删除花费的代价,求让 ...

  6. MYSQL 中 LIMIT 用法

    mapper文件中的sql: ------------------------------------------------------------------------------------- ...

  7. vue :class的动态绑定

     动态绑定class 写在指令中的值会被视作表达式,如javascript表达式,因此v-bind:class接受三目运算: 1 2 3 4 HTML代码: <div :class=" ...

  8. 教你自己搭建linux邮箱服务器

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt290 现在网络中流行的电子邮件系统主要有Microsoft Exchange ...

  9. 一,ESP8266下载和刷固件

    用自己的小板测试...... 安排上呢 一, ESP8266下载和刷固件(Lua开发----体验一下lua开发的魅力所在) 二, 控制一个灯亮灭 三, TCP服务器 四, TCP客户端 五, UDP ...

  10. LINUX服务器上新增用户名

    最近所里的机群停了,需要用老板的服务器跑程序,这里首先得在老板的服务器上新增一些用户名.新增用户名方法如下: 1.利用useradd添加用户名,并指定用户名目录.脚本解释器.用户名 sudo user ...