2011-09-29 2 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; 
     } 
    } 
} 

제어 (void)buyProductIdentifier:(NSString *)productIdentifier- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions로 이동되지 않습니다

여기에 다음과 같이 내 코드입니다.

어떻게해야합니까?

답변

0
  1. 당신은 SKPaymentTransactionObserverdefaultQueue의를 설정해야합니다

    [[SKPaymentQueue defaultQueue] addTransactionObserver:manager];

  2. 방법 paymentQueue:updatedTransactions:이에 거래 (들) 작업 종료 않았다 후에 만 ​​StoreKit를 호출 할 것이다 defaultQueue : 사용자가 취소되거나 구입했을 때 (또는 트랜잭션이 복원 됨).

+0

여기서 [[SKPaymentQueue defaultQueue] addTransactionObserver : self];를 써야합니까? 나는이 (무효) buyProductIdentifier에서 작성했습니다 : (NSString *) productIdentifier – Ketan

+0

여기 내가 세 번째 지불 버튼을 클릭하면 내가 네 가지 방법으로 전화 받고있어 문제가 점점 .. – Ketan

관련 문제