1 简介

本篇将对苹果内购中出现的一些细节问题进行归纳总结,各位开发者在使用苹果内购过程中可以参考。
其他章节:苹果内购那些事儿(一)

2 丢单

这里说到的丢单,其实就是玩家付了钱,没有收到道具的一种现象。(PS:没付钱的单子,就不要来捣乱了,哈哈。)
上一篇(苹果内购那些事儿(一)已经对丢单做了简单说明。

2.1 什么情况会丢单

那么什么情况会导致丢单呢?以下我来列举几种情况:

  • 网络极差的情况,用户付了钱,游戏客户端将要把这个消息同步到服务器时,发生了超时。
  • 服务器出现了问题,用户付了钱,游戏客户端请求游戏服务器发货,一直返回错误

等等…诸如此类情况,都会产生丢单,而且是不可避免的。
产生丢单并不可怕,关键是要进行自动补单操作。那么该如何补单呢?

3 补单

补单其实就是针对那些出现问题的订单,进行查询,修改,使其变成正常订单。

3.1 订单查询

IAP支付本身并不提供直接查询订单的接口,我们可以间接进行查询订单。

  • 游戏启动以后,第一次调用[[SKPaymentQueue defaultQueue] addTransactionObserver:self];时,苹果内购系统自身会进行检查,如果有未完成订单,- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction会自动执行,利用这一机制可以实现查询,然而只是在第一次调用时有效,后续无效
  • 游戏内多次查询订单,既然第一种方法无法做到多次查询,我们可以考虑一下的方法
    NSArray *arr = [[SKPaymentQueue defaultQueue] transactions]; [self paymentQueue:(SKPaymentQueue *)queue updatedTransactions:arr]

使用以上两种方法已经可以实现订单的查询操作,但是需要注意这两种方法是有依赖关系的,第一次查询必须使用第一种方法,后续使用第二种方法查询;如果只是使用第二种方法,查询订单一直为空。

3.2 查询时机

有了以上的查询方法,接下来的问题就变成了什么时候查询,这里我给出两种查询时机:

  • 轮询查询。每隔5s 或者 5min等,可以根据自己的需求,去定时查询是否有丢单现象
  • 机动查询。根据项目需求,在某些事件发生时进行查询,比如用户登录成功。

4 IAP内购中坏账怎么来

坏账嘛,其实就是苹果结算的时候打款给开发者,跟自己平台统计的金额不一样,当然,大部分情况下都是钱少了。那么为什么会出现这种情况呢,难道真的是苹果爸爸多扣了吗?下面我们一一来进行对照,看看你们有没有中招。

4.1 36技术

如果你还不知道什么是36技术,那我可以简单的说下,苹果为了用户体验,规定30元以下的产品,用户购买成功以后,会立即返回支付成功,支付金额会延迟扣除。好了问题来了,既然是延迟扣除,很多人就钻了这个空子,导致扣款无法成功。这一问题开发者并不会知晓,也无从知晓,所以道具卖出去了,钱没收到。
也许,你会说苹果难道就不处理这种情况吗?苹果处理的,在扣款不能成功以后,该appid会被加入内购黑名单;然而强大的人类可以分分钟钟伪造出多个appid,多个虚拟银行卡。

4.2 汇率问题

这里先说一个事情,苹果内购商品的价格和货币类型,是根据购买者账号所在国家地区决定的,如你的是美国appid账号,那么你购买的时候需要支付美元。
现在的问题是,不同国家地区之间的汇率是经常变化的,甚至会出现大范围的波动;然而苹果内部也要一套汇率转换机制,该机制并不因为国家地区之间的货币汇率波动而改变,好了这个漏洞你明白了吧。。。

4.3 黑客进攻

黑客进行网络进攻,拦截服务器和客户端之间协议,伪造数据,多次请求服务器发货。这一过程根本就没有付款,黑客拦截协议以后,完成下单过程,然后利用之前付过款的凭证,要求发货。这一过程中,客户端和服务器应该协商好加密协议,另外服务器应该逐步进行校验,确保该条数据有效。

4.4 伪造凭证

好了,上面三种看起来好像还比较花时间,才能完成这个坏账。下面这种可以说是一劳永逸,伪造凭证。技术人员研究苹果相关的算法,自己可以产生苹果支付的凭证,而且可以通过苹果的验证。头大了吧。。。怎么搞。。。哈哈 。。
其实,也是有办法的。多重加密认证验证,以下有几种建议的校验方法:

  • 利用applicationUserName绑定自己的订单信息
  • 验证凭证会返回应用相关信息,商品相关信息,逐一进行验证
  • 客户端服务器协定加密方法

好了,你中招了吗??

苹果内购那些事儿(二)相关推荐

  1. Unity接入苹果内购

    文章目录 前言 一.苹果内购是什么? 二.Unity接入内购 1.开启内购 2.使用内购 总结 前言 Unity接入苹果内购前,需要提前配置好产品的内购ID以及拥有苹果账号,关于这个提前准备各位需要自 ...

  2. Cocos 2d-X Lua 游戏添加苹果内购(二) OC和Lua交互代码详解

    这是第二篇 Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程 这是前面的第一篇,详细的说明了怎样添加内购项目以及填写银行信息提交以及沙盒测试员的添加使用以及需要我们注意的东西,结 ...

  3. java(jfinal) 接入ios苹果内购(连续包月订阅),服务端将二次验证。

    大致流程: 1.ios端进行支付,然后收到苹果的一串数据(也叫收据),然后ios端将其转码为BASE64编码的字符串. 2.ios端请求服务端接口,将数据传给服务端,服务端拿到数据后,通过一系列处理后 ...

  4. Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程

    事前准备 最近给游戏添加了苹果的内购,这一块的东西也是刚刚做完,总结一下,其实这里不管是游戏还是我们普通的App添加内购这一块的东西都是差不多的,多出来的部分就是我们Lua和OC的交互的部分,以前刚开 ...

  5. iOS:苹果内购实践

    iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...

  6. Java支付--苹果内购

    一.苹果支付 ①逻辑流程图 二.苹果支付流程介绍 ①用户购买产品下发支付请求到app端; ②app端收到请求后调用苹果服务进行支付扣款; ③苹果服务扣款成功后返回receipt_data加密数据和支付 ...

  7. 苹果内购开发总结(含掉单问题优化)

    1.后台查询充值记录 2018年3月27日 苹果内购开发(含掉单问题优化) 一.通用流程梳理 1.原来老的的流程(第七步有掉单风险) 第1. 先创建订单 第2.订单返回正常后(有订单号),启动苹果购买 ...

  8. 苹果内购IAP记录-2 StoreKit新版

    苹果内购新版的StoreKit2只支持iOS15以上,新的nsync同步接口,简单的使用如下: @available(iOS 15.0, *) public class MXLiveIAPStoreV ...

  9. 苹果内购噩梦条款3.1.1,知道这些小细节才不会被拒审

    说到苹果审核被拒条款的C位,3.1.1必须有姓名. 3.1.1作为常年呆在被拒前三位的条款,已经让一大批互联网民工脱了发. 3.1.1让人头疼的点都有哪些? • 审核周期长一直卡包: • 根本没办法隐 ...

  10. 苹果内购IAP记录-1

    这段时间做了苹果内购IAP,做一个整理记录,主要是开发层面. 一.前期工作:在开发者账号中添加银行信息同意协议等,添加沙盒账号,添加内购商品 二.项目开发,因为项目需要支持iOS15一下的版本所以使用 ...

最新文章

  1. Ubuntu dns
  2. Angular中的路由配置、路由重定向、默认选中路由
  3. lucene使用3.0.3_使用Apache Lucene 4.3轻松进行搜索
  4. 亿佰特物联网dtu无线数传电台:新一代Lora无线模块通信技术
  5. BZOJ2597 WC2007剪刀石头布(费用流)
  6. 服务器消息不是按顺序来的,消息队列之 RocketMQ(示例代码)
  7. 如何查看JVM内存中的对象和执行中的方法
  8. Java数组排序(选择排序)
  9. 笔记本拨号连接网络总断
  10. ESP32驱动 1.3寸OLED SH1106芯片)
  11. 科学防疫宣传实践总结报告
  12. 【微机接口】可编程串行异步通信芯片8250
  13. U盘exe病毒还原文件以及永久防毒
  14. 微信小程序--超简单贪吃蛇
  15. 常见交通工具英语单词
  16. MIDI 文件格式分析
  17. ES和Kibana设置账号密码
  18. 如何快速把mkv转为mp4格式,并带(保留)字幕!可在iPhone上播放
  19. ios英语口语800句应用源码
  20. 汤家凤数一强化测试10套卷

热门文章

  1. ubuntu搭建PHP网站完整实例教程
  2. 解决本地图片上传正常,服务端上传图片报500
  3. 计算机如何连接隐藏的无线网络,笔记本电脑怎么连接隐藏的无线网wifi
  4. 小鸟云服务器如何安装rstudio-server?
  5. 51nod 1548 欧姆诺姆和糖果【思维+分类讨论】
  6. 网页百度网盘上传显示服务器错误,win7系统下登陆百度浏览器提示连接服务器错误的方案?...
  7. C1认证:植物大战僵尸存档详解
  8. python找与7相关的数字_Python 入门系列 —— 7. 数字类型介绍
  9. CAD中怎么旋转箭头符号?
  10. JS的Date函数汇总