苹果app stroe 应用内支付(In-App Purchase)

IAP简介
IAP的全称是In-AppPurchase,应用内付费。这种业务模式允许用户免费下载试用,对应用内提供的商品选择消费,比如购买游戏道具,购买游戏等级等等。相比完全收费的应用而言,应用内付费给用户试用的机会,不会让优秀的应用因为缺乏用户的认知而丧失消费者;而且对于开发商,也不需要为了让用户试用而单独发布一款免费的精简版本。
下面详细介绍一下应用内支付的详细步骤:
1.点开应用
2.点击manager in-app purchases

点开应用,点击manager in-app purchases.png

3.点击添加一个新的应用

点击添加一个新的应用

4.选择相应的类型

选择相应的类型

IAP里有两个关键的词,商品(Product)和交易(Transaction)。
商品可以是一种虚拟的道具,一个隐藏的关卡或者地图,但必须是直观的,可以让用户购买后直接获益的产品。IAP的商品从消费性质上分为四种:
消耗型商品,比如游戏道具,子弹,药品等等。由于这类商品可以被消耗,所以支持重复购买。苹果应用商店不保存此类商品的购买记录,如果要保存则需要开发者同步到自己的服务器上。
非消耗型商品,比如游戏关卡,隐藏地图等等。这类商品只要购买一次便可以了,苹果应用商店里每一个用户对非消耗型商品的购买都有记录,可以在不同的设备上恢复购买状态,这个恢复的过程叫做Restore。
自动重置型订阅,比如电子杂志,读物等。消费者购买这类商品时会从列表中选择一个有效期限,卖家在定义商品的时候从一群固定的选项中选择添加一个有效期,比如7天,一个月,两个月。过了有效期之后,商品的购买状态会被自动重置成未购买,要想继续获得内容则需要再次订阅。这种类型的商品和非消耗型商品一样,会在苹果商店内保存购买记录。
非自动重置型订阅,比如用户订阅电子杂志和读物报刊时需要从自定义的期限列表中选择期限,而不是苹果提供的固定选项,比如9天,一个半月或任意时间。在这种情况下,苹果商店无法根据期限来控制订阅的到期行为,所以一切都需要开发商自己编写相应的逻辑来实现。
交易是指用户对一个商品的购买行为,当用户点击购买一件商品时,一个新的付费行为就被添加到付费队列中,付费队列是一条系统线程,即使应用程序终止仍然会继续执行。
5.添加相应的应用信息

添加相应的应用信息

Reference Name 应用名字
Product ID 应用的id
添加语言和支付的名字

添加语言和支付的名字

添加相应的价格

添加相应的价格.png

添加相应的图片

添加图片

点击保存

点击保存.png

6.测试IAP的准备流程
如果你是一个注册的苹果开发者,接受了最新的苹果开发者协议,并且签署了iOS付费应用合同,那么你就可以继续IAP的测试了。
使用未越狱的设备
苹果应用商店是一个交易环境,任何用户可以在这个环境内购买应用,但如果要测试正在开发过程中的应用内付费,我们不能在真正的苹果商店里进行。苹果给开发者提供了一个用于调试购买行为的测试沙箱,它完全复制了应用商店的交易环境,但在沙箱环境中我们不能用平常的苹果帐号,而是需要用测试帐号。
在iTunesConnect的首页可以点击Manage Users进入用户管理页面,然后选择TestUser 来创建测试帐号。根据苹果开发者的最新谢意,创建测试帐号必须使用一个真实的Email地址,而且密码必须是符合规范的,测试账号需要在邮件里激活后才可以使用。这里创建的帐号可以用来购买开发过程中的应用内付费,但必须记住,测试帐号不能用来登陆真正的应用商店并在产品环境中进行购买行为,否则你的 iTunes帐号将有可能被停用。
7、实现ios开发
在App Delegate中添加Observer
[[ECPurchase shared] addTransactionObserver];
.设置ECPurchase的product delegate(产品列表代理),transaction delegate(购买结果代理),验证方式
[[ECPurchase shared] setProductDelegate:self];
[[ECPurchase shared] setTransactionDelegate:self];
[[ECPurchase shared] setVerifyRecepitMode:ECVerifyRecepitModeiPhone];
.请求商品列表
[[ECPurchase shared] requestProductData:identifiers];
实现代理函数绘制UI
-(void)didReceivedProducts:(NSArray *)products;
.购买商品
[[ECPurchase shared] addPayment:proIdentifier];
.确认结果
如果不需要收据认证实现代理函数
-(void)didFailedTransaction:(NSString *)proIdentifier;
-(void)didRestoreTransaction:(NSString *)proIdentifier;
-(void)didCompleteTransaction:(NSString *)proIdentifier;
否则实现代理函数
-(void)didCompleteTransactionAndVerifySucceed:(NSString *)proIdentifier;
-(void)didCompleteTransactionAndVerifyFailed:(NSString *)proIdentifier withError:(NSString *)error;
运行内部支付demo,点击测试:

运行内部支付demo,点击测试:

内部支付的逻辑:

内部支付的逻辑

iOS App 向 Developer Server 发送请求,获得一份产品列表(一般都是 Product ID)。
获取产品列表需要 iOS App 主动获得,这样就可以在不升级iOS的情况下添加产品。
Developer Server 返回给 iOS App 包含 Product ID 的列表。
iOS App 向 App Store 发送请求,期望获得到产品的信息。
App Store 返回本地化产品信息。
所谓本地化的产品信息指的是会根据目前所在的地区返回所在地区的描述信息。
比如在中国地区,如果该产品有中文的描述,返回中文的描述,
而如果你在美国,则返回的是英文的描述。
iOS App 把返回的产品信息显示给用户(iOS App 的 Store 界面)
这个就是商店界面了,包括,在前面请求希望获得产品信息的时候的等待界面。
用户选择某个产品。
iOS App 向 App Store 发送支付请求。
App Store 处理支付请求并返回交易完成信息。
iOS App从返回交易完成的信息中获得数据,并发送至 Developer Server。
Developer Server 记录数据,并进行审查。
App Store Server 对于消耗型的商品,是不会保存购买记录的,所以需要 Developer 同步记录到 Developer Server 上。
App Store Server 对于非消耗性的商品,在 App Store Server 是有记录可以查询的,可以通过 Restore 的方法恢复。
而恢复的交易信息是新的,但是包含原始的交易信息。
因此用户试图购买已经买过的非消耗性的商品时,iOS App 收到一个常规的交易信息,而不是恢复的交易信息,
只不过用户不会被再次付费。因此程序应该把这类交易和原始的交易同等对待。
其他订阅型的暂时没有测试。
Developer Server 这边需要做逻辑的严格审查,看是否合理。
Developer Server 将数据发给 App Store来验证该交易的有效性。
App Store对收到的数据进行解析,返回该数据和说明其是否有效的标识。
App Store 有效性的验证地址会根据是测试还是实际购买有所不同
测试:也称为Sandbox环境 https://sandbox.itunes.apple.com/verifyReceipt
Developer Server 读取返回的数据,确定用户购买的内容。
Developer Server 将购买的内容传递给 iOS App。
iOS App 根据购买最早的结果进行处理。
In App Purchase的注意点
1.确保你所用来创建Profile的Apple ID启用了In App Purchase功能。
2.确保你的Apple ID的identifier中没有*。
3.确保你的bundle ID和你的Apple ID的identifier一致。
4.确保你的product ID是唯一的。
5.确保你在应用程序中所请求的product ID与你在iTunes Connect里添加的一致。
6.确保你勾选了Clear for Sale。
7.在测试的时候你可能需要等待你的商品添加入Apple的测试沙盒,这个过程可能需要几个小时。
8.在你第一次上传应用程序的时候,确保勾选了需要绑定至该应用程序的商品列表。
9.确保你是在SDK3.0以上编写的。
备注:
1、图片保存到本地更清晰;
  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓