[英]productsRequest never called in app purchases swift 5
I am new to swift so I am creating a new app.我是 swift 的新手,所以我正在创建一个新应用程序。 I am trying to implement in app purchases in my application but the productsRequest method never called.
我正在尝试在我的应用程序中实现应用程序购买,但productsRequest方法从未调用过。 I tried to follow all other stack overflow responses but nothing changed.
我试图关注所有其他堆栈溢出响应,但没有任何改变。 Can anyone help me?
谁能帮我? Thank you so much.
太感谢了。
This is my RemoveAdsManager.swift:这是我的 RemoveAdsManager.swift:
import Foundation
import StoreKit
public class RemoveAdsManager {
class func removeAds(){
let iap = IAPManager(productID: IAPManager.removeAdsID)
iap.beginPurchase()
}
class func restoreRemoveAds(){
let iap = IAPManager(productID: IAPManager.removeAdsID)
iap.beginRestorePurchases()
}
class func areAdsRemoved() -> Bool{
return UserDefaults.standard.bool(forKey: "pro_version")
}
class func removeAdsSuccess(){
UserDefaults.standard.set(true, forKey: "pro_version")
UserDefaults.standard.synchronize()
}
class func restoreRemoveAdsSuccess(){
removeAdsSuccess()
}
class func removeAdsFailure(){
}
class func removeAdsDeferred(){
}
}
This is my IAPManager.swift:这是我的 IAPManager.swift:
import Foundation
import StoreKit
public class IAPManager: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver{
static let removeAdsID = "com.******.*****.******"
let productID: String
init(productID: String){
self.productID = productID
}
public func beginPurchase(){
if SKPaymentQueue.canMakePayments(){
let request = SKProductsRequest(productIdentifiers: [productID])
request.delegate = self
request.start()
}
else{
}
}
public func beginRestorePurchases(){
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().restoreCompletedTransactions()
}
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse){
if let product = response.products.first{
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(self)
SKPaymentQueue.default().add(payment)
}
else{
RemoveAdsManager.removeAdsFailure()
}
}
public func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue){
for transaction in queue.transactions{
if transaction.transactionState == .restored{
let productID = transaction.payment.productIdentifier
if(productID.lowercased() == IAPManager.removeAdsID.lowercased()){
RemoveAdsManager.restoreRemoveAdsSuccess()
}
SKPaymentQueue.default().finishTransaction(transaction)
}
}
}
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]){
for transaction in transactions{
let productID = transaction.payment.productIdentifier
switch transaction.transactionState{
case .purchasing:
break
case .purchased:
RemoveAdsManager.removeAdsSuccess()
SKPaymentQueue.default().finishTransaction(transaction)
case .restored:
RemoveAdsManager.restoreRemoveAdsSuccess()
SKPaymentQueue.default().finishTransaction(transaction)
case .failed:
RemoveAdsManager.removeAdsFailure()
SKPaymentQueue.default().finishTransaction(transaction)
case .deferred:
RemoveAdsManager.removeAdsDeferred()
break
}
}
}
}
And finally, this is the button where the user can press to buy the in app:最后,这是用户可以按下以购买应用程序内的按钮:
@IBAction func didTapBuy() {
RemoveAdsManager.removeAds()
}
Thank you so much for all of your help.非常感谢您的所有帮助。 I am trying to learn, so any response is welcome.
我正在努力学习,所以欢迎任何回应。
removeAds()
seems to calls beginPurchase()
at this point you should call something like removeAds()
此时似乎调用beginPurchase()
您应该调用类似
let payment = SKMutablePayment(product: product)
SKPaymentQueue.default().add(payment)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.