0

当按下按钮时,我使用 storekit 购买它。但问题是 createItems() 函数和 segue 在确认购买之前执行。有没有办法做到这一点?

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

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

内购功能:

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)
        }
    }
}
4

1 回答 1

1

一个简单的解决方案是该paymentQueue方法在因为购买发生而被调用时,通过 NotificationCenter 发布通知。在购买发生时需要立即通知的任何其他视图控制器都将注册此通知,因此会在那个时候听到它并可以采取任何所需的操作。

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

于 2018-12-19T23:18:58.097 回答