等待应用内购买完成,直到执行操作

时间:2018-12-19 22:12:30

标签: ios swift storekit swiftystorekit

按下按钮时,我使用storekit进行购买。但是问题是createItems()函数和segue是在确认购买之前执行的。有什么办法吗?

func addItems() { 
    IAPService.shared.purchase(product: .nonConsumable)
    createItems()
    performSegue(withIdentifier: "returnItems", sender: self) 
}

我需要在应用内购买完成后运行功能+ segue。

IAP功能:

func purchase(product: IAPProduct) {
    guard let productToPurchase = products.filter({ $0.productIdentifier == product.rawValue}).first else {return}
    let payment = SKPayment(product: productToPurchase)
    paymentQueue.add(payment)
}

付款队列功能

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        print(transaction.transactionState.status(), transaction.payment.productIdentifier)
        switch transaction.transactionState {
        case .purchasing:
            break
        default:
            queue.finishTransaction(transaction)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

一种简单的解决方案是使用paymentQueue方法(由于购买已发生)而将其通过NotificationCenter发布通知。购买时需要立即得到通知的任何其他视图控制器都将注册此通知,因此将在此刻获悉,并可以采取任何所需的操作。

也请记住,您将在某个地方(通常在UserDefaults中)记录购买已经发生的事实。因此,任何后续的视图控制器始终可以检入其viewDidLoadviewWillAppear来查看购买是否已经发生,并可以相应地修改其行为。