iOS内购实现及测试Check List
在内购使用中存在的几种丢单的情况
1.客户端获取到交易回调后-(void) purchasedTransaction: (SKPaymentTransaction *)transaction 后在交易成功的情况下,要拿到
transactionReceipt凭证,给后台验证的时候用户推出。(用户已经付钱但商家还没给商品)
解决方法:在支付之前需要通过自己的服务器创建订单,在交易成功回调之后,立马将该订单和本次交易凭证存储到数据库中。在用户下次登录的时候,要首先验证该数据库中的交易凭证是否都经过后台验证过并成功给玩家商品。
2.这种情况是当交易回调有延时或者没有成功回调的时候,用户推出游戏。这个时候没有回调的transaction,无法将transactionReceipt和自己创建的订单绑定,也就是无法知道交易的用户。(感觉苹果这边有BUG,起码在交易对象中包含用户的数据)。这个时候,用户再下次登录的时候可以获取到transaction,但无法确定该交易的用户。
解决方法:在下次购买的时候,从购买队列中获取交易集合,对已经成功购买,但没下载的不需要重复购买,终止本地交易,将其存入已购买数据库中。
但还有一个问题,对于上次没有回调回来的交易,我们无法处理,以为虽然拿到了交易集合,但只凭借交易对象是无法知道用户信息的,也就无法充值。也就是说无法避免的丢单问题.................
找到解决办法了:ios7 苹果增加了一个属性applicationusername,SKMutablepayment的属性,所以用户在发起支付的时候可以指定用户的username及自己生成的订单,这样用户再下次得到回调的时候就知道,此交易是哪个订单发起的了进而完成交易。回调中获取username。
transaction.payment.applicationUsername(订单)将该属性连同transactionReceipt 传给后台做验证。完美解决问题 perfect
ios如何恢复购买 ios恢复购买记录
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
FreeBSD 二进制安装nginx
使用系统二进制源方式安装在Ubuntu/Debian系sudo apt-get install nginx或者RedHat/CentOS系sudo yum install nginx这种方式最简单的,最快捷的方式,但是不是最好的方式,下面我们来说这种主要问题。优点所有安装二进制依赖已经处理好了,不用担心兼容性问题,开箱即用Nginx的连接配置,用户权限这个都不用处理,已经帮你写好这块了不用担心Ng
FreeBSD 二进制安装nginx linux服务器nginx安装 centos nginx debian nginx安装 nginx安装