Documentation for SKPaymentQueue
备注:
To process a payment, first attach at least one observer object to the queue.
我有两个观察者,一个在 AppDelegate
中(用于配置内容),另一个在 UIViewController
中(用于根据付款进度更新 UI 状态)。
文档然后说:
Your observer should process the transaction and then remove it from the queue.
这是否意味着我可以在两个观察者(AppDelegate
和 UIViewController
)中调用 SKPaymentQueue.default().finishTransaction(transaction)
这个:
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/