以下是一个使用 Swift 语言获取 iOS 内购产品的代码示例:

import StoreKit

class ViewController: UIViewController, SKProductsRequestDelegate {
    
    // 内购产品的产品标识符
    let productIdentifiers: Set<String> = ['com.example.product1', 'com.example.product2']
    
    // 内购产品的商品数组
    var products = [SKProduct]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 配置内购观察者
        SKPaymentQueue.default().add(self)
        
        // 请求内购产品
        requestProducts()
    }
    
    // 请求内购产品
    func requestProducts() {
        if SKPaymentQueue.canMakePayments() {
            let productRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
            productRequest.delegate = self
            productRequest.start()
        } else {
            print("用户禁用了应用内购买功能")
        }
    }
    
    // 收到内购产品的响应
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        if response.products.count > 0 {
            // 获取到内购产品
            products = response.products
        } else {
            print("没有找到内购产品")
        }
        
        if response.invalidProductIdentifiers.count > 0 {
            print("无效的产品标识符:(response.invalidProductIdentifiers)")
        }
    }
    
    // 购买内购产品
    func purchaseProduct(product: SKProduct) {
        let payment = SKPayment(product: product)
        SKPaymentQueue.default().add(payment)
    }
}

extension ViewController: SKPaymentTransactionObserver {
    
    // 监听内购交易状态
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchasing:
                print("购买中...")
            case .purchased:
                // 内购产品购买成功,处理交易
                completeTransaction(transaction: transaction)
            case .failed:
                // 内购产品购买失败,处理交易
                failTransaction(transaction: transaction)
            case .restored:
                // 内购产品恢复购买,处理交易
                restoreTransaction(transaction: transaction)
            case .deferred:
                print("交易延迟处理")
            @unknown default:
                print("未知状态")
            }
        }
    }
    
    // 处理购买成功的交易
    func completeTransaction(transaction: SKPaymentTransaction) {
        print("购买成功,交易标识符:(transaction.transactionIdentifier ?? "")")
        
        // 完成交易后,将交易从队列中移除
        SKPaymentQueue.default().finishTransaction(transaction)
    }
    
    // 处理购买失败的交易
    func failTransaction(transaction: SKPaymentTransaction) {
        print("购买失败,交易标识符:(transaction.transactionIdentifier ?? "")")
        
        if let error = transaction.error {
            print("购买失败错误信息:(error.localizedDescription)")
        }
        
        // 处理完失败交易后,将交易从队列中移除
        SKPaymentQueue.default().finishTransaction(transaction)
    }
    
    // 处理恢复购买的交易
    func restoreTransaction(transaction: SKPaymentTransaction) {
        print("恢复购买,交易标识符:(transaction.transactionIdentifier ?? "")")
        
        // 处理完恢复购买的交易后,将交易从队列中移除
        SKPaymentQueue.default().finishTransaction(transaction)
    }
}

productIdentifiers 变量中设置你的内购产品的产品标识符。然后,在 viewDidLoad() 方法中调用 requestProducts() 方法来请求内购产品。

purchaseProduct 方法中,你可以传入一个 SKProduct 对象来购买内购产品。

paymentQueue(_:updatedTransactions:) 方法中,你可以根据交易的状态来处理购买成功、购买失败和恢复购买的交易。

请确保你的项目中已经导入了 StoreKit 框架。


原文地址: https://www.cveoy.top/t/topic/qwEp 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录