来源:http://blog.csdn.net/xinruiios/article/details/9289573

IAP的全称是In-App Purchase,应用内付费。这种业务模式允许用户免费下载试用,对应用内提供的商品选择消费,比如购买游戏道具,购买游戏等级等等。相比完全收费的应 用而言,应用内付费给用户试用的机会,不会让优秀的应用因为缺乏用户的认知而丧失消费者;

由于IAP相关文档有限,为此特整理在IAP开发过程中的一些注意事项:

一、产品类型的选择

IAP的商品从消费性质上分为四种:

1.消耗型商品(Consumable),比如游戏道具,子弹,药品等等。由于这类商品可以被消耗,所以支持重复购买。苹果应用商店不保存此类商品的购买记录,如果要保存则需要开发者同步到自己的服务器上。

2.非消耗型商品(Non-Consumable),比如游戏关卡,隐藏地图等等。这类商品只要购买一次便可以了,苹果应用商店里每一个用户对非消耗型商品的购买都有记录,可以在不同的设备上恢复购买状态,这个恢复的过程叫做Restore。

3.自动重置型订阅(Auto-Renewable Subscriptions,比如电子杂志,读物等。消费者购买这类商品时会从列表中选择一个有效期限,卖家在定义商品的时候从一群固定的选项 中选择添加一个有效期,比如7天,一个月,两个月。过了有效期之后,商品的购买状态会被自动重置成未购买,要想继续获得内容则需要再次订阅。这种类型的商品和非消耗型商品一样,会在苹果商店内保存购买记录。

4.非自动重置型订阅(Non-Renewing Subscription,比如用户订阅电子杂志和读物报刊时需要从自定义的期限列表中选择期限,而不是苹果提供的固定选项,比如9天,一个半月或任意时间。在这种情况下,苹果商店无法根据期限来控制订阅的到期行为,所以一切都需要开发商自己编写相应的逻辑来实现。

在创建产品类型的选择决定着客户端/server的处理流程,为此一定要在选择类型时考虑所创建的产品特性,选择时,如果对于自动重置型订阅,特别需要注意,此类型的商品的必须依据苹果设置的使用期限进行创建,如一个月、三个月、半年等,不能创建任意时间段,同时,在此类型中,经过在沙盒测试发现,当产品到期时,苹果服务器会自动进行续订操作,因此,客户端需根据监听处理苹果的续订事件进行续订结果提示用户;

二、产品的支付验证服务器选择

当创建好产品后,客户端进行IAP服务监听后,由于IAP在支付后成功后,会收到苹果服务器的支付凭证,客户端在获取到支付凭证后,需要将支付凭证反馈给server服务器进行支付验证确认。此时,不管是采用客户端APP的server验证方式还是客户端APP验证方式,都需要根据当前APP的支付环境选择正确的验证地址,在苹果服务器中,沙盒测试环境的IAP验证地址为:https://sandbox.itunes.apple.com/verifyReceipt,正常线上交易的验证地址为:https://buy.itunes.apple.com/verifyReceipt,为保证审核的通过,需要在客户端或server进行双重验证,即,先以线上交易验证地址进行验证,如果苹果正式验证服务器的返回验证码code为21007,则再一次连接沙盒测试服务器进行验证即可。

在应用提审时,苹果IAP提审验证时是在沙盒环境的进行的,即:苹果在审核App时,只会在sandbox环境购买,其产生的购买凭证,也只能连接苹果的测试验证服务器,如果没有做双验证,需要特别注意此问题,否则会被拒;

三、产品线上支付过程中的不同环境处理

IAP沙盒环境及线上环境在处理过程中有些问题,需进行特殊处理;

在沙盒环境下,进行支付时,无银行支付验证过程,此时应用一直处于IAP支付过程中,直至支付完成;

而在线环境下,由于IOS6添加了支付确认过程,导致在银行密码确认过程中确认完毕后,应用未能及时返回APP,且此时会收到server下推的SKPaymentTransactionStateFailed事件,当返回到应用后,如果此时已经注册了IAP支付消息处理,当刚才的支付成功后,苹果服务器会反馈SKPaymentTransactionStatePurchased或SKPaymentTransactionStateRestored事件,此时客户端在此事件中获取凭证并进行支付确认;

由于部分类型具有购买恢复操作Restore,所以当删除APP后,又重新安装APP,此时需要恢复之前的购买时,在IAP处理中仍需进行SKPaymentTransactionStateRestored事件的处理,如果通过server方式进行支付凭证验证的,需要判断当前的Restore事件是恢复支付还是购买支付,以保证servver的统计正确;此时可由server根据验证凭证中的有效信息(如有效期信息)进行判断是为新的购买还是以往支付的恢复;

四、IAP事件注册时机

对于IAP支付,当支付成功时但由于网络等引起的支付凭证验证失败或未进行验证时,在IAP事件注册后,苹果服务器会通过SKPaymentTransactionStatePurchased或SKPaymentTransactionStateRestored事件进行返回支付凭证,客户端需对此支付凭证进行验证,以保证支付完整性;为此,在app启动时,应直接进行IAP事件注册;即:[SKPaymentQueuedefaultQueue]addTransactionObserver操作;

五、越狱手机的IAP问题

由于越狱手机可能安装了黑客的恶意程序,监听网络数据,支付凭证中并不包含任何用户的apple id信息,所以我们的app和服务器无法知道这个凭证是谁买的,如果恶意程序截获苹果服务器的有效支付凭证,但恶意程序将假的支付凭证发给后台server导致原支付的账号验证失败,而此时恶意程序将截获的有效支付凭证对应到另外的支付账号上,就会导致该恶意程序设置的账号通过正确的支付凭证而获取server的认证。

所以,对于越狱的手机可禁用IAP支付,采用第三方支付平台进行支付的方式。

iOS应用内支付(IAP)的注意事项相关推荐

  1. iOS应用内支付(IAP)的那些坑

    我们在今年春节后上线了新的在线智能题库:猿题库.猿题库现在推出了公务员考试行测和申论2个产品,均包括web, iOS和Android三个平台.这次我们尝试做一个收费的产品,所以在iOS端集成了应用内支 ...

  2. IOS 应用内支付(IAP)接口使用说明

    群里看到一个关于ios支付回调问题如下 问题: 箭头函数的回调没有执行 解决办法: 不要着急改成箭头函数, 先按官网复制代码跑通流程 为什么用箭头函数有这个bug呢? 文档说了 : 服务端要做好防重校 ...

  3. Cocos2dx使用ios内支付IAP详细流程-白白

    今天总结了一下cocos2d-x使用ios内支付iap的详细流程,封装好了调用接口,代码与详细说明在此 http://download.csdn.net/detail/u010229677/81566 ...

  4. Cocos2dx使用ios内支付IAP具体流程-白白

    今天总结了一下cocos2d-x使用ios内支付iap的具体流程,封装好了调用接口,代码与具体说明在此 http://download.csdn.net/detail/u010229677/81566 ...

  5. Cocos2d-x使用iOS游戏内付费IAP(C++篇)

    source file url: http://www.tairan.com/archives/5515 Cocos2d-x使用iOS游戏内付费IAP(C++篇) 前期准备 设备与账号 在开始编码之前 ...

  6. ios应用内支付过程(使用苹果原生支付方式

    因为ios政策问题,如果开发者需要在ios客户端中加入购买(虚拟货币)项目,需要使用ios应用内付费IAP这种方式,这也是很多苹果APP不和安卓共通的原因.因为苹果需要抽取%30的利益,详细原因就不赘 ...

  7. iOS应用内付费(IAP)开发步骤列表

    iOS应用内付费(IAP)开发步骤列表 前两天和服务端同事一起,完成了应用内付费(以下简称IAP, In app purchase)的开发工作.步骤繁多,在此把开发步骤列表整理如下.因为只是步骤列表, ...

  8. iap php,PHP语言之华为应用内支付IAP验签

    背景描述 项目对接华为HMS SDK的应用内支付IAP SDK3.x以后,支付成功后,可从PurchaseResultInfo对象中获取到购买数据InAppPurchaseData及其签名数据,需要使 ...

  9. PHP语言之华为应用内支付IAP验签

    背景描述 项目对接华为HMS SDK的应用内支付IAP SDK3.x以后,支付成功后,可从PurchaseResultInfo对象中获取到购买数据InAppPurchaseData及其签名数据,需要使 ...

最新文章

  1. 实体链接(Entity Linking)、依存句法分析、成分句法树、词袋模型、文本向量空间模型(TF-IDF)、
  2. 好程序员大数据技术分享:Zookeeper集群管理与选举
  3. Django 自定义模板标签TemplateTags
  4. hibernate示例_通过示例Hibernate–第1部分(删除孤儿)
  5. linux虚拟终端时间短,使用Screen创建虚拟终端避免Linux远程断线
  6. 查看linux服务器信息
  7. 阿里云数据传输服务低价不低质,服务再升级
  8. kibana java script_Elasticsearch:创建 Runtime field 并在 Kibana 中使用它 - 7.11 发布 - TGCode...
  9. Django model update的各种用法介绍
  10. php获取时间计算时间差
  11. 自动色彩均衡算法(ACE)原理及实现
  12. Julia :HDF5数据文件读写与更新
  13. disc性格测试cs适合职业_DISC职业性格测试
  14. JUnit 4 vs JUnit 5
  15. Web Api 调用时出现405错误解决方案
  16. console用法java_Java Console printf(String, Object)用法及代码示例
  17. 工作了,才知道......
  18. java 常用英语单词
  19. 滚蛋吧小广告!我现在用命令行解压缩;当哥白尼遇上人工智能;一份傲娇的深度学习技术清单;一个视频尽览旷视20项前沿技术 | ShowMeAI资讯日报
  20. Pika使用入门(一)【介绍】

热门文章

  1. 大学物理质点动力学思维导图_大学物理质点动力学思维导图
  2. VS2008遇到的error R6034,程序清单问题
  3. 【转】一个年轻女中医总结的保养秘方
  4. 基于javaweb的超简单新闻管理系统
  5. 快速容易地处理Windows、Mac 和Linux系统中文件路径问题
  6. 维纳滤波复原噪声图像
  7. 怎么利用计算机打桌球,腾讯全民桌球怎么在电脑上玩 全民桌球PC电脑版安装使用【图文攻略】...
  8. H3C三层vlan路由实验
  9. java threadpoolexecutor 返回值_Java ThreadPoolExecutor详解
  10. Discovery Studio | Multi-Site Lambda Dynamics (MSLD) 进行自由能计算