iOS应用内购买(In App Purchase)总结
先附上几篇文章:
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)总结相关推荐
- iOS 应用内购买(In-App Purchase)之开发
iOS 应用内购买(In-App Purchase)之协议.税务和银行业务 使用IAP之前,需要签订协议,查看上面的链接. IAP开发 添加App内购项目 登录 iTunes Connect ,选择我 ...
- iOS 上 App 内购买(in-app purchase)的误消费可以退款吗?
iOS 上 App 内购买(in-app purchase)的误消费可以退款吗?修改 周二晚按照@任轶 的答案做了,把购物清单的四个订单号列在内容里,当晚收到了苹果公司自动回复,周三受到苹果公司团队中 ...
- IOS应用内购买App开发完整流程
2019独角兽企业重金招聘Python工程师标准>>> 看了一些网上教程,基本上是老版本的了.我针对自己遇到的一些问题,结合官方文档把IAP(In-App Purchase)过程梳理 ...
- iOS 应用内购买基础教程 swift篇
应用内购买基础教程 原文地址http://www.raywenderlich.com/105365/in-app-purchases-tutorial-getting-started 更新日志:本教程 ...
- ios 应用内支付(In-App Purchase,沙盒测试,后台验证)
1.苹果iTunes Connect内购产品信息录入. 1)创建app内购买项目(Create New),选择类型: 1.消耗型项目 对于消耗型 App 内购买项目,用户每次下载时都必须进行购买.一次 ...
- ios 应用内购买 php,ios 应用内购买(cordova项目)
1.xcode配置开启支付功能 Capabilities-> 注册Merchant Ids(商用id): 在Identifiers下,选择Merchant IDs 在右上角点击"+&q ...
- iOS应用内置付费详尽攻略
我最近正在制作的一个程序里面,我就决定先把程序免费(其中只包含一个故事),然后把更多的故事放在in-app purchase里面.在这篇教程里面,你将会学到如何使用程序内置付费来解琐本地程序里面的内容 ...
- iOS开发之内购完全笔记(您已购买此 App 内购买项目。此项目将免费恢复。)
1.内购流程 1.在 AppStore 中创建相应的物品,创建内购沙盒测试账号 2.客户端从后台获取相应的物品 ID (当然也可以再客户端写死,但后期扩展性就受限制了) 3.依据相应的物品 ID 请求 ...
- 【IOS】 In App Purchase 内置购买 总结
上一个项目用到了In App Purchase,发现现在大家对这个挺关注的,把上次写的总结贴出来给大家看一下,希望对大家有点帮助! 两种方案 一, 我的程序具体步骤 1 添加Storekit.Fram ...
最新文章
- asp网络编程:用ASP打开远端MDB文件的方法
- 安卓错误Emulator: error: x86 emulation currently......
- java qt jni_java JNI 实现原理 (二) Linux 下如何 load JNILibrary
- C++(Goto使用实例)
- 关于mount --bind的理解。
- Spring(七)持久层
- VC/MFC 进程间通信方法总结
- 2019-02-26-算法-进化(字符串转换成整数)
- Eclipse查找文件存储路径
- swift网络编程入门应用:天气预报
- java swt 文件选择,Java SWT文件对话框中的文件多选
- 最小的单片机:ATtiny85
- 计算机桌面隔几秒闪一下,电脑最近怎么老是隔一段时间显示器就要闪一下
- 全球及中国电动汽车电池市场产能规划及投资份额预测报告2021-2027年版
- 毕业一年一点不平凡经历,不平常的感受,有了不平常的自信
- js 身份证号隐藏中间数字
- Java web(简单的servlet计算器)网页计算器
- Sql Server数据库的备份和恢复措施
- 计算机冗余,惯性导航计算机系统冗余设计
- 细数抖音电商的7问题
热门文章
- 二元函数泰勒公式例题_高等数学入门——二元函数可微性的判断方法总结
- 计算机必记快捷键,电脑常用的快捷键,记住这些快捷键让你瞬间变成电脑高手...
- 计算机专业哪家强,计算机专业哪家强?这4所大学水平一流,网友:都是“大佬”级别...
- html重绘text,使用DrawText重绘C++
- think php框架 跨域,ThinkPHP框架实现session跨域问题
- ajax里怎么添加跳转地址,Ajax中window.location.href无法跳转的解决办法
- 安徽工业大学计算机学院推免名单,2021年安徽工业大学拟录取推免研究生名单公示...
- 腾讯地图api_数据库API接口的类型及应用场景
- CentOS7的/tmp目录自动清理规则(转)
- 【dp 贪心】bzoj4391: [Usaco2015 dec]High Card Low Card