gpt4 book ai didi

iphone - RestoreCompletedTransactions 在沙盒环境中返回不完整信息

转载 作者:行者123 更新时间:2023-12-03 18:48:00 26 4
gpt4 key购买 nike

我在开发 iPhone 应用程序时遇到了一些恢复CompletedTransactions 的问题。下面列出的所有问题都是在沙盒环境中工作时发生的。该应用程序尚未销售。它是使用在模拟器 5.0 和 5.1 中运行的 Xcode 4.3.2 开发的。我遇到的问题是:

  1. 每次应用程序启动并调用 addTransactionObserver 时,都会调用 UpdatedTransactions 并购买交易。在每次回调中,我的代码都会调用 finishTransaction: 来完成购买,但每次启动应用程序时都会发生此问题。收到完全相同购买的确认信息。
  2. 调用 [[SKPaymentQueuedefaultQueue]restoreCompletedTransactions] 将不会列出使用该帐户购买的所有非消耗品。我购买了 2 件非消耗品,每次只退回 1 件。如果我尝试购买列表中缺少的商品,我将收到一条消息,表明该商品已被购买。列表中缺少的项目不是我遇到问题 1 的项目(上面列出的)。

此时我完全陷入困境。我的应用程序依赖 AppStore 返回有关非消耗品的信息,因为我们不会将此数据保存在我们自己的服务器中。但我们需要确保 AppStoreKit 返回包含所有已购买商品的列表。不只是一些。

这是我用来测试restoreCompletedTransactions的相关代码:

- (void) paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
NSLog(@"updatedTransactions started. -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ");
NSLog(@"Number of transactions received: %d.", [transactions count]);
int count = 0;
for (SKPaymentTransaction *trans in transactions)
{
NSLog(@"Data for transaction %d: ", ++count);
NSString *transId = [trans transactionIdentifier];
switch ([trans transactionState])
{
case SKPaymentTransactionStatePurchasing:
NSLog(@"Purchasing transaction: %@", transId);
if (transId == nil)
{
NSLog(@" Original transaction Id: %@", [[trans originalTransaction] transactionIdentifier]);
}

NSLog(@" No action taken in update");
break;
case SKPaymentTransactionStateFailed:
NSLog(@"Purchase transaction failed for transaction %@", transId);
NSLog(@" Error %d (%@)", [[trans error] code], [[trans error] localizedDescription]);
NSLog(@" Action Taken: finish transaction.");
[queue finishTransaction: trans];
break;
case SKPaymentTransactionStatePurchased:
NSLog(@"Purchased transaction %@", transId);
NSLog(@" Purchased qty %d of product %@", [[trans payment] quantity], [[trans payment] productIdentifier]);
NSLog(@" Action: called [queue finishTransaction:] to complete purchase");
[queue finishTransaction: trans];
break;
case SKPaymentTransactionStateRestored:
{
SKPayment *paym = [trans payment];
SKPaymentTransaction *origTrans = [trans originalTransaction];
SKPayment *origPayment = [[trans originalTransaction] payment];
NSLog(@"Transaction restored: %@ with original transaction %@", transId, [[trans originalTransaction] transactionIdentifier]);
NSLog(@" TRANSACTION DATA:");
NSLog(@" purchased %d of product %@ on %@.",
[paym quantity],
[paym productIdentifier],
[[trans transactionDate] description]);

NSLog(@" ORIGINAL TRANSACTION DATA:");
NSLog(@" purchased %d of product %@ on %@.",
[origPayment quantity],
[origPayment productIdentifier],
[[origTrans transactionDate] description]);

NSLog(@" No action taken.");
break;
}

default:
NSLog(@"Unexpected transaction state: %d", [trans transactionState]);
NSLog(@" No action taken.");
break;
}
}

NSLog(@"");
NSLog(@"updatedTransactions ended. -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ");
}

- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
NSLog(@"Restore completed transactions finished.");
NSLog(@" Number of transactions in queue: %d", [[queue transactions] count]);
for (SKPaymentTransaction *trans in [queue transactions])
{
NSLog(@" transaction id %@ for product %@.", [trans transactionIdentifier], [[trans payment] productIdentifier]);
NSLog(@" original transaction id: %@ for product %@.", [[trans originalTransaction] transactionIdentifier],
[[[trans originalTransaction] payment]productIdentifier]);
}
NSLog(@"");
}

// Method to restore transactions when user clicks button in application
- (void) onRestoreCompletedTransactions:(id)sender
{
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}

最佳答案

您是否尝试在每次应用程序启动时调用restoreCompletedTransactions?如果您想要所有交易的列表,您可以发出 SKProductsRequest

 SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productsSet];
productsRequest.delegate = self;
[productsRequest start];

如果您想获取已完成的交易但未取回所有内容,请显示日志。

关于iphone - RestoreCompletedTransactions 在沙盒环境中返回不完整信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10588217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com