与通知 UI 视图购买已完成的混淆

时间:2021-04-03 13:58:09

标签: ios swiftui in-app-purchase combine

我正在关注以下网站上的 IAP 教程: https://betterprogramming.pub/set-up-your-swiftui-app-to-support-in-app-purchases-ef2e0a11d10c

以下是处理交易和状态的代码部分:

extension IAPManager: SKPaymentTransactionObserver {
  
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
 
        transactions.forEach { (transaction) in
  
            switch transaction.transactionState {
  
            case .purchased:
                SKPaymentQueue.default().finishTransaction(transaction)
                purchasePublisher.send(("Purchased ",true))
  
            case .restored:
                totalRestoredPurchases += 1
                SKPaymentQueue.default().finishTransaction(transaction)
                purchasePublisher.send(("Restored ",true))
   
            case .failed:
                if let error = transaction.error as? SKError {
                    purchasePublisher.send(("Payment Error \(error.code) ",false))
                    print("Payment Failed \(error.code)")
                }
                SKPaymentQueue.default().finishTransaction(transaction)
  
            case .deferred:
                print("Ask Mom ...")
                purchasePublisher.send(("Payment Diferred ",false))
  
            case .purchasing:
                print("working on it...")
                purchasePublisher.send(("Payment in Process ",false))
  
            default:
                break
  
            }

        }

    }   

}

简而言之,它会针对您向服务器发出的每个购买请求检查队列中的每个案例,并通过如下所示的 purchasePublisher PassThruSubject 将状态发送回 SwiftUI 界面:

let purchasePublisher = PassthroughSubject<(String, Bool), Never>()

这就是我困惑的部分!?我如何访问 purchasePublisher 以便我可以在 SwiftUI 视图(SwiftUI 界面)上检查购买实际上已成功完成,以便我可以采取相应的措施?

1 个答案:

答案 0 :(得分:0)

purchasePublisherPassthroughSubject 的一个实例,它是一个向订阅者广播信息的发布者。您必须通过此实例才能访问这些订阅,您可以使用 sink 方法执行此操作:

purchasePublisher.sink(receiveValue: { (value) in
    print(value)
})

和往常一样,有一些警告。您可能会发现这样的东西对您正在做的事情很有用:.send() and .sink() do not seem to work anymore for PassthroughSubject in Xcode 11 Beta 5

相关问题