Как правильно восстановить покупки с помощью IAP в Swift - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь отобразить предупреждение для пользователя, когда покупки восстановлены.Но когда я отлаживаю и распечатываю количество восстановленных покупок, я получаю 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

1 Ответ

2 голосов
/ 10 апреля 2019

Ваша реализация

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

неправильно. Вы пропустили состояние транзакции, когда покупка восстановлена! У вас есть case .purchased, но вы забыли case .restored. Поместите это. Вот где вы уведомлены и можете ответить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...