Documentation for SKPaymentQueue 注意:

要处理付款,请首先将至少一个观察者对象附加到
队列。

我有两个观察员,一个在AppDelegate中(用于供应内容),另一个在UIViewController中(用于根据付款进度更新UI状态)。

然后文档说明:

您的观察员应处理交易,然后将其从中删除
队列。

这是否意味着我可以像这样在两个观察者(SKPaymentQueue.default().finishTransaction(transaction)AppDelegate)中调用UIViewController:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        switch transaction.transactionState {
        case .deferred:
            print("deferred")
        case .purchasing:
            print("purchasing")
        case .purchased:
            SKPaymentQueue.default().finishTransaction(transaction)
        case .failed:
            SKPaymentQueue.default().finishTransaction(transaction)
        case .restored:
            SKPaymentQueue.default().finishTransaction(transaction)
        }
    }
}

我以为SKPaymentQueue.default().finishTransaction(transaction)破坏了所有侦听器的事务事件。

最佳答案

最近做了一些类似的实验后,我发现多个SKPaymentQueue观察者可以工作-每个事务都会调用它们。但是,在调用finishTransaction()之后,将不会再调用剩余的观察者(正如您在问题中所猜测的那样,这也很有意义)。

我还确定观察者似乎总是按照您添加它们的顺序被调用。因此,如果您希望两个观察者始终获得每笔交易,请确保最后添加的观察者是唯一调用finishTransaction()的观察者。

关于ios - 每个SKPaymentQueue的finishTransaction?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43691161/

10-09 02:28