苹果App Store应用内支付(In-App Purchase)
IAP简介

IAP的全称是In-App Purchase,应用内付费。这种业务模式允许用户免费下载试用,对应用内提供的商品选择消费,比如购买游戏道具,购买游戏等级等等。相比完全收费的应用而言,应用内付费给用户试用的机会,不会让优秀的应用因为缺乏用户的认知而丧失消费者;而且对于开发商,也不需要为了让用户试用而单独发布一款免费的精简版本。
 
下面详细介绍一下应用内支付的详细步骤:
 
1.点开应用,点击manager in-app purchases
 
2.点击添加一个新的应用
 
 
3.选择相应的类型
 
 
IAP里有两个关键的词,商品(Product)和交易(Transaction)。
商品可以是一种虚拟的道具,一个隐藏的关卡或者地图,但必须是直观的,可以让用户购买后直接获益的产品。IAP的商品从消费性质上分为四种:
 
消耗型商品,比如游戏道具,子弹,药品等等。由于这类商品可以被消耗,所以支持重复购买。苹果应用商店不保存此类商品的购买记录,如果要保存则需要开发者同步到自己的服务器上。
非消耗型商品,比如游戏关卡,隐藏地图等等。这类商品只要购买一次便可以了,苹果应用商店里每一个用户对非消耗型商品的购买都有记录,可以在不同的设备上恢复购买状态,这个恢复的过程叫做Restore。
自动重置型订阅,比如电子杂志,读物等。消费者购买这类商品时会从列表中选择一个有效期限,卖家在定义商品的时候从一群固定的选项中选择添加一个有效期,比如7天,一个月,两个月。过了有效期之后,商品的购买状态会被自动重置成未购买,要想继续获得内容则需要再次订阅。这种类型的商品和非消耗型商品一样,会在苹果商店内保存购买记录。
非自动重置型订阅,比如用户订阅电子杂志和读物报刊时需要从自定义的期限列表中选择期限,而不是苹果提供的固定选项,比如9天,一个半月或任意时间。在这种情况下,苹果商店无法根据期限来控制订阅的到期行为,所以一切都需要开发商自己编写相应的逻辑来实现。
交易是指用户对一个商品的购买行为,当用户点击购买一件商品时,一个新的付费行为就被添加到付费队列中,付费队列是一条系统线程,即使应用程序终止仍然会继续执行。
 
4.添加相应的应用信息
 
 
Reference Name 应用名字
Product ID 应用的id
添加语言和支付的名字
 
添加相应的价格
 
添加相应的图片
 
点击保存
 
5.测试IAP的准备流程
 
如果你是一个注册的苹果开发者,接受了最新的苹果开发者协议,并且签署了iOS付费应用合同,那么你就可以继续IAP的测试了。
 
使用未越狱的设备
苹果应用商店是一个交易环境,任何用户可以在这个环境内购买应用,但如果要测试正在开发过程中的应用内付费,我们不能在真正的苹果商店里进行。苹果给开发者提供了一个用于调试购买行为的测试沙箱,它完全复制了应用商店的交易环境,但在沙箱环境中我们不能用平常的苹果帐号,而是需要用测试帐号。
在iTunesConnect的首页可以点击Manage Users进入用户管理页面,然后选择Test User来创建测试帐号。根据苹果开发者的最新谢意,创建测试帐号必须使用一个真实的Email地址,而且密码必须是符合规范的,测试账号需要在邮件里激活后才可以使用。这里创建的帐号可以用来购买开发过程中的应用内付费,但必须记住,测试帐号不能用来登陆真正的应用商店并在产品环境中进行购买行为,否则你的iTunes帐号将有可能被停用。
 
 
 
6.实现ios开发
 
测试代码:http://easymorse-iphone.googlecode.com/svn/trunk/PurchaseTest/
 
在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,点击测试:
 
 
内部支付的逻辑:
 
 
iOS App 向 Developer Server 发送请求,获得一份产品列表(一般都是 Product ID)。
获取产品列表需要 iOS App 主动获得,这样就可以在不升级iOS的情况下添加产品。
Developer Server 返回给 iOS App 包含 Product ID 的列表。
iOS App 向 App Store 发送请求,期望获得到产品的信息。

苹果App Store开发者帐户从申请,验证,到发布应用(4)的更多相关文章

  1. 苹果App Store开发者帐户从申请,验证,到发布应用(1)

    app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...

  2. 苹果App Store开发者帐户从申请,验证,到发布应用(2)

    app store付费 上面已经介绍了app store id的注册了,下面在注册基础上,介绍一下app store的付费.   在上面注册成功之后,会收到一封邮件.   1.收到邮件Thank Yo ...

  3. 苹果App Store开发者帐户从申请,验证,到发布应用(3)

    应用上架的流程和操作步骤 下面主要介绍一下,上架应用相关流程和相关的操作步骤:   1.登录itunes,https://itunesconnect.apple.com/WebObjects/iTun ...

  4. [Apple开发者帐户帮助]八、管理档案(3)创建App Store配置文件

    您可以创建自己的App Store配置文件,以便在将应用程序上载到App Store Connect时使用. 有关完整的App Store工作流程,请转到通过 Xcode帮助中的App Store分发 ...

  5. [Apple开发者帐户帮助]九、参考(1)证书类型

    该证书类型有助于开发者帐户和Xcode的标识证书. 类型 目的 APNs Auth Key 生成服务器端令牌,以替代通知请求的证书. Apple推送服务 在通知服务和APN之间建立连接,以向您的应用提 ...

  6. [Apple开发者帐户帮助]二、管理你的团队(6)找到您的团队ID

    该组ID是已分配给您的团队苹果产生了独特的10个字符的字符串.您需要为某些活动提供您的团队ID, 例如将您的应用程序转移到App Store Connect中的其他开发人员. 在您的开发者帐户中,单击 ...

  7. 发布iOS应用程序到苹果APP STORE完整流程

    参考:http://blog.csdn.net/mad1989/article/details/8167529(xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)) http ...

  8. APP被苹果App Store拒绝的79个原因【转】

    作为iOS开发者,估计有很多都遇到过APP提交到App Store被拒,然后这些被拒的原因多种多样,今天dApps收集了常见的被拒的原因,以便更多开发者了解. APP被苹果APPStore拒绝的各种原 ...

  9. Windows8 App Store 开发者会关心的文档

    在远程计算机上从 Visual Studio 调试和测试 Windows 应用商店应用程序 http://msdn.microsoft.com/zh-cn/library/windows/apps/h ...

随机推荐

  1. public <T> void method(T var)

    今天项目中遇到这样一个方法: public <T> void method(T var) 不太明白什么意思,后来搜索下几篇文章,自己总结一下,和大家分享. 先看例子: 1.static v ...

  2. tiny210 u-boot 网络ping不通主机解决方案

    站在巨人的肩膀上: http://blog.csdn.net/liukun321/article/details/7438880 http://www.arm9home.net/read.php?ti ...

  3. AI 人工智能 探索 (六)

    这次我为 角色 attribute 添加了 多个属性 其中 att 是 好人 坏人 等属性, 显然 数字不同 就要打起来. grade 是智商属性 ,今天先做了 3的智商.也就是小兵智商.碰到就打 逃 ...

  4. HDU 3861 The King’s Problem(tarjan连通图与二分图最小路径覆盖)

    题意:给我们一个图,问我们最少能把这个图分成几部分,使得每部分内的任意两点都能至少保证单向连通. 思路:使用tarjan算法求强连通分量然后进行缩点,形成一个新图,易知新图中的每个点内部的内部点都能保 ...

  5. java Future模式

    Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Futu ...

  6. 转:Selenium2.0介绍——WebDriver两种驱动浏览器的方式.

    如果之前熟悉Selenium RC,理解了Selenium RC是如何工作的,那么,当第一次接触Selenium WebDriver的时候,看到WebDriver居然可以不需要指定远端服务器的IP地址 ...

  7. Django: 之数据库导入、迁移和联用

    Django 数据库导入 从网上下载的一些数据,excel表格,xml文件,txt文件等有时候我们想把它导入数据库,应该如何操作呢? 以下操作符合 Django版本为 1.6 ,兼顾 Django 1 ...

  8. JSP标准标签库(JSTL)--函数标签库 fn

    和String的方法类似,就是对String的一种封装. No. 函数标签名称 描述 1 ${fn:contains()} 查询某字符串是否存在,区分大小写 2 ${fn:containsIgnore ...

  9. Android .mk文件语法解析

    下面是MTK-AndroidFM模块Android .mk代码内容: ifeq ($(MTK_FM_SUPPORT),yes) LOCAL_PATH:= $(call my-dir) include ...

  10. FusionCharts使用问题及解决方法(二)-FusionCharts常见问题大全

    在上文中,我们介绍了FusionCharts常见问题(FAQ)的解决方法,本文将一同讨论FusionCharts使用者面临的一些复杂问题的解决方法. 如何启用JavaScript调试模式? 要启用Ja ...