苹果内购那些事儿(二)

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绑定自己的订单信息
  • 验证凭证会返回应用相关信息,商品相关信息,逐一进行验证
  • 客户端服务器协定加密方法

好了,你中招了吗??

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值