先附上几篇文章:

1.In App Purchases: A Full Walkthrough

这篇文章里说的都很详尽了,代码什么的基本可以照搬.

2.Store Kit Guide(In App Purchase)翻译

对苹果文档的翻译,如果还不了解什么是IAP需要先看一看

3.苹果官方文档

当需要注意细节问题时,要一个字一个字抠这个文档

4.iPhone,In,App,Purchase购买完成时验证transactionReceipt

这篇文章教你如何验证交易收据

上面这几篇文章基本上把IAP的整个流程都涵盖了。这里我根据我的经验(不见得是准确的)进行细节补充:

1、上传商品信息(步骤可以参考itunes connect developer guide)。这里并不一定要先上传好应用(app),你可以等程序都测试完了在上传。但是由于每个商品都是跟唯一一个应用挂钩的,所以要先创建一个应用获取其app id。也就是说只要有一个app id,就可以添加其商品,并且进行测试。
2、如果你的商品尚未审核通过,经过几个小时,你的商品就会进入沙盒。这个时候我们就可以用测试账号对其进行购买测试。沙盒模式进行测试,苹果是不会真正走信用卡扣款这一步的。

3、测试账号可以通过itnunes connect来添加,账号信息随便添就行。这里要注意,这个账号只能用于我们应用的沙盒测试,不要用于正常商品的购买(比如买个已上架的应用里面的商品),否则苹果会禁用这个账号。

4、当我们确认购买一个商品,我们会获取一个SKPaymentTransaction对象,里面的transactionReceipt是验证信息(就是一组json字符串),我们对其进行base64加密,然后按照苹果规定的格式(具体可以参考文档)发送到验证地址就可以了。验证成功后,app store返回的信息里面包含购买商品的具体信息,可以用于对账。

5、购买商品后,我们本地的交易队列中会有一个新的对象,这个交易队列是保存在本地硬盘上的,除非我们调用finishTransaction,否则交易对象不会删除。而程序开启时(这里要注意一下,下面会针对这个做详细说明)如果交易队列不为空,则ios会通知我们交易队列状态更新,我们就要根据交易对象的状态进行处理。

SKPaymentTransactionStatePurchased  交易成功,这时已经扣完钱,我们要保证将商品发送给用户

SKPaymentTransactionStateFailed 交易失败,原因很多(可以通过SKPaymentTransaction.error.code来查看具体失败原因),最常见的是SKErrorPaymentCancelled(用户取消交易),或是未输入合法的itunes id

SKPaymentTransactionStateRestored  非消耗性商品已经购买过,这时我们要按交易成功来处理。

6、如果交易失败,我们可以直接将交易从交易队列中移除。如果成功,则要发起验证,等待验证结果来进行处理。其结果无非三种,验证成功、验证非法、验证错误。

成功和非法我们都要讲交易对象从交易队列中移除,验证错误则可能是验证服务器出现故障,我们不应该删除该交易对象,待程序重新开启后,再一次进行验证,直到成功或者失败。

7、有的文章有提到这个观点,“我们应该在程序开启的时候调用addTransactionObserver,来添加观察者,否则可能会遗漏交易对象”

个人认为,这种说法不正确。IOS调用paymentQueue来通知我们交易状态更新是在添加观察者之后,如果没有添加观察者,IOS不会对交易队列做任何处理。我们要确保我们的程序有能力处理所有交易了(比如说登陆服务器成功)才添加观察者,否则反而会出现IOS调用回调函数更新交易队列状态,但是我们的程序却没有办法处理这个交易。

iOS应用内购买(In App Purchase)总结相关推荐

  1. iOS 应用内购买(In-App Purchase)之开发

    iOS 应用内购买(In-App Purchase)之协议.税务和银行业务 使用IAP之前,需要签订协议,查看上面的链接. IAP开发 添加App内购项目 登录 iTunes Connect ,选择我 ...

  2. iOS 上 App 内购买(in-app purchase)的误消费可以退款吗?

    iOS 上 App 内购买(in-app purchase)的误消费可以退款吗?修改 周二晚按照@任轶 的答案做了,把购物清单的四个订单号列在内容里,当晚收到了苹果公司自动回复,周三受到苹果公司团队中 ...

  3. IOS应用内购买App开发完整流程

    2019独角兽企业重金招聘Python工程师标准>>> 看了一些网上教程,基本上是老版本的了.我针对自己遇到的一些问题,结合官方文档把IAP(In-App Purchase)过程梳理 ...

  4. iOS 应用内购买基础教程 swift篇

    应用内购买基础教程 原文地址http://www.raywenderlich.com/105365/in-app-purchases-tutorial-getting-started 更新日志:本教程 ...

  5. ios 应用内支付(In-App Purchase,沙盒测试,后台验证)

    1.苹果iTunes Connect内购产品信息录入. 1)创建app内购买项目(Create New),选择类型: 1.消耗型项目 对于消耗型 App 内购买项目,用户每次下载时都必须进行购买.一次 ...

  6. ios 应用内购买 php,ios 应用内购买(cordova项目)

    1.xcode配置开启支付功能 Capabilities-> 注册Merchant Ids(商用id): 在Identifiers下,选择Merchant IDs 在右上角点击"+&q ...

  7. iOS应用内置付费详尽攻略

    我最近正在制作的一个程序里面,我就决定先把程序免费(其中只包含一个故事),然后把更多的故事放在in-app purchase里面.在这篇教程里面,你将会学到如何使用程序内置付费来解琐本地程序里面的内容 ...

  8. iOS开发之内购完全笔记(您已购买此 App 内购买项目。此项目将免费恢复。)

    1.内购流程 1.在 AppStore 中创建相应的物品,创建内购沙盒测试账号 2.客户端从后台获取相应的物品 ID (当然也可以再客户端写死,但后期扩展性就受限制了) 3.依据相应的物品 ID 请求 ...

  9. 【IOS】 In App Purchase 内置购买 总结

    上一个项目用到了In App Purchase,发现现在大家对这个挺关注的,把上次写的总结贴出来给大家看一下,希望对大家有点帮助! 两种方案 一, 我的程序具体步骤 1 添加Storekit.Fram ...

最新文章

  1. asp网络编程:用ASP打开远端MDB文件的方法
  2. 安卓错误Emulator: error: x86 emulation currently......
  3. java qt jni_java JNI 实现原理 (二) Linux 下如何 load JNILibrary
  4. C++(Goto使用实例)
  5. 关于mount --bind的理解。
  6. Spring(七)持久层
  7. VC/MFC 进程间通信方法总结
  8. 2019-02-26-算法-进化(字符串转换成整数)
  9. Eclipse查找文件存储路径
  10. swift网络编程入门应用:天气预报
  11. java swt 文件选择,Java SWT文件对话框中的文件多选
  12. 最小的单片机:ATtiny85
  13. 计算机桌面隔几秒闪一下,电脑最近怎么老是隔一段时间显示器就要闪一下
  14. 全球及中国电动汽车电池市场产能规划及投资份额预测报告2021-2027年版
  15. 毕业一年一点不平凡经历,不平常的感受,有了不平常的自信
  16. js 身份证号隐藏中间数字
  17. Java web(简单的servlet计算器)网页计算器
  18. Sql Server数据库的备份和恢复措施
  19. 计算机冗余,惯性导航计算机系统冗余设计
  20. 细数抖音电商的7问题

热门文章

  1. 二元函数泰勒公式例题_高等数学入门——二元函数可微性的判断方法总结
  2. 计算机必记快捷键,电脑常用的快捷键,记住这些快捷键让你瞬间变成电脑高手...
  3. 计算机专业哪家强,计算机专业哪家强?这4所大学水平一流,网友:都是“大佬”级别...
  4. html重绘text,使用DrawText重绘C++
  5. think php框架 跨域,ThinkPHP框架实现session跨域问题
  6. ajax里怎么添加跳转地址,Ajax中window.location.href无法跳转的解决办法
  7. 安徽工业大学计算机学院推免名单,2021年安徽工业大学拟录取推免研究生名单公示...
  8. 腾讯地图api_数据库API接口的类型及应用场景
  9. CentOS7的/tmp目录自动清理规则(转)
  10. 【dp 贪心】bzoj4391: [Usaco2015 dec]High Card Low Card