我在我的應用程式中使用應用內購買,
代碼:我在登錄和功能中添加了 IAP,并在 appstore 連接中添加了訂閱,并在下面的代碼中使用。它在 iOS 13 中作業正常,但它在 .. 中崩潰了iOS 15.2.. 就像下面的輸出螢屏顯示然后它崩潰了
我DispatchQueue.main.async在某些地方添加了但仍然沒有運氣它崩潰......對于IAP我也沒有得到足夠的refarances,請指導我
import StoreKit
import UIKit
class BuyProfileBoosterVC: UIViewController, SKPaymentTransactionObserver, SKProductsRequestDelegate {
var products = [SKProduct]()
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
products = response.products
showSingleButtonWithMessage(title: "Alert", message: "You have total \(products.count) product in App Store connect.", buttonName: "Okay")
}
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.main.async{
SKPaymentQueue.default().add(self)
}
}
enum Products: String, CaseIterable {
case threeDays
}
// MARK: - Popup related
func fetchProduct() {
let request = SKProductsRequest(productIdentifiers: Set(Products.allCases.compactMap({$0.rawValue})))
request.delegate = self
request.start()
}
func buyProduct(productId: String) {
fetchProduct()
DispatchQueue.main.async{
if SKPaymentQueue.canMakePayments() {
let paymentRequest = SKMutablePayment()
paymentRequest.productIdentifier = productId
SKPaymentQueue.default().add(paymentRequest)
}
else {
self.view.makeToast("You can't make payment.")
}
}
}
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
DispatchQueue.main.async
{
transactions.forEach { (transaction) in
switch transaction.transactionState {
case .purchasing: self.view.makeToast("Transaction started.")
case .purchased, .restored: self.view.makeToast("Transaction successful/restored.")
case .failed, .deferred: self.view.makeToast("Transaction failed.")
@unknown default: self.view.makeToast("Unknown state.")
}
}
}
}
@IBAction func jumpBuyAction(_ sender: UIButton) {
DispatchQueue.main.async {
self.fetchProduct()
self.buyProduct(productId: "threeDay")
}
}
}
錯誤:
由于未捕獲的例外“NSInternalInconsistencyException”而終止應用程式,原因:“在從主執行緒訪問布局引擎后,不得從后臺執行緒對其進行修改。” 以 NSException 型別的未捕獲例外終止
出畫面
uj5u.com熱心網友回復:
Apple Developer Documentation是 IOS 中 IAP 的最佳資源,但如果您想找到一個相對簡單的教程,也可以查看本教程。
關于崩潰,因為您的代碼中沒有太多可用資訊,但它可能會在showSingleButtonWithMessage函式呼叫時崩潰,這應該在主執行緒上完成(假設這顯示了一個警報控制器)以及它被呼叫的位置您的代碼,它可能會在后臺執行緒上被呼叫。嘗試在主執行緒上呼叫它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524214.html
上一篇:多個意圖不會運行
