gpt4 book ai didi

iOS StoreKit - 何时调用 - (void)restoreCompletedTransactions?

转载 作者:技术小花猫 更新时间:2023-10-29 11:14:34 29 4
gpt4 key购买 nike

我的应用程序中有很多一次性购买 IAP。用户可以购买它们。

我的问题是我正在与 Flurry 集成以跟踪实际购买而不是仅仅恢复购买,但我的 SKPaymentTransactiontransactionState 总是返回为 SKPaymentTransactionStatePurchased 而不是 SKPaymentTransactionStateRestored

显然 SKPaymentTransactionStateRestored 仅在 - (void)restoreCompletedTransactions 时调用,但我什么时候调用此方法?

我的想法是,购买应该是这样的:1) 用户选择产品,2) 询问用户是否愿意购买 X 金额的产品。 3)服务器检查用户之前是否购买过,以及他们是否通过设置SKPaymentTransactionStateRestored恢复了它。否则,处理交易并设置 SKPaymentTransactionStatePurchased。显然这是错误的,我想在两者之间的某个地方调用 - (void)restoreCompletedTransactions???

谢谢,

最佳答案

编辑:

最初我发布了一个很长的、不需要的方法来完成我需要的事情,但正如您将在下面看到的,Matt 帮助我找出了我正在寻找的变量。

举个例子,假设一个用户之前购买了我的应用,购买了所有可用的非消耗性 IAP,然后删除了该应用。当用户重新安装应用时,我希望能够确定他们何时再次“购买”产品,是原始(首次)购买还是恢复购买?

我实现了“恢复所有购买”按钮,但假设用户忽略/没有看到它,并尝试选择他们之前购买的产品。

与正常购买一样,我执行以下操作:

if ([SKPaymentQueue canMakePayments])
{
self.productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:productID]];

self.productRequest.delegate = self;
[self.productRequest start];
}
else
{
//error message here
}

在用户登录到他们的 iTunes 帐户后,该应用程序将让他们知道他们已经购买了这个并且现在将被恢复。将调用以下委托(delegate)方法:

 -(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
{
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
if(transaction.originalTransaction)
{
NSLog(@"Just restoring the transaction");
}
else
{
NSLog(@"First time transaction");
}

break;
}
default:
break;
}
}
}

无论交易是恢复交易还是首次购买,transaction.transactionState 都将等于 SKPaymentTransactionStatePurchased

现在,我们如何确定该购买是原始购买还是修复购买?

简单:如上所见,只看transaction.originalTransaction是否被初始化。根据 Apple 的说明://仅当状态为 SKPaymentTransactionStateRestored 时才有效。

如果 SKPaymentTransactionoriginalTransaction 被初始化,这意味着之前有一个交易。否则,这笔交易是原始交易!

再次感谢 Matt 为我指明了正确的方向,并使逻辑更加清晰!

关于iOS StoreKit - 何时调用 - (void)restoreCompletedTransactions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084315/

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