每个 SKPaymentQueue 的 finishTransaction?
finishTransaction for each SKPaymentQueue?
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() 的观察者。
当您显示 SKPaymentTransactionObserver
View Controller 时,您可以重新排序观察者,以便在调用 App Delegate 观察者方法之前调用 VC 的方法。
SKPaymentQueue.default().remove(AppDelegate.shared)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(AppDelegate.shared)
或者,我想,完全删除 App Delegate 观察。
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() 的观察者。
当您显示 SKPaymentTransactionObserver
View Controller 时,您可以重新排序观察者,以便在调用 App Delegate 观察者方法之前调用 VC 的方法。
SKPaymentQueue.default().remove(AppDelegate.shared)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(AppDelegate.shared)
或者,我想,完全删除 App Delegate 观察。