如何在Swift中使用IAP正确恢复购买

问题描述 投票:0回答:1

我正在尝试在恢复购买时向用户显示警报。但是当我调试并打印出恢复购买的数量时,我得到了0个交易被恢复。我不明白为什么它会带回0.我以为我只需要调用restoreCompletedTransactions()方法。我发布通知,通知我恢复是否完成,我甚至没有达到这一点。我正在使用paymentQueueRestoreCompletedTransactionsFinished(_ pQueue: SKPaymentQueue)在恢复完成时通知我。我该如何正确恢复购买。

let paymentQueue = SKPaymentQueue.default()

func restorePurchases() {
    if !self.canMakePurchases {
            return
     }
     self.paymentQueue.add(self)
     self.paymentQueue.restoreCompletedTransactions()
}

func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
     print("Restore failed")
}

func paymentQueue(_ pQueue: SKPaymentQueue, updatedTransactions pTransactions: [SKPaymentTransaction]) {
     for scanTransaction in pTransactions {
         switch scanTransaction.transactionState {
          case .purchasing:
             break
          case .purchased:
            NotificationCenter.default.post(name: .AppDelegateUserHasPurchasedProductNotification, object: self)
            pQueue.finishTransaction(scanTransaction)
          default:
            pQueue.finishTransaction(scanTransaction)
        }
    }
}

func paymentQueueRestoreCompletedTransactionsFinished(_ pQueue: SKPaymentQueue) {
     print("Received restored transactions: \(pQueue.transactions.count)")
     for scanTansaction in pQueue.transactions {
        switch scanTansaction.transactionState {
         case .restored:
           NotificationCenter.default.post(name: .AppDelegateUserHasRestoredPurchasesNotification, object: self)
           pQueue.finishTransaction(scanTansaction)
          default:
             break
            }
      }
}

日志

Received restored transactions: 0
ios swift in-app-purchase
1个回答
2
投票

你的实施

func paymentQueue(_ pQueue: SKPaymentQueue, updatedTransactions pTransactions: [SKPaymentTransaction]) {

是错的。您还原了购买恢复时的交易状态!你有case .purchased,但你忘记了case .restored。把它放进去。这是你收到通知并可以回复的地方。

© www.soinside.com 2019 - 2024. All rights reserved.