gpt4 book ai didi

ios - 应用内购买弹出窗口不会立即显示,而是会出现延迟

转载 作者:行者123 更新时间:2023-11-29 05:30:52 26 4
gpt4 key购买 nike

我有以下用于应用内购买的代码。

现在,每当单击特定按钮时,我都会执行:IAPService.shared.purchase()

它有效,但用户购买产品的可能性不会立即弹出 - 不知何故需要一段时间才能处理请求。这种延迟会导致误解,并且一些用户会向该按钮发送垃圾邮件。

有没有办法立即显示购买弹出窗口 - 我见过其他应用程序可以毫无延迟地运行。

class IAPService: NSObject {

let defaults = UserDefaults.standard

private override init() {}
static let shared = IAPService()

weak var delegate: CarViewController?

var products = [SKProduct]()
let paymentQueue = SKPaymentQueue.default()

private var purchasedProductIdentifiers: Set<String> = []

func getProducts() {
let product: Set = ["IDIDID"]
let request = SKProductsRequest(productIdentifiers: product)
request.delegate = self
request.start()
paymentQueue.add(self)
}

func purchase() {
guard let productToPurchase = products.first else { return }
print(productToPurchase)
let payment = SKPayment(product: productToPurchase)
paymentQueue.add(payment)
}

func restorePurchases() {
paymentQueue.restoreCompletedTransactions()
}

}

extension IAPService: SKProductsRequestDelegate {

func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
self.products = response.products
for product in response.products {
print(product.localizedTitle)
}
}

}

extension IAPService: SKPaymentTransactionObserver {

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
for transaction in transactions {
print(transaction.transactionState.status(), transaction.payment.productIdentifier)
if transaction.payment.productIdentifier == "IDIDID" && ( transaction.transactionState == .purchased || transaction.transactionState == .restored ) {
premiumPurchased = true
defaults.set(premiumPurchased, forKey: "premiumPurchased")
print(premiumPurchased)
}
switch transaction.transactionState {
case .purchasing: break
case .purchased: goToAddCar(); queue.finishTransaction(transaction)
default: queue.finishTransaction(transaction)
}
}
}

func goToAddCar() {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "AddCar") as! AddCarViewController
UIApplication.shared.keyWindow?.rootViewController = controller
}

}

extension SKPaymentTransactionState {
func status() -> String {
switch self {
case .deferred: return "deferred"
case .failed: return "failed"
case .purchased: return "purchased"
case .purchasing: return "purchasing"
case .restored: return "restored"
}
}
}

最佳答案

在主线程上运行购买弹出窗口。您希望快速发生的任何 UI 更改都应该放在 DispatchQueue.main block 中。例如。在 func goToAddCar() 内部,将代码包装在 DispatchQueue.main.async block 中,如下所示

    DispatchQueue.main.async{

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier:
"AddCar") as! AddCarViewController
UIApplication.shared.keyWindow?.rootViewController = controller
}

关于ios - 应用内购买弹出窗口不会立即显示,而是会出现延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57595936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com