Я настроил покупку в приложении, используя класс IAPHelper. Я могу получить правильную информацию из App Store и отобразить ее в одном VC. Как только пользователь выбирает необходимый элемент покупки в этом VC, подробности отображаются на следующем View Controller, который называется «Просмотр». Здесь происходит фактическая покупка. У меня есть функция «buyProduct», которая отлично работает в этом ReviewVC и отправляет платеж по продукту в paymentQueue SKPaymentTransactionObserver класса IAPHelper.
Мне нужно разблокировать контент через всплывающее окно в «Просмотр ВК», которое должно появиться, как только статус покупки отображается как «купленный» в SKPaymentTransactionObserver, поэтому я пробовал много способов включить эту функцию как часть статуса paymentQueue для «куплено», но приложение всегда вылетает после успешной оплаты, когда достигает функции отображения всплывающего окна.
Вот некоторый код - я не буду включать весь код IAPHelper, только соответствующие части:
open class IAPHelper: NSObject { ......
var review: ReviewVC! ...... }
extension IAPHelper: SKPaymentTransactionObserver {
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for trans in transactions {
print("func IAPHelper = \(trans.transactionState.status(), trans.payment.productIdentifier)")
switch trans.transactionState {
case .purchasing: break
case .purchased: complete(transaction: trans)
break
case .failed : fail(transaction: trans)
case .restored : restore(transaction: trans)
case .deferred : break
// default: queue.finishTransaction(trans)
}
}
}
func complete(transaction: SKPaymentTransaction) {
deliverPurchaseNotificationFor(identifier: transaction.payment.productIdentifier)
SKPaymentQueue.default().finishTransaction(transaction)
review.showSuccessPopUp() //***ERROR IS HERE***Thread 1: EXC_BREAKPOINT (code=1, subcode=0x10426ac70)*****
}
Это код в файле ReviewVC: -
class ReviewVC: UIViewController {
@IBAction func buyTestButton(_ sender: Any) {
print("Buy button pressed - products = \(products?.localizedTitle ?? "No Product")")
buyProduct()
}
func buyProduct() {
let payment = SKPayment(product: products!)
SKPaymentQueue.default().add(payment as SKPayment)
}
//SUCCESSFUL PURCHASE:-
func showSuccessPopUp() {
UIView.animate(withDuration: 0.4) {
self.hideView.isHidden = false
}
UIView.animate(withDuration: 0.8) {
self.successPopUp.isHidden = false
}
}
Застрял на этом в течение нескольких дней, поэтому любая помощь будет высоко ценится !!