Дождитесь завершения покупки в приложении, пока не выполните действия - PullRequest
0 голосов
/ 20 декабря 2018

Когда кнопка нажата, я использую storekit, чтобы купить ее.Но проблема в том, что функция createItems () и segue выполняются до подтверждения покупки.Есть ли способ сделать это?

func addItems() { 
    IAPService.shared.purchase(product: .nonConsumable)
    createItems()
    performSegue(withIdentifier: "returnItems", sender: self) 
}

Мне нужно запустить функцию + segue после завершения покупки в приложении.

Функция IAP:

func purchase(product: IAPProduct) {
    guard let productToPurchase = products.filter({ $0.productIdentifier == product.rawValue}).first else {return}
    let payment = SKPayment(product: productToPurchase)
    paymentQueue.add(payment)
}

Функция очереди платежей

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        print(transaction.transactionState.status(), transaction.payment.productIdentifier)
        switch transaction.transactionState {
        case .purchasing:
            break
        default:
            queue.finishTransaction(transaction)
        }
    }
}

1 Ответ

0 голосов
/ 20 декабря 2018

Одно простое решение для метода paymentQueue, когда он вызывается из-за покупки, для отправки Уведомления через Центр уведомлений.Любой другой контроллер представления, который должен быть немедленно проинформирован о совершении покупки, будет зарегистрирован для этого Уведомления и, таким образом, услышит об этом в этот момент и может предпринять любое желаемое действие.

Имейте также в виду,что вы собираетесь где-то записать, обычно в UserDefaults, факт совершения покупки.Таким образом, любой последующий контроллер представления всегда может проверить свои viewDidLoad или viewWillAppear, чтобы увидеть, произошла ли покупка, и может соответствующим образом изменить свое поведение.

...