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