IOS应用内购买(IAP)开发时遇到的几个问题总结
来源:互联网 发布:百度最新算法 编辑:程序博客网 时间:2024/06/05 02:36
IOS IAP开发
具体的开发流程可以参考一下几篇文章:
http://blog.devtang.com/blog/2012/12/09/in-app-purchase-check-list/
http://www.himigame.com/iphone-cocos2d/550.html
开发中遇到的几个问题:
1、在程序开发的测试阶段,使用创建好的测试账号,如果点击购买后可以获得产品的id,但是还是进入到这个方法中-(void)failedTransaction:(SKPaymentTransaction*)transaction {
if(transaction.error.code!= SKErrorPaymentCancelled) {
[loadingView dismissWithMessage:NSLocalizedString(@"buyFail",
nil)];
} else {
[loadingView dismiss];
}
[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}
提示购买失败。是因为使用测试账户购买自己的产品,与购买正式的产品一样,所以我们的手机也要绑定这个测试账户。到手机的设置—>iTunes Store和App Store中注销当前用户,然后添加进测试账户。再运行程序就可以购买了。
2、[SKPaymentQueue defaultQueue] removeTransactionObserver:self];要放在dealloc里面移除。dealloc在页面消失时会执行,在这样将其移除后,当再进入这个界面时又会执行viewDidLoad方法,还会再注册一次。
3、在itunes connect中提交程序时也要将应用内购买的产品,一起提交进行审核,在创建应用内购买的产品时,要将产品截图上传,如果没有具体的东西可以截图,截取产品列表页面也行,这个截图不会在app store显示出来。
如果不将产品提交,那么应用直接会被拒绝!!
4、在PHP端进行处理时,先验证凭证是否存在,存在了则不处理,不存在则将凭证存储在服务器上。然后像苹果服务器发送请求,验证凭证的有效性。
<?php/*this little script is intended for in-app purchasing on iOS devicesparams receipt-data=[receipt-data]*/include("conn_db.php");error_reporting(55);$uuid =$_POST['uuid'];//先验证此凭证是否已经存在$sql=mysql_query("select* from Receipt where uuid = '".$uuid."' and receipt ='".$rec."'");if(mysql_num_rows($sql)>0){ echo"1"; //凭证已经存在了}else{ //将凭证进行存储 $sql =mysql_query("insert into Receipt (id, uuid, receipt) values (null,'".$uuid."', '".$rec."')"); //向苹果服务器进行二次请求 $receipt =json_encode(array('receipt-data' => $rec));//$url ="https://sandbox.itunes.apple.com/verifyReceipt";测试的时候请求这个$url ="https://buy.itunes.apple.com/verifyReceipt"; // curl options tomake it all work correctly $curl_handle=curl_init();curl_setopt($curl_handle,CURLOPT_URL, $url); curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, true);curl_setopt($curl_handle,CURLOPT_HEADER, 0);curl_setopt($curl_handle,CURLOPT_POST, true);curl_setopt($curl_handle,CURLOPT_POSTFIELDS, $receipt); curl_setopt($curl_handle,CURLOPT_SSL_VERIFYHOST, 0);curl_setopt($curl_handle,CURLOPT_SSL_VERIFYPEER, 0);$response_json =curl_exec($curl_handle); $response =json_decode($response_json); curl_close($curl_handle); $receipt_resp =$response->{'receipt'}; if($receipt_resp->{'bid'}!=”自己应用的bundle id”){ echo"3"; //iap free发送的假凭证}else{ // if thereceipt-data request returs 0, all went well and we can proceed if($response->{'status'} == "0") { //成功付款后的操作,如给用户积分或下载资源等等。 echo"4"; //购买成功 }else{ echo"2"; //假凭证 } }}?>
为什么验证是否为iap free发送的假凭证时,要那样做呢?看一下下面的这两个凭证的比较,这是我找到的判断方法。
正确的凭证的格式如下:
不正确的凭证格式如下:
- IOS应用内购买(IAP)开发时遇到的几个问题总结
- iOS IAP应用内购买汇总
- iOS应用内购买项目(IAP)
- IAP-应用内购买
- IAP-应用内购买流程
- 为iOS应用/游戏内建购买项目(IAP)
- iOS应用内支付(IAP)开发步骤
- IAP-应用内购买(部分)
- IAP-应用内购买(部分)
- IAP-应用内购买(部分)
- 总结Java+Oracle应用开发的常遇到几个问题
- iOS应用内支付(IAP)的注意事项
- iOS应用内支付(IAP)的注意事项
- iOS应用内支付(IAP)的注意事项
- IAP,应用内购买---非自动订阅购买的另一种方式
- IOS应用内购买
- IOS应用内购买
- IOS应用内购买
- view的各个回调方法执行顺序
- myeclipse9创建s2sh项目全过程2
- Qt动画----窗体渐进开启
- Building C API Client Programs
- 编写一个简单的用户管理系统(工厂代理模式)
- IOS应用内购买(IAP)开发时遇到的几个问题总结
- 使用Ant编译出现如下问题 java.io.FileNotFoundException: bin\classes.dex
- 初识Objecive-C 之 属性
- 分布式事务的研究
- QDialog对QpushButton的处理
- javascript深度剖析
- Java Class 没有父类 怎么继承 Object的
- 分录表格三个按钮的事件
- 通过sim900短信收发控制stm32设备