Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更新的交易(transactionState=.restored)与paymentQueueRestoreCompletedTransactionsFinished_Ios_Swift_Xcode_In App Purchase_Swift5 - Fatal编程技术网

Ios 更新的交易(transactionState=.restored)与paymentQueueRestoreCompletedTransactionsFinished

Ios 更新的交易(transactionState=.restored)与paymentQueueRestoreCompletedTransactionsFinished,ios,swift,xcode,in-app-purchase,swift5,Ios,Swift,Xcode,In App Purchase,Swift5,正如标题所描述的,实际的区别是什么 如果我有这个: func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transaction in transactions { if transaction.transactionState == .purchased { } else

正如标题所描述的,实际的区别是什么

如果我有这个:

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
        }
    } 

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

根据可恢复的事务,您将获得0到n个事务(可能没有任何可恢复的事务)

显示所有可用事务后,您将接到一个呼叫
paymentQueueRestoreCompletedTransactionsFinished
。每次调用
restoreCompletedTransactions
时,您总是会得到一个对此方法的调用

请注意,没有将还原事务的详细信息传递给此方法。此方法的目的是允许您执行任何最终管理,例如更新UI


例如,当用户点击“还原”按钮时,您可以显示一条“还原”消息,当您接到呼叫
paymentQueueRestoreCompletedTransactionsFinished

好的,我明白了!但是,当用户已经购买了IAP,并再次按下购买按钮时,
transactionState==.restored
根本不会运行。但当点击恢复按钮时,
paymentQueueRestoreCompletedTransactionsFinished
将运行。按下购买按钮时,为什么不运行
transactionState==.restored
呢?因为在第一种情况下,您没有启动恢复,而是启动了购买。如果是非消耗品购买,则第二次购买不向用户收费
func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {

}