为你的应用添加内置收费 In App Purchase

移动开发 iOS
本文讲阐述如何为你现有的应用或游戏添加程序内购买(In App Purchase)功能。阅读前提:假设了你拥有一定的iPhone SDK开发基础,和App Store实践经验。

自从09年10月16日苹果发送给所有开发者的那一封信,通知了程序内购买将可用于免费应用,我认为这也宣告了pTE版的时代结束。

成千上万的免费版的软件或游戏,将作为限制了功能的完整版免费发售,如果用户觉得有意购买,可以直接解锁完整版的功能或购买附加内容。

本文讲阐述如何为你现有的应用或游戏添加程序内购买(In App Purchase)功能。

阅读前提:假设了你拥有一定的iPhone SDK开发基础,和App Store实践经验。

你的程序需要***的Bundle ID, 如果已经发布的程序使用了通配符,那么就不能直接添加该功能。如果拥有了***的ID,请在program portal中添加你的app id,允许程序使用内购买(Enable In App Purchase)。

在设计好你的程序内购买的功能以后,首先需要定义元数据。来到iTunes Connect,在Manage Your In App Purchases中为你的程序添加一个程序内购买的商品。

上面***个部分是添加的内部信息。参考名称,ID,类型,和价格。以及各种本地化信息。

这里简单说一下类型的选择,其他信息,以及In App Purchase支持什么类型的商品请查看Getting Started with In App Purchase

Non-consumable 默认类型,非消耗品,具有持久性,特点是一次性购买,可用在所有设备。例如解锁游戏的储存关卡功能。

Consumable 消耗品,用完或使用后消失,可多次购买,不能用在所有的设备,例如游戏中的血瓶或技能书。

Subscription 订阅,和消耗品一样,除了可以在设备之间共享。

创建购买流程

大致可以分为十个步骤:

验证App Store存取权限 这样做是因为,家长控制或一些公司的配置文件阻止了此功能,使用支付队列的查询功能canMakePayments来确定用户是否有权限购买,返回值 YES代表可以购买/NO代表没有权限购买。

载入目录 载入储存在本地或者远程的商品目录。

获得商品本地化信息 程序向App Store发起查询请求获得目录中商品的本地化信息:

  1. myPossibleProds = [NSSet setWithObjects: @”myProd1”, @”myProd2”, @”myProd3, nil]; 
  2. myProdRequest = [[SKProductsRequest alloc] initWithProductIdentifiers: myPossibleProds]; 
  3. myProdRequest.delegate = myProductsRequestDelegate; [myProdRequest start];  

程序接收来自App Store的回应: -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response response包含可能的信息 response.products //产品信息 response.invapdProductIdentifiers //错误的产品标示符 错误的产品可能由下面的原因导致:

    商品未在 iTunes Connect中录入。

    商品没有选择“Cleared for Sale”。

    商品还没有传播到所有服务器。

创建商品信息 前面的步骤获得了产品信息的数组用以呈现:

  1. myAvailableProductsArray = response.products; 
  2. for (SKProduct* aProduct in myAvailableProductsArray) { 
  3. diplayTitle = aProduct.locapzedTitle; 
  4. displayDesc = aProduct.locapzedDescription; 
  5. displayPrice = aProduct.price; 

呈现商品信息 在UI中显示前面获得的信息

请求支付

  1. myPayment = [SKPayment paymentForProductIdentifier: selectedProdID userInfo: nil];  
  2. myPayment = [SKPayment paymentForProduct: selectedProduct userInfo: nil]; 

然后提交到队列

  1. defaultPaymentQueue = [SKPaymentQueue defaultQueue]; [defaultPaymentQueue addTransactionObserver: myObserver]; [defaultPaymentQueue addPayment: myPayment];  
  2. [defaultPaymentQueue addPayment: myRequest];  
  3. - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 

验证支付的事务

  1. for(SKPaymentTransaction *aTransaction in transactions) {  
  2.        switch (aTransaction.transactionState )  
  3.            { 
  4.             // 商品进入购买流程 
  5.             case SKPaymentTransactionStatePurchasing: ... break;  
  6.             // 成功购买商品  
  7.             case SKPaymentTransactionStatePurchased: ... break;  
  8.             // 已经购买过该商品  
  9.             case SKPaymentTransactionStateRestored: ... break;  
  10.             // 用户取消交易  
  11.             case: SKPaymentTransactionStateFailed ... break;  
  12.            } 

 

    Used to vapdate e-commerce transaction

    Cryptographically signed chunk of data

    Contains information about the purchase

    Can vapdate using Web-based API

收到交易回执以后可以传送到你的服务器处理该交易。

你的服务器可以向苹果发送交易验证信息。 苹果的交易验证地址:https://buy.itunes.apple.com/verifyReceipt 验证数据格式:{ receipt-data : &helpp;} 苹果的返回值如果是{ status : 0 } 那么交易是正确,如果返回任何其他值 { status : any_other_value } 交易就是不成立。 你的服务器收到苹果的验证成功信息以后,返回给应用程序类似于解锁功能等消息。

解锁内置物品火提供远程存取地址 需要注意的地方

    用户可能随时退出程序。

    Store Kit 的交易队列是持久化的。

    交易是持久化的。

    验证存取。

    移除交易。

 

  1. [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 

储存购买 需要将非消耗的购买记录在服务器上,以供用户更换设备或删除程序以后重新安装时再次解锁功能。

提供物品恢复 前面的代码中,已经购买过该商品的处理就是直接解锁。 defaultPaymentQueue = [SKPaymentQueue defaultQueue]; [defaultPaymentQueue restoreCompletedTransactions];

测试沙盒环境

只供给测试用户,并且设备上才有效,不能使用模拟器测试。

可以为每个国家的商店添加测试帐号。

不能用来测试其他的iTunes Store特性。

需要为每个测试添加***的email地址,可以考虑使用+

payam+usa@example.com—测试美国的商品

payam+uk@example.com—测试英国的商品

payam+jp@example.com—测试日本的商品

测试步骤,需要在设备的设置菜单中iTunes Store登出原有帐户。

然后不要在设置菜单中登录测试帐号,而是直接打开需要测试的程序进行测试。

在这之前需要在iTunes Connect的Manage Users菜单中添加In App Purchase测试用户。

财务报表

收入和应用程序同样的规则

你获得总收入的70%。

支付日程,使用税,报表等全部都一样。

报表

一样的报表格式。

贩卖的标示符栏显示物品的产品ID。

所有者标示符栏显示程序的ID。

责任编辑:闫佳明 来源: cocoachina
相关推荐

2013-09-09 16:11:16

iOS应用内置付费IAP总结

2013-09-09 13:57:27

iOS应用内置付费In-App Purc

2013-09-09 14:26:25

iOS应用内置付费In-App Purc

2012-02-22 16:02:12

2014-12-09 10:50:11

2011-04-25 09:04:14

应用商店苹果

2013-09-05 15:12:09

iOS应用内置付费In-App Purc

2013-07-05 13:48:47

App

2012-01-05 09:19:25

iOSApp应用

2012-07-30 09:41:04

Android搜索功能

2020-12-20 19:26:20

LVMFedoraLinux

2010-11-04 09:57:38

In App PurcAndroid 2.3Android

2018-01-04 16:08:13

Linux桌面启动器.desktop文件

2020-01-17 18:40:38

Python游戏代码

2013-11-05 13:19:37

设计加速

2021-10-14 08:07:33

Go 应用Prometheus监控

2013-07-30 15:24:53

App应用体验

2013-09-09 15:05:12

iOS应用内置付费IAP完全攻略

2011-04-22 11:12:42

JavaScript

2020-06-19 13:53:47

BokehPython绘图
点赞
收藏

51CTO技术栈公众号