2014-09-29 3 views
-1

나는 App App Purchase에 대해 아래 코드를 작성했지만 앱 스토어 사용자 ID와 비밀번호를 입력하라는 메시지가 표시되면 해당 항목이 표시됩니다. - (void) paymentQueue : (SKPaymentQueue *) queue updatedTransactions : (NSArray *) SKPaymentTransactionState가 3 회 또는 임의의 횟수로 두 번씩 처리 된 트랜잭션. 지금 당장 나와 매우 이상한 상황입니다. 나는 또한 IAP 라이브러리로 시도했지만 같은 결과를 얻었습니다. In App Purchase는 동일한 코드를 사용하지만 월간 구독 제품을 사용하지 않는 비 소비 제품에서 작동합니다.월별 구독 제품 iOS에서 앱 구매가 작동하지 않음

아래 코드에서 "30"은 제품 ID입니다.

-(void)requestProducts{ 
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"30"]]; 
request.delegate = self; 
[request start]; 
} 



-(void) productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 
NSLog(@"%@", response.products); 

[self performSelector:@selector(startTransaction:) withObject:[response.products objectAtIndex:0] afterDelay:1]; 
} 

-(void)startTransaction:(SKProduct *)product{ 
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
SKPayment *payment = [SKPayment paymentWithProduct:product]; 
[[SKPaymentQueue defaultQueue] addPayment:payment]; 
} 

- (void) failedTransaction: (SKPaymentTransaction *)transaction{ 
NSLog(@"failedTransaction"); 
if (transaction.error.code != SKErrorPaymentCancelled) 
{ 
    NSLog(@"Cancelled"); 
    // Optionally, display an error here. 
}else if (transaction.error.code != SKErrorPaymentInvalid){ 
    NSLog(@"Invalid"); 
}else if (transaction.error.code != SKErrorPaymentNotAllowed){ 
    NSLog(@"Not Allowed"); 
}else if (transaction.error.code != SKErrorClientInvalid){ 
    NSLog(@"ClientInvalid"); 
}else if (transaction.error.code != SKErrorStoreProductNotAvailable){ 
    NSLog(@"ProductNotAvailable"); 
}else if (transaction.error.code != SKErrorUnknown){ 
    NSLog(@"Unknown"); 
} 
[[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void) restoreTransaction: (SKPaymentTransaction *)transaction{ 
NSLog(@"restoreTransaction"); 
//[self recordTransaction: transaction]; 
//[self provideContent: transaction.originalTransaction.payment.productIdentifier]; 
[[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void) completeTransaction: (SKPaymentTransaction *)transaction{ 
NSLog(@"completeTransaction"); 
// Your application should implement these two methods. 
//[self recordTransaction: transaction]; 
//[self provideContent: transaction.payment.productIdentifier]; 
// Remove the transaction from the payment queue. 
[[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (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]; 
      break; 
     default: 
      break; 
    } 
} 
} 

답변

0

귀하는 "월간 구독 제품"을하고 있다고 말했습니까? 이것이 자동 갱신 가능한 IAP 인 경우 새 테스트 사용자의 각 구매는 5 분마다 5 ~ 6 건의 갱신 트랜잭션을 생성합니다. 30 분을 기다리면 updatedTransactions에 대한 5 또는 6 번 호출을 기대할 수 있습니다.

+0

iTunes 사용자 이름/암호를 입력하라는 메시지가 표시되면 updatedTransactions 메서드 호출을 처리 할 수있는 방법이 있습니까? –

관련 문제