나는 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;
}
}
}
iTunes 사용자 이름/암호를 입력하라는 메시지가 표시되면 updatedTransactions 메서드 호출을 처리 할 수있는 방법이 있습니까? –