代码之家  ›  专栏  ›  技术社区  ›  matt

调用SKPaymentQueue restoreCompletedTransactions,无响应

  •  7
  • matt  · 技术社区  · 8 年前

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

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

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

    SKPaymentQueue.default().restoreCompletedTransactions
    

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

    我试着实施 paymentQueue(_:restoreCompletedTransactionsFailedWithError:) ,但它也没有被称为。

    1 回复  |  直到 8 年前
        1
  •  14
  •   matt    8 年前

    你太近了!您需要实现此SKPaymentTransactionObserver方法:

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

    该方法在之后调用 restoreCompletedTransactions ,如果设备能够与应用商店通信,无论恢复是否成功,因为用户确实有要恢复的购买,或失败,因为用户没有要恢复的购买。

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

    但是,如果恢复成功,我们将通过 paymentQueue(_:updatedTransactions:) 用一个 transactionState .restored . 因此,假设您正在设置某种UserDefaults Bool(或类似设置),以指示用户已进行了此购买。

    好吧,这会发生还是不会发生 之前 paymentQueueRestoreCompletedTransactionsFinished 被称为。所以在 付款队列恢复已完成交易已完成 您可以查看是否设置了UserDefaults Bool,如果没有设置,您可以猜测用户可能一开始从未进行过任何购买,并做出相应的响应。

    这只是猜测,但总比什么都没有好。

    推荐文章