다음 작업을 수행하려고합니다.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;
}
}
}
}
아마도 새로운 iTunes Connect 사용자로 테스트해야합니다. 복원이 중복 트랜잭션을 복원하는 것 같습니다. –
그게 전부입니다. 나는 사용자가 하나의 트랜잭션을 선택하여 복원하는 대신 복원하는 것을 허용하려고합니다. 선택한 제품을 모두 대신 지불 대기열에로드하도록 RestoreCompletedTransactions를 강제 설정하려면 어떻게합니까? – user2986119
프로덕션 또는 개발 중 테스트 중이십니까? –