Sloppy's Blog

IOS IAP的一注意点

问题背景

最近公司的项目在AppleStore上审核通过了。由于之前接入了内购,在调试的时候。一点问题都没有。今天突然发现所有的IAP的商品一个沙盒测试账号只能购买一次。就不能购买第二次,并且直接卡在充值界面。由于重新打开APP会有恢复交易的功能,所以第二次充值虽然卡住,但是依然到账。但是这个问题,比较麻烦,由于测试阶段是好的。商品审核过了。这次测试以为是通过后的商品只能充值一次了。

问题出在哪里

搜索了各种资料都没有找到答案,昨天拿了一下最新的版本代码。竟然是可以的。而旧版本的代码是不行的。查了老半天。原来是服务器返回的数据格式突然不对了,可能是合并代码时出问题了。造成的。因为每次的交易结束(finishTransaction)依据服务器返回的code为0状态的时候才结束。而新的代码是不管code为多少都会结束交易。而苹果的IAP,如果上个交易没有Finish,下个交易当前是不会触发交易完成或者失败的。所以一直以为是苹果不给游戏回调造成的。

解决方案。

所以要注意的点是,每一次交易都要结束掉。不然不能连续充值。另外,同一个transactionReceipt,提交给服务器,让服务器去找IOS的充值进行校验都是可以通过的。可以服务器端,需要做标记。之前我们服务器端没有做标记,是否充值成功过,如果成功过。就不能再给游戏账户充值了。导致后来可以反复刷金币的BUG