首页 > 解决方案 > 某些设备上无法进行应用内购买交易

问题描述

我一直在两台设备上测试我的应用内购买:iPhone 11 Pro 和 iPad Air(均为 IOS 13)。在 iPad 上,当我尝试购买应用内购买时,我会被要求输入我的 Apple ID 和密码,但当我尝试在手机上购买时,什么也没有发生。两台设备都使用相同的沙盒帐户。关于为什么会发生这种情况的任何想法?

这是我的应用内购买的代码:

var product: SKProduct?
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        buyButton.isEnabled = false
        buyButton.alpha = 0.5
        
        
        
        if UserDefaults.standard.bool(forKey: "isUnlimited") == false {
            SKPaymentQueue.default().add(self)
            getPurchaseInfo(productIDs: [productID])
        }
        
        
        
        
        
    }
    
    @IBAction func buy() {
        
        let payment = SKPayment(product: product!)
        SKPaymentQueue.default().add(payment)
    }
    
    
    
    func getPurchaseInfo(productIDs: [String]) {
        
        if SKPaymentQueue.canMakePayments() {
            
            let request = SKProductsRequest(productIdentifiers: Set(productIDs))
            request.delegate = self
            request.start()
            
        }
        else {
            
            DispatchQueue.main.async {
                let alert = UIAlertController(title: "In-App Purchases Not Enabled", message: "Please enable In-App Purchases in your settings.", preferredStyle: .alert)
                
                alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
                
                self.present(alert, animated: true)
            }
            
            
        }
        
    }
    
    // checks if product exists:
    
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        
        let products = response.products
        
        if products.count != 0 {
            
            product = products[0]
            
            DispatchQueue.main.async {
                self.buyButton.isEnabled = true
                self.buyButton.alpha = 1
            }
            
        }
        else {
            
            DispatchQueue.main.async {
                let alert = UIAlertController(title: "Product Not Found", message: "Please make sure that you are connected to the Internet.", preferredStyle: .alert)
                
                
                alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
                
                self.present(alert, animated: true)
            }
            
            
        }
        
        let invalids = response.invalidProductIdentifiers
        
        for product in invalids {
            print("product not found: \(product)")
        }
        
    }
    
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        
        for transaction in transactions {
            
            switch transaction.transactionState {
            case SKPaymentTransactionState.purchased:
                SKPaymentQueue.default().finishTransaction(transaction)
                self.unlockPurchase()
                DispatchQueue.main.async {
                    self.buyButton.isEnabled = false
                    self.buyButton.alpha = 0.5
                    
                    let alert = UIAlertController(title: "Thank You For Your Purchase!", message: "The Unlimited Access Pass has successfully been bought.", preferredStyle: .alert)
                    
                    alert.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
                    
                    self.present(alert, animated: true)
                }
                
            case SKPaymentTransactionState.failed:
                SKPaymentQueue.default().finishTransaction(transaction)
               
            default:
                break
            }
            
        }
        
    }
    
    func unlockPurchase() {
        UserDefaults.standard.set(true, forKey: "isUnlimited")
    }

标签: iosswift

解决方案


推荐阅读