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)
会破坏所有侦听器的事务事件。
答案 0 :(得分:1)
最近做了一些类似的尝试,我发现多个SKPaymentQueue观察者都可以工作-每个事务都会调用它们。但是,在调用finishTransaction()之后,将不会再调用剩余的观察者(正如您在问题中所猜测的那样,这也很有意义)。
我还确定观察者似乎总是按照您添加观察者的顺序被调用。因此,如果您希望两个观察者始终获得每笔交易,请确保最后添加的观察者是唯一调用finishTransaction()的观察者。
答案 1 :(得分:0)
显示SKPaymentTransactionObserver
视图控制器时,可以重新排列观察者的顺序,以便在调用App Delegate观察者方法之前先调用VC的方法。
SKPaymentQueue.default().remove(AppDelegate.shared)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(AppDelegate.shared)
或者,我想完全删除对App Delegate的观察。