要把大象裝冰箱,總共分三步——宋丹丹
這篇文章不是一個應用內購買的完整教程,而是講述了內購買的核心編程步驟,以一個清晰簡潔的視角,幫助讀者理解應用內購買。編寫內購買代碼之前,需要在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;
}
}
}內購買的基本步驟到此結束。雖然還有許多事要做,比如保存購買結果,恢復購買結果等等。這些內容請查閱蘋果官方文檔。當你理解了基本步驟後,就如同蓋房子打好了地基。後面可能還會遇到各種問題,但你都會循序漸進的將它們解決。