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/