EDIT:
最初,我发布了一个非常长的、不需要的方法来完成我需要的工作,但正如您将在下面看到的,马特帮助我找出了我正在寻找的变量。
例如,假设用户之前购买了我的应用程序,购买了所有可用的非消耗性 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
已初始化。根据苹果的说明:// 仅当状态为 SKPaymentTransactionStateRestored 时才有效。
If the SKPaymentTransaction
's originalTransaction
已初始化,这意味着之前有一笔交易。否则,这笔交易就是原始交易!
再次感谢马特为我指明了正确的方向,并使逻辑更加清晰!