2012-07-14 1 views
7

안녕 내가 인앱-구매에서 복원 기능을 구현해야 할 때이 버튼 "복원"을 호출하는 방법paymentQueue : (SKPaymentQueue *) 큐 updatedTransactions : restoreCompletedTransactions

을 만든 위해 (NSArray를 *) 트랜잭션은 호출되지 않습니다
-(void)restorePurchasedProductsWithProductId:(NSString*)prodID 
{ 
    _productIdsArray = [[NSMutableArray alloc] init]; 
    productID = [prodID retain]; 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
} 

사과 아이디의 비밀번호를 입력하는 팝업이 나타납니다. 그런 다음 아무 일도 일어나지 않습니다.

가 나는

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

그래서 내가이

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

     } 
    } 
} 

좋아했다 부르는 선가 그러나 문제는 위의 방법은 어느 쪽이

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 

를 호출하지입니다

는 또한 필요한 프로토콜이 위임 방법은 복원 프로세스를 요구하지 않는 이유

어떤 몸이 좀 도와 줄래을 포함했다. 테스트 계정으로 테스트 중입니다.

답변

11

paymentQueueRestoreCompletedTransactionsFinished:paymentQueue: restoreCompletedTransactionsFailedWithError:을 구현하는 클래스가 지불 대기열의 옵저버로 등록되어 있는지 확인해야합니다.

당신이 UIViewController에서이 코드를 작성한 경우, viewDidLoad이 추가 시도 :

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

viewDidDisappear에서을 :

[[SKPaymentQueue defaultQueue] removeTransactionObserver:self]; 
1
나는 또한 같은 문제에 직면하고있다

;

[[SKPaymentQueue defaultQueue] finishTransaction:transaction] 

방법은 즉시 구현되지 않은 :

연구 & 수정 후, 나는 깨달았다.

일반적으로 transaction.transactionReceipt를 확인하고 내 서버로 보내면 결국 트랜잭션을 끝내기 위해 콜백을 보냅니다. 마지막으로, 마침 거래를 즉시 호출하지 않는 문제를 이해했습니다. 코드를 변경하면 내 앱이 작동합니다.

흥미로운 부분은 내가 샌드 박스 환경에서 테스트 할 때 모든 것이 잘 작동한다는 것입니다. 그러나, AppStore 애플 리케이션에서 잘 작동하지 않았다. 내가이 수정을했을 때, 나의 문제가 해결되었다.