• 内购简单介绍
  • 配置iTunes Connect
  • iOSclient开发工作


一、内购简单介绍

1⃣️通过苹果应用程序商店有三种主要赚钱的方式:

–直接收费(与国内大部分用户的消费习惯相悖。假设直接收费,不要设置为6元)

–广告(减少用户体验,在android系统许多,在苹果系统很少)

–内购

2⃣️分类

•非消耗品(Nonconsumable)

–指的是在游戏中一次性购买并拥有永久訪问权的物品或服务。非消耗品物品可以被用户再次下载,而且可以在用户的全部设备上使用

•消耗品(Consumable)

–专为支持可消耗的物品或服务设计的,消耗品购买不可被再次下载。依据其特点。消耗品不能在用户的设备之间跨设备使用,除非自己定义服务在用户的账号之间共享这些信息

•下面三种类别在iBooks中使用,眼下iBooks不支持大陆市场

–免费订阅(Free subscriptions)

–自己主动续费订阅(Auto-renewing subscriptions)

–非自己主动续费订阅(Nonrenewing subscriptions)



二、配置iTunes Connect

1⃣️创建自己的应用(无需累诉,没有应用怎样内购)

2⃣️创建应用内付费项目

 iOS应用程序开发之内购_ide

iOS应用程序开发之内购_ios_02

iOS应用程序开发之内购_ide_03

之后设置好价格和Product ID以及购买介绍和截图就可以,这里的Product ID是须要记住的。后面开发的时候须要。

3⃣️加入sandbox付费的測试用户

iOS应用程序开发之内购_内购_04

4⃣️填写相关的税务。银行。联系人信息

iOS应用程序开发之内购_ios_05



三、iOSclient开发

iOS应用程序开发之内购_ios_06

这幅图非常清晰的解释了内购的整个流程,主要包含下面步骤(希望大家认真看这幅图的细节,来理解内购的流程)

•请求有效的产品代号集合

•购买指定产品

•验证购买

•恢复购买

1⃣️请求有效的产品代号集合


iOS应用程序开发之内购_内购_07

// 1) 实例化产品请求
SKProductsRequest *request = [[SKProductsRequest alloc]initWithProductIdentifiers:identifiers];
// 2) 设置代理
[request setDelegate:self];

// 3) 启动请求
[request start];

iOS应用程序开发之内购_内购_07


提示:

1. 实例化请求时。必须指定有效的identifiers集合。之所以如此处理。主要是为了确保提交的内购商品真的通过了苹果的审批,处于可用状态!

2. 要想获取到准确的可用产品集合。须要通过代理方法实现

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response

3. 越狱用户无法測试内购,可是能够购买

2⃣️购买产品

1. 内购的交易过程是通过SKPaymentTransactionObserver监控的。因此须要为IAPHelper加入交易观察者:


// 加入交易观察者对象
[[SKPaymentQueue defaultQueue]addTransactionObserver:sharedInstance];


2. 因为发起交易须要使用SKProduct对象。因此须要使用字典记录全部可用的商品


NSMutableDictionary         *_productsDict;


3.交易队列回调方法


iOS应用程序开发之内购_内购_07

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions) {
// 购买完毕
if (transaction.transactionState == SKPaymentTransactionStatePurchased) {
NSLog(@"购买完毕 %@", transaction.payment.productIdentifier);

[queue finishTransaction:transaction];
} else if (transaction.transactionState == SKPaymentTransactionStateFailed) {
if (transaction.error.code != SKErrorPaymentCancelled) {
NSLog(@"交易失败: %@", transaction.error.localizedDescription);
}
}
}
}

iOS应用程序开发之内购_内购_07


 3⃣️验证购买(通常交由server来做)


  1. 接收ios端发过来的购买凭证。
  2. 推断凭证是否已经存在或验证过,然后存储该凭证。
  3. 将该凭证发送到苹果的server验证,并将验证结果返回给client。
  4. 假设须要。改动用户对应的会员权限。

考虑到网络异常情况。server的验证应该是一个可恢复的队列。假设网络失败了,应该进行重试。

与苹果的验证接口文档在​​这里​​。

简单来说就是将该购买凭证用Base64编码,然后POST给苹果的验证server,苹果将验证结果以JSON形式返回。

苹果AppStore线上的购买凭证验证地址是​​https://buy.itunes.apple.com/verifyReceipt​​​ ,測试的验证地址是:​​https://sandbox.itunes.apple.com/verifyReceipt​

4⃣️恢复购买——恢复用户购买过的全部商品


[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];