2011-09-29 80 views
1

我正在實施應用內購買。我在執行存儲工具包的委託方法時遇到了問題。如何從用戶定義方法返回到委託方法

這是我的代碼如下:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 

    NSLog(@"Received products results..."); 
    NSLog(@"response.products.......%@",response.products); 
    self.products = response.products; 
    self.request = nil;  

    proUpgradeProduct = [_products count] == 1 ? [[_products objectAtIndex:0] retain] : nil; 

    if (proUpgradeProduct) 
    { 
    NSLog(@"Product title: %@" , proUpgradeProduct.localizedTitle); 
    NSLog(@"Product description: %@" , proUpgradeProduct.localizedDescription); 
    NSLog(@"Product price: %@" , proUpgradeProduct.price); 
    NSLog(@"Product id: %@" , proUpgradeProduct.productIdentifier); 
    } 

    NSLog(@"products.....%@",_products); 

    for (NSString *invalidProductId in response.invalidProductIdentifiers) 
    { 
    NSLog(@"Invalid product id: %@" , invalidProductId); 
    } 


    [[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:_products];  

    [self buyProductIdentifier:proUpgradeProduct.productIdentifier]; 

} 


- (void)buyProductIdentifier:(NSString *)productIdentifier { 
    if ([SKPaymentQueue canMakePayments]) 
    { 
    NSLog(@"Buying %@...", productIdentifier); 

    SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 
    } 
    else 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"StoreKit" message:@"You are not authorised to purchase from AppStore" 
                 delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
     [alert show]; 
     [alert release]; 
    } 

} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       [self failedTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
      default: 
       break; 
     } 
    } 
} 

Control未轉移到- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions(void)buyProductIdentifier:(NSString *)productIdentifier - 方法。

我該怎麼辦?

回答

0
  1. 您應該設置SKPaymentTransactionObserverdefaultQueue的:

    [[SKPaymentQueue defaultQueue] addTransactionObserver:manager];

  2. 方法paymentQueue:updatedTransactions:將被調用後才能StoreKit並結束與交易(S)工作的defaultQueue:當用戶取消或購買(或交易已恢復)的產品。

+0

我應該在哪寫[[SKPaymentQueue defaultQueue] addTransactionObserver:self];?我已經寫在(void)buyProductIdentifier:(NSString *)productIdentifier – Ketan

+0

這裏我得到的問題是,當我點擊第三個付款按鈕,我正在通過四種方法調用.. – Ketan