实现iOS应用内购买的三个核心步骤

要把大象装冰箱,总共分三步——宋丹丹

这篇文章不是一个应用内购买的完整教程,而是讲述了内购买的核心编程步骤,以一个清晰简洁的视角,帮助读者理解应用内购买。编写内购买代码之前,需要在iTunes Connect中创建商品,方法请自行google。现在假设我们在iTunes Connect中创建了一个商品。

第一步,从苹果服务器获得商品信息。

你说“我知道自己的商品信息”,不好意思,此步骤是必须的,后面会用到代表商品的变量。

if ([SKPaymentQueue canMakePayments])
    {
        SKProductsRequest *request = [[SKProductsRequest alloc]
                                      initWithProductIdentifiers:
                                      [NSSet setWithObject:productID]];//productID是一个NSString变量,可从iTunes connect查询商品来获得
        request.delegate = self;
        
        [request start];
    }

上面的代码创建并发送了一个获得商品信息的请求。苹果的服务器返回商品信息时,会触发代理方法。
#pragma mark -
#pragma mark SKProductsRequestDelegate

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    
    NSArray *products = response.products;
    
    if (products.count != 0)
    {
        _product = products[0];//_product是一个SKProduct变量
    } else {
        NSLog(@"Product not found");
    }
    
    products = response.invalidProductIdentifiers;
    
    for (SKProduct *product in products)
    {
        NSLog(@"Product not found: %@", product);
    }
}
 我们在代理方法中将商品信息放入了一个SKProduct变量_product。 
  

第二步,创建并发送支付请求。

首先,要为交易队列找一个观察者。

[[SKPaymentQueue defaultQueue]
     addTransactionObserver:self];

然后创建一个交易,并将其加入交易队列。

SKPayment *payment = [SKPayment paymentWithProduct:_product];
[[SKPaymentQueue defaultQueue] addPayment:payment];

第三部,处理交易结果。

#pragma mark -
#pragma mark SKPaymentTransactionObserver

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState) {
            case SKPaymentTransactionStatePurchased:
                //购买成功,在这写入后续代码
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                break;
                
            case SKPaymentTransactionStateFailed:
		//购买失败,在这写入后续代码
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
            {
		//在这写入恢复内购买的代码
                [[SKPaymentQueue defaultQueue]
                 finishTransaction:transaction];
                break;
            }
            default:
                break;
        }
    }
}

当苹果的服务器处理完交易请求后,就会将交易结果发回来,并调用上面的方法。

内购买的基本步骤到此结束。虽然还有许多事要做,比如保存购买结果,恢复购买结果等等。这些内容请查阅苹果官方文档。当你理解了基本步骤后,就如同盖房子打好了地基。后面可能还会遇到各种问题,但你都会循序渐进的将它们解决。

你可能感兴趣的:(iOS)