编辑:
最初我发布了一个很长的、不需要的方法来完成我需要完成的工作,但正如您将在下面看到的那样,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 帐户后,该应用程序会告诉他们他们已经购买了这个,现在它将被恢复。将调用以下委托方法:
-(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 时才有效。
如果SKPaymentTransaction
'soriginalTransaction
被初始化,这意味着有一个先前的事务。否则,本次交易为原创!
再次感谢 Matt 为我指明了正确的方向,并使逻辑更加清晰!