2016-11-28 35 views
4

我的代碼存在問題。函數updatedTransactions只在事務處理完成時調用一次。購買並且在事務完成後不調用它。Swift:IAP updatedTransactions未調用。購買

func buyProduct(product: SKProduct) { 
    let payment = SKPayment(product: product) 
    SKPaymentQueue.defaultQueue().addTransactionObserver(self) 
    SKPaymentQueue.defaultQueue().addPayment(payment) 
} 

func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { 

    for transaction in transactions { 
    print(transaction) 
    switch (transaction.transactionState) { 
     case .Purchased, .Restored: 
     print("Completed") 
     complete(transaction) 
     break 
     case .Failed: 
     fail(transaction) 
     break 
     default: 
     break 
    } 
    } 
} 

回答

0

對不起,我可能會回答有點晚,但它可能與this question有關。當Xcode沒有達到.purchased狀態時,您是否正在測試您的IAP?

如果是,則需要將設備的App Store ID設置爲您在iTunes Connect(用戶菜單,沙盒測試儀)上創建的ID。

如果不是,那麼也許可能是因爲您的SKPaymentQueue已經包含太多等待完成的交易。你可以用SKPaymentQueue.default().transactions進行檢查。

在我的情況下,我有28個交易等待完成,因爲我在購買階段有一個不好的開關案例陳述。

如果是這樣的話,你可以在你viewDidLoad添加這些行來完成他們中的每一個(不要忘記你找到後刪除他們,爲什麼不能在代碼完成):

for transaction: AnyObject in SKPaymentQueue.default().transactions { 
    SKPaymentQueue.default().finishTransaction(transaction as! SKPaymentTransaction) 
} 
相關問題