我已使用“IAPHelper”类设置了应用程序内购买。我可以从App Store中检索正确的信息并在一个VC中显示出来。一旦用户在该VC中选择了所需的购买项目,详细信息将显示在下一个名为“Review”的视图控制器上。这是实际购买的地方。我有一个“buyProduct”函数,它在这个ReviewVC中运行良好,并将产品付款发送到IAPHelper类的SKPaymentTransactionObserver的paymentQueue。
我需要通过“Review VC”中的弹出窗口解锁内容,一旦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
}
}
被困在这几天,所以任何帮助将非常感谢!!
最佳答案
问题是review
就是nil
。
您将其声明为变量var review: ReviewVC!
但是,您从未初始化它。
初始化类似于review = Something
。
不确定您的代码在哪里调用IAP()
,但无论它在哪里,我都会执行如下操作:
var iap = IAP()
iap.review = self //if you are in the review class.
很难说,因为我不确定你在哪里声明你的IAP对象。
关于ios - iOS应用内购买-由于该功能位于另一个 View Controller 中,因此无法解锁内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53325923/