ios - 每个 SKPaymentQueue 的 finishTransaction 吗?

标签 ios swift storekit

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.

这是否意味着我可以在两个观察者(AppDelegateUIViewController)中调用 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/

相关文章:

ios - NSPredicate 不返回任何获取请求的结果,适用于数组过滤

iOS - CATiledLayer renderInContext : results in distorted image

ios - 禁用点击事件但不在 UIScrollView 上滚动

ios - 当来自 NotificationCenter 时,为什么调整标签大小需要延迟才能按预期更新?

arrays - 我应该如何获取作为 Int 通过测试的对象的最后一个索引?

ios - 在什么情况下 SKPaymentTransaction.transactionIdentifier 与已验证收据的 transaction_id 相同?

ios - 构建期间的 provisioningProfile 冲突

ios - response.products计数始终返回0 Xcode 4 ios应用程序内购买

ios - 如何基于每个用户存储应用内购买以供离线使用

ios - UImenucontroller Action 使用委托(delegate)来设置 tableView 正在编辑不工作_swift