【问题标题】:updatedTransactions(transactionState == .restored) vs paymentQueueRestoreCompletedTransactionsFinishedupdatedTransactions(transactionState == .restored) 与 paymentQueueRestoreCompletedTransactionsFinished
【发布时间】:2020-03-31 21:09:35
【问题描述】:

正如标题所描述的,实际有什么不同?

如果我有这个:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            if transaction.transactionState == .purchased {

            } else if transaction.transactionState == .failed {

            } else if transaction.transactionState == .restored { // <- This one
        }
    } 

我还需要用这个吗(如果是,这里用什么代码,transactionState == .restored里面是什么代码?:

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {

}

【问题讨论】:

    标签: ios swift xcode in-app-purchase swift5


    【解决方案1】:

    当您开始恢复交易时,任何可用的交易都会以.restored 状态呈现给您的支付队列观察者。此时您应该恢复事务;以与您处理初始购买相同的方式有效地处理它。

    根据可恢复的交易,您将获得从 0 到 n 的交易(可能没有任何可恢复的交易)。

    提交所有可用交易后,您将接到paymentQueueRestoreCompletedTransactionsFinished 的电话。每次调用 restoreCompletedTransactions 时,您总是会收到 1 次此方法的调用。

    请注意,已恢复事务的详细信息不会传递给此方法。此方法的目的是允许您执行任何最后的内务管理,例如更新您的 UI。

    例如,您可以在用户点击您的恢复按钮时显示“正在恢复”消息,并在您接到 paymentQueueRestoreCompletedTransactionsFinished 的电话时隐藏该消息

    【讨论】:

    • 好的,我明白了!但是怎么回事,当用户已经购买了IAP,再次按下购买按钮时,transactionState == .restored根本没有运行。但是当点击恢复按钮时,paymentQueueRestoreCompletedTransactionsFinished 会运行。为什么按下购买按钮时transactionState == .restored 不运行?
    • 因为在第一种情况下您没有启动恢复,所以您启动了购买。如果是非消耗性购买,则不会向用户收取第二次购买的费用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多