每个SKPaymentQueue的finishTransaction?

时间:2017-04-29 02:15:57

标签: ios swift storekit

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)会破坏所有侦听器的事务事件。

2 个答案:

答案 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的观察。