Sla*_*ast 1 in-app-purchase ios
我正在尝试执行以下操作;
获取之前的购买,但只加载到用户选择的支付队列中。我不希望用户下载多个恢复的购买。Apple 建议允许用户决定要恢复的内容,这就是我遇到的问题。目前,我允许RestoreCompletedTransactions在用户选择恢复时被调用,但这意味着我必须清除选定的支付队列。这似乎是一个不必要的过程,导致的问题比它解决的问题还多。我确信有一种简单的方法可以做到这一点,但我已经在网上搜索了数小时以寻找解决方案,而 Apple 文档并没有为此提供任何合理的程序。如果有人可以在这里给我一些指导,我将不胜感激。
我购买的这些非消耗品工作正常,这只是让我陷入困境的恢复。
顺便说一句 - 它的 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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑您正在使用重复购买的 iTunes Connect 测试用户进行测试。这个问题永远不会在生产中发生,但在测试过程中让很多开发人员难堪。原因是您可以针对测试用户多次购买相同的产品,并且这些购买将添加到测试用户帐户中,当您尝试恢复时,每次购买都将被恢复,从而使您的应用程序陷入困境。
目前,无法清除来自测试用户的购买。这意味着最好的办法是创建一个具有特定配置的新测试用户:在这种情况下,该配置是用户购买了具有特定标识符的产品。您可以使用特定的产品标识符命名您的测试用户,以便更直接地了解尝试与该用户进行购买的新用户。
因此,设置一个新用户并再次测试您的代码。
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |