要把大象装冰箱,总共分三步——宋丹丹
这篇文章不是一个应用内购买的完整教程,而是讲述了内购买的核心编程步骤,以一个清晰简洁的视角,帮助读者理解应用内购买。编写内购买代码之前,需要在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; } } }
内购买的基本步骤到此结束。虽然还有许多事要做,比如保存购买结果,恢复购买结果等等。这些内容请查阅苹果官方文档。当你理解了基本步骤后,就如同盖房子打好了地基。后面可能还会遇到各种问题,但你都会循序渐进的将它们解决。
原文:http://blog.csdn.net/nimingzhe2008/article/details/19759589