ios - productsRequest 从未在应用程序购买中调用 swift 5
问题描述
我是 swift 新手,所以我正在创建一个新应用程序。我正在尝试在我的应用程序中实现应用程序购买,但productsRequest方法从未调用过。我试图关注所有其他堆栈溢出响应,但没有任何改变。谁能帮我?太感谢了。
这是我的 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(){
}
}
这是我的 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
}
}
}
}
最后,这是用户可以按下以购买应用程序内的按钮:
@IBAction func didTapBuy() {
RemoveAdsManager.removeAds()
}
非常感谢您的所有帮助。我正在努力学习,所以欢迎任何回应。
解决方案
removeAds()
似乎beginPurchase()
在这一点上调用你应该调用类似的东西
let payment = SKMutablePayment(product: product)
SKPaymentQueue.default().add(payment)
推荐阅读
- java - 带有 RecyclerView 的自定义 AlertDialog - 列表始终为空
- windows - 如何在 installshield 中为 windows 的西装安装程序添加两个 msi 包
- vba - 在 VBA 中从网站下载所有带有前缀的文件
- python - Python -> Boost Python + C++ 错误
- java - 想要根据映射到 json 的键隐藏对象的某些字段
- python - 如何在 matplotlib 中复制 gnuplot 的伪 3D 图,以便随时间分配蛋白质的二级结构?
- python - 如何使用 pandas DataFrame 在列轴连接中使用 join_axes?
- php - 如何使用 laravel 5.4 制作工作菜单选项卡
- django - 如何在 Django Rest Framework 中注册后自动生成电子邮件?
- php - 从商店页面 woocommerce 添加到购物车分组产品