问题描述
||
这个问题已经在这里有了答案:
解决方法
您可以检查将在restoreTransaction方法之后填充的事务数组,如果事务数组为空,则表示用户首次下载此升级。在另一种情况下,您将检查Array中的所有交易并将
transaction.payment.productIdentifier
与必要的产品标识进行比较。如果不存在,则在交易数组中添加付款。
对于非消耗性应用内购买,我使用了以下代码:
#define kInAppPurchaseProUpgradeProductId @\"upgradeProductId\"
//...
//your payment code for all SKPaymentTransactionStates
//...
//method called when BUY button press
-(void)purchaseProUpgrade{
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
//when restore completed delegate method calls
-(void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue{
if([[[SKPaymentQueue defaultQueue] transactions] count]==0)
[self addNewPaymentForProductId:kInAppPurchaseProUpgradeProductId];
else
for (SKPaymentTransaction *transaction in [[SKPaymentQueue defaultQueue] transactions]){
if (![transaction.payment.productIdentifier isEqualToString:kInAppPurchaseProUpgradeProductId]){
[self addNewPaymentForProductId:kInAppPurchaseProUpgradeProductId];
break;
}
}
}
-(void)addNewPaymentForProductId:(NSString *)productId{
if([SKPaymentQueue canMakePayments]){
SKPayment *payment = [SKPayment paymentWithProductIdentifier:productId];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
}
唯一的缺点是每次您呼叫restoreCompletedTransactions
时,都会弹出一个窗口,要求您输入当前用户的密码。此解决方案可确保每次升级的购买时间不会超过1次,但是每次尝试购买其中一个升级时,所有升级都会恢复。
,不确定,但也许您可以检查ѭ3ѭ是否存在或是否不同。