2014-10-06 3 views
0

다음 작업을 수행하려고합니다.SKRestoreCompletedTransactions를 호출하면 모든 트랜잭션이 복원됩니다.

이전 구매를 얻지 만 사용자가 선택한 지불 대기열에만로드하십시오. 사용자가 여러 개의 복원 된 구매 항목을 다운로드하는 것을 원하지 않습니다. Apple은 복원 할 항목을 사용자가 결정하도록 허용하는 것이 좋습니다. 이것이 내가 갇혀있는 곳입니다. 지금 사용자가 복원을 선택할 때 RestoreCompletedTransactions을 호출 할 수있게 허용하고 있지만 이는 선택한 지불 대기를 지워야 함을 의미합니다. 이것은 불필요한 절차처럼 보이고 해결할 수있는 것보다 더 많은 문제를 일으 킵니다. 이 작업을 수행하는 쉬운 방법이있을 것이라고 확신하지만 솔루션을 찾기 위해 몇 시간 동안 웹을 트롤링했으며 Apple 문서는 이에 대한 합리적인 절차를 제공하지 않습니다. 아무도 내게 어떤 방향을 제시 할 수 있다면 고맙겠습니다.

내 구매 비 소모품은 정상적으로 작동하며 정상적으로 복원됩니다.

그건 그렇고 - 애플이 호스팅 한 콘텐츠!

- (IBAction)buyProduct:(id)sender { //checked!! 

NSLog(@"Performing in-app purchase: %@",_product); 

SKPayment *payment = [SKPayment paymentWithProduct:_product]; 
[[SKPaymentQueue defaultQueue] addPayment:payment]; 

} 

- (IBAction)Restore:(id)sender { 

NSLog(@"Performing in-app restore_product: %@",_product); 
NSLog(@"Performing in-app restore_productID: %@",productID); 

[self restoreThePurchase]; 

} 

- (BOOL)restoreThePurchase { 

// restore the purchase 
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions]; 

return YES; 
} 

#pragma mark - 
#pragma mark SKPaymentTransactionObserver methods 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 

for (SKPaymentTransaction *transaction in transactions) { 
    switch (transaction.transactionState) { 
     case SKPaymentTransactionStatePurchased: { 

      NSLog(@"Transaction State Purchased"); 


      [[SKPaymentQueue defaultQueue] startDownloads:transaction.downloads]; 
      [self completeTransaction:transaction]; 

      break; 
     } 

     case SKPaymentTransactionStateFailed: { 
      // transaction didn't work 
      [self displayAlertViewWithMessage:@"There was a problem with your purchase. Please try again later."]; 
      break; 
     } 

     case SKPaymentTransactionStateRestored: { 
      // purchase has been restored 

      transactionRestored = [[NSMutableArray alloc] init]; 

      NSLog(@"received restored transactions: %lu", (unsigned long)queue.transactions.count); 

      for (SKPaymentTransaction *transaction in queue.transactions) 
      { 
       { 
        NSString *aProductID = transaction.payment.productIdentifier; 
        [transactionRestored addObject:aProductID]; 

       } 

       NSLog(@"TransactionRestoredArray in PQRCTF : %@", transactionRestored); 
       NSLog(@"Restore indentifier in PQRCTF : %@", transaction.payment.productIdentifier); 
       NSLog(@"ProductID in PQRCTF : %@", productID); 
       NSLog(@"Transaction in PQRCTF : %@", transaction); 
       NSLog(@"OrignianalTransaction in PQRCTF : %@", transaction.originalTransaction); 
       NSLog(@"OrignianalTransaction in PQRCTF : %@", transaction.payment.productIdentifier); 


       if ([transactionRestored containsObject:productID]) { 

        NSLog(@"Was purchased before!in PQRCTF"); 
        //[self restoreTransaction:transaction]; 

       } else { 

        [[SKPaymentQueue defaultQueue]finishTransaction:transaction]; 

       } 


      break; 

     } 

     case SKPaymentTransactionStatePurchasing: { 
      // currently purchasing 
      break; 
     } 

     default: 
      break; 
    } 
} 
} 
} 
+0

아마도 새로운 iTunes Connect 사용자로 테스트해야합니다. 복원이 중복 트랜잭션을 복원하는 것 같습니다. –

+0

그게 전부입니다. 나는 사용자가 하나의 트랜잭션을 선택하여 복원하는 대신 복원하는 것을 허용하려고합니다. 선택한 제품을 모두 대신 지불 대기열에로드하도록 RestoreCompletedTransactions를 강제 설정하려면 어떻게합니까? – user2986119

+0

프로덕션 또는 개발 중 테스트 중이십니까? –

답변

2

의심되는 것은 중복 구매로 iTunes Connect 테스트 사용자로 테스트하는 것입니다. 이 문제는 프로덕션에서는 발생하지 않지만 테스트 중에는 많은 개발자가 필요합니다. 테스트 사용자에 대해 동일한 제품을 여러 번 구입할 수 있고 이러한 구매가 테스트 사용자 계정에 추가되므로 복원을 시도 할 때 모든 단일 구매가 복원되어 응용 프로그램이 다운 될 수 있습니다.

현재는 no way to clear purchases from a Test User입니다. 즉, 특정 구성으로 새 테스트 사용자를 만드는 것이 가장 좋습니다.이 시나리오에서는 사용자가 특정 식별자로 제품을 구입했다고 구성합니다. 이 사용자와 구매를 시도하는 신규 사용자와의 직접적인 관계가되도록 특정 제품 식별자가있는 테스트 사용자의 이름을 지정할 수 있습니다.

그래서 새 사용자를 설정하고 코드를 다시 테스트하십시오.

+0

감사합니다 다니엘 귀하의 조언을 도왔습니다! 나는 또한 다운로드가 보류 중이었습니다. 해당 사용자를 샌드 박스 테스트 사용자에서 삭제하고 테스트 iPhone을 재설정하고 새 사용자를 생성하면 구매 및 복원이 제대로 작동하는 것 같습니다. 다른 문제가있어서 다시 게시 할 것이지만 도움을 주셔서 다시 한 번 감사드립니다! – user2986119

관련 문제