ios - 等到 In App Purchase 完成,直到执行操作

标签 ios swift storekit swiftystorekit

当按下按钮时,我使用 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)
        }
    }
}

最佳答案

一个简单的解决方案是 paymentQueue 方法,当它因为购买已经发生而被调用时,通过 NotificationCenter 发布一个 Notification。任何其他需要在购买发生时立即得到通知的 View Controller 都已注册此通知,因此会在那一刻听到它并可以采取任何所需的操作。

还要记住,您将在某处(通常是在 UserDefaults 中)记录购买已发生的事实。因此,任何后续 View Controller 始终可以检查其 viewDidLoadviewWillAppear 以查看购买是否已经发生,并可以相应地修改其行为。

关于ios - 等到 In App Purchase 完成,直到执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53859858/

相关文章:

ios - UITableView 重新加载数据后出现 NSInternalInconsistencyException

swift - 在 Firestore 中更改特定值时如何有效更新集合文档?

ios - TextSpriteModel 背景文本上的圆角

swift - 在真实设备上展示测试广告

ios - 使用 tableViewCells 进行 Segue

ios - KVO 和 Core Data - 自观察托管对象

iphone - 如何将数组中的多个值转换为以逗号分隔的字符串

xcode - 无法在Mac上恢复购买

iphone - 关于内购的问题 : auto-renewable subscriptions

ios - 向 AppDelegate 发送消息不适用于应用内购买