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

标签 ios swift in-app-purchase

我正在尝试在恢复购买时向用户显示提醒。但是当我调试并打印出恢复购买的数量时,我得到 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

最佳答案

你的实现

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

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

关于ios - 如何在 Swift 中使用 IAP 正确恢复购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55610155/

相关文章:

objective-c - MKMapView 与一个 MKOverlayPathView 会导致 map 模糊

ios - 根据属性类型转换数据时出现 NSNumber 异常

ios8 - 消耗品在应用程序购买验证

ios - 恢复购买功能在 ios 中无法正常工作

ios - self.nextResponder 与 super for touchesMoved

ios - 如何使用 Fabric SDK 在 Swift iOS 应用程序中强制崩溃?

string - 如何在 Swift 中对字符串的两个数字求和

iphone - 应用内购买 - 消耗品

ios - 无法在我的库中使用 Swift Package Manager

ios - 如何使页脚 UITableViewCell 不是静态的?