2016-03-16 126 views
0

我的應用程序中有4個非消耗品,並且購買這些作品時沒有任何問題。Swift IAP restoreCompletedTransactions可恢復非購買的物品

但是,我創建了一個restorePurchases按鈕,可以恢復所有產品,無論用戶是否購買了它們。我已經在4個不同的沙箱測試用戶上測試了這個結果,結果是一致的(即對於從未購買非易耗品的測試用戶,點擊'還原'恢復所有產品)

我的還原代碼如下所示:

@IBAction func restorePurchases(sender: UIButton) { 
    SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
    SKPaymentQueue.defaultQueue().restoreCompletedTransactions() 
} 

func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) { 
    print("transactions restored") 

    for transaction in queue.transactions { 
     let t: SKPaymentTransaction = transaction 

     let prodID = t.payment.productIdentifier as String 

     switch prodID { 
     case "productAbc1": 
      defaults.setBool(true , forKey: "productAbc1") 

     case "productAbc2": 
      defaults.setBool(true , forKey: "productAbc2") 

     case "productAbc3": 
      defaults.setBool(true , forKey: "productAbc3") 

     case "productAbc3": 
      defaults.setBool(true , forKey: "productAbc4") 

     default: 
      print("IAP not setup; enable it") 
     } 

    } 
} 

我是否需要檢查paymentQueueRestoreCompletedTransactionsFinished中的其他參數?將我的代碼與許多其他類似問題/ IAP示例進行比較,它看起來幾乎相同。這是沙盒環境還是代碼問題?

+1

您是否嘗試過打印出這些事務以查看實際包含的內容? – sschale

+0

根據我恢復的測試用戶,控制檯打印多個每個prodID(每個prodID 5到15) - 即使是以前沒有購買過任何東西的全新測試用戶... –

+0

Ahhh man。當我輸入這個響應時,它發現我......我根本沒有在每個案例中包含'queue.finishTransaction(transaction)'......現在全部排序!感謝您幫助我獲得齒輪研磨:) .... –

回答

0
queue.finishTransaction(transaction) 

對於每種情況都缺失;這意味着他們從未從隊列中清除。因此,我下次嘗試恢復購買時,發現了所有以前的交易(並恢復)。

添加上面的代碼行解決了問題。