Reputation: 448
I have a SKPaymentTransactionObserver
checking when purchase is complete
extension IAPService: SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction.transactionState.status(), transaction.payment.productIdentifier)
if transaction.transactionState.status() == "purchased" {
// Pro Purchased
}
switch transaction.transactionState {
case .purchasing: break
default: queue.finishTransaction(transaction)
}
}
}
}
How can I hide an object on the ViewController
, purchased from when purchase is complete
Upvotes: 1
Views: 1478
Reputation: 3729
If not explicitly calling purchase
(e.g. when relying on SwiftUI), use the Transaction.updates
async sequence.
https://developer.apple.com/documentation/storekit/transaction/updates#Discussion
Upvotes: 0
Reputation: 3939
You can create a closure in your IAPService class:
var productDidPurchased: (() -> Void)?
Then in your extension you can use it in this way:
switch transaction.transactionState {
case .purchasing:
break
case .purchased:
productDidPurchased?()
default:
queue.finishTransaction(transaction)
}
Then in your ViewController to retrieve it:
IAPService.shared.productDidPurchased = {
[weak self] in
//you will receive a callback when the product is purchased and can hide your view here
}
Upvotes: 7