iOS покупок в приложении. Автоматическая покупка после завершения восстановления. - PullRequest
0 голосов
/ 10 января 2020

Я тестирую покупки в приложении с песочницей. В методе paymentQueue updateTransactions я ловлю состояние транзакции, затем, если покупка или восстановление состояния, я пытаюсь разблокировать контент (пользователь подписан, затем переключаю режим в Premium).

, пока все работает отлично. Пользователь будет приобретать товар, затем пользователь переходит в режим Premium. Если пользователь удалил приложение со своего устройства, восстановление также работает и переключите режим в премиум. ​​

Но каким-то образом, после того, как пользователь нажал кнопку восстановления в это время, никаких проблем не возникает. Но если пользователь близко к приложению, то, открыв его дважды, пользователь снова увидит купленные чехлы. Некоторые случаи покупки снова работают без каких-либо попыток покупки.

Насколько я понимаю, после добавления наблюдателя SKProductQueue вызывается метод updatedTransaction. Тогда каким-то образом дело о покупке работает.

Очень сложно описать то, на что я нахожусь, но в основном после того, как пользователь нажал кнопку восстановления в следующий раз, когда обновленный метод транзакции неожиданно сработал, а купленный случай сработал. Также я поставлю покупку и восстановление функции, но это правильно, кажется, что.

Любая идея была бы благодарна!

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

    for transaction in transactions {
          print(transaction.transactionState.status(), transaction.payment.productIdentifier)
        switch transaction.transactionState {


        case .purchasing  : break

        case .purchased:

            // set true for premium mode then turn back to main screen from purchase screen.
             UserDefaults.standard.setValue(true, forKey: "isUserSubscribe")
             UserDefaults.standard.synchronize()

                getBackMainScreenProvider.Instance.returnMain()
             print("purchased")
             queue.finishTransaction(transaction)

             break

        case .failed:
            queue.finishTransaction(transaction)
            break
        case .restored:
              // this case is works more than once but if user has more than purchase 
            // but its okay.
             UserDefaults.standard.setValue(true, forKey: "isUserSubscribe")
             UserDefaults.standard.synchronize()
             getBackMainScreenProvider.Instance.returnMain()

             AppDelegate.restoreClickFlag = true

            queue.finishTransaction(transaction)


            break

        default : break
        }
    }

}


 func purchase (product: IAPProduct) {

     guard let productToPurchase  = products.filter({ $0.productIdentifier == product.rawValue }).first else { return }
     let payment  = SKPayment(product: productToPurchase)  // request to the  Appstore in order to   payment process
    paymentQueue.add(payment)
    print("nasıl...")

}

func restorePurchases () {

    print("restoring purchases...")

    paymentQueue.restoreCompletedTransactions()

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