要把大象装冰箱,总共分三步——宋丹丹
这篇文章不是一个应用内购买的完整教程,而是讲述了内购买的核心编程步骤,以一个清晰简洁的视角,帮助读者理解应用内购买。编写内购买代码之前,需要在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