【问题标题】:Calling SKPaymentQueue restoreCompletedTransactions, no response调用SKPaymentQueue restoreCompletedTransactions,无响应
【发布时间】:2017-11-14 02:33:51
【问题描述】:

这里的用例是用户从未购买过我的应用内购买,但点击了恢复按钮。我想让用户知道还原失败,因为没有要还原的内容。

问题是我没有收到任何事件。所以我不知道发生了什么。

当我的用户在我的界面中点击恢复按钮时,我会调用

SKPaymentQueue.default().restoreCompletedTransactions

然而,在那之后什么都没有发生。我希望我的 SKPaymentTransactionObserver paymentQueue(_:updatedTransactions:) 被调用,但事实并非如此。

我尝试实现paymentQueue(_:restoreCompletedTransactionsFailedWithError:),但它也没有被调用。

【问题讨论】:

    标签: ios in-app-purchase


    【解决方案1】:

    你离得太近了!你需要实现这个 SKPaymentTransactionObserver 方法:

    func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
        // ...
    }
    

    如果设备能够与 App Store 通信,则在 restoreCompletedTransactions 之后调用该方法 — 无论恢复成功是因为用户确实有购买要恢复,还是失败是因为用户没有购买要恢复.

    很遗憾,您在这里没有得到任何关于刚刚发生的事情的信息。我认为这是 StoreKit 架构中的一个缺陷。

    但是,如果恢复成功,我们将通过paymentQueue(_:updatedTransactions:)transactionState.restored。所以大概你正在设置某种 UserDefaults Bool (或类似的)来表明用户已经购买了。

    好吧,这发生或不发生之前 paymentQueueRestoreCompletedTransactionsFinished 被调用。因此,在paymentQueueRestoreCompletedTransactionsFinished 中,您可以查看是否设置了 UserDefaults Bool,如果没有设置,您可以猜测用户可能一开始就没有购买过任何商品,并做出相应的回应。

    这是猜测,但总比没有好。

    【讨论】:

    • 我是否理解正确,调用restoreCompletedTransactions 会在成功的情况下自动调用paymentQueue(_:updatedTransactions:) 方法?
    • 当然。这就是为什么在paymentQueue(_:updatedTransactions:) 中有一个transactionState 案例.restored。你必须报道那个案子。您必须涵盖所有种情况。
    猜你喜欢
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多