您可以檢查將在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次,但每次嘗試購買其中一次時,所有升級都會恢復。
Alpár, 請看看這個[thread](http://stackoverflow.com/questions/5623652/differentiating-between-initial-buy-and-free-re-buy-in-storekit-in-應用程序購買)。希望能幫助到你。 Markus – 2011-05-29 04:58:01
謝謝你的幫助!不幸的是,我們不能使用它,我們的情況有點複雜... – 2011-08-30 14:43:40