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

是否需要还原代码paymentQueueRestoreCompletedTransactions finished()?

  •  0
  • Khoury  · 技术社区  · 6 年前

    我想正确地实现恢复以前购买的IAP的能力,但是,我已经阅读了一些相互冲突的方法,现在我很困惑。

    我在沙盒中工作的方法是从paymentQueue()中恢复,如下所示。

    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    
    case .restored:
    
                defer {
                    queue.finishTransaction(transaction)
                }
    
                if let productIdentifier = transaction.original?.payment.productIdentifier {
                    unlockProduct(withIdentifier: productIdentifier)
                }
    }
    

    我在paymentQueueRestoreCompletedTransactions()中有一个警报。其他一些方法在那里有还原代码,但我认为它们不应该。

    我这样做是正确的吗?我这样做是正确的方法吗?在沙盒环境之外工作的方法?

    谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Paulw11    6 年前

    您无需执行 paymentQueueRestoreCompletedTransactionsFinished . 正如您注意到的,这不是实际恢复已完成事务的地方。

    我建议您考虑在用户点击“恢复”按钮时提供适当的用户反馈;恢复事务可能需要一些时间,因此您可能需要考虑显示活动微调器或其他UI元素以指示正在进行恢复。 PaymentQueueRestoreCompletedTransactions完成 是应该删除此用户界面的位置。

    您还可以跟踪是否确实恢复了任何购买,然后在此函数中显示适当的消息。例如,“未发现采购”或“3个采购已恢复”