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

    新建一个项目,Activity继承RxAppCompatActivity的时候,在页面跳转的时候会出现闪退的问题,一直都没有解决. 后面将两个父类全部改成activity,问题解决.但是有的时候必须使 ...

  2. KeepAlived+Nginx实现高可用负载

    一.环境及安装版本: centos6.5.Nginx1.4.7.keepalived1.3.2 虚拟IP 真是IP Nginx端口 主从分配 10.0.90.215 10.0.90.217 80 MA ...

  3. c语言 进程控制---创建进程 vfork()函数

    #include "stdio.h" #include "unistd.h" #include "sys/types.h" int gvar ...

  4. Python练习2

    [之前发布到本人的51cto博客,现转过来] 无意看到老男孩的博文:合格linux运维人员必会的30道shell编程面试题及讲解 http://oldboy.blog.51cto.com/256141 ...

  5. mysql转ElasticSearch的案例分析

    前言 最近工作中在进行一些技术优化,为了减少对数据库的压力,对于只读操作,在程序与db之间加了一层-ElasticSearch.具体实现是db与es通过bin-log进行同步,保证数据一致性,代码调用 ...

  6. [js高手之路]深入浅出webpack教程系列6-插件使用之html-webpack-plugin配置(下)

    上文我们对html-webpack-plugin的实例htmlWebpackPlugin进行了遍历分析,讲解了几个常用属性( inject, minify )以及自定义属性的添加,本文,我们继续深入他 ...

  7. SQL菜鸟学习札记(二)

    五月份一直在写SQL,之后写了一个期末大作业的项目,现在才有时间把之前遇到的各种奇怪的问题整理出来.下一部分札记应该是大作业中使用到的SQL的整理. 一.UPDATE SET语句后面可以并列赋值. 之 ...

  8. 实时监听文本框输入 oninput、onchange与onpropertychange事件的用法和区别

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框hu9i动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onke ...

  9. Jquery 清空input file的值

    var file = $(obj).parent().find(".fileData");                $(file).val('');

  10. Jquery的同步和异步请求

    1 异步请求:    1.1 $.ajax       $.ajax({                url : 'your url',                data:{name:valu ...