以下是一个 iOS Swift 内购代码示例,涵盖了从 StoreKit 框架导入到交易处理、产品请求以及错误处理的完整流程,并提供了最佳实践和注意事项,帮助开发者轻松实现应用内购功能。

首先,导入 StoreKit 框架:

import StoreKit

然后,实现 SKPaymentTransactionObserver 协议,用于处理交易事件:

class ViewController: UIViewController, SKPaymentTransactionObserver {
    override func viewDidLoad() {
        super.viewDidLoad()
        SKPaymentQueue.default().add(self)
    }
    
    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            switch transaction.transactionState {
            case .purchased:
                // 处理购买成功的逻辑
                completeTransaction(transaction)
            case .failed:
                // 处理购买失败的逻辑
                failedTransaction(transaction)
            case .restored:
                // 处理已购买过的恢复逻辑
                restoreTransaction(transaction)
            case .deferred:
                // 处理购买延迟的逻辑
                deferredTransaction(transaction)
            case .purchasing:
                // 购买进行中
                break
            @unknown default:
                break
            }
        }
    }
    
    func completeTransaction(_ transaction: SKPaymentTransaction) {
        // 完成交易后,将购买的产品提供给用户
        SKPaymentQueue.default().finishTransaction(transaction)
    }
    
    func failedTransaction(_ transaction: SKPaymentTransaction) {
        if let error = transaction.error {
            // 处理购买失败的错误信息
            print('购买失败:' + error.localizedDescription)
        }
        SKPaymentQueue.default().finishTransaction(transaction)
    }
    
    func restoreTransaction(_ transaction: SKPaymentTransaction) {
        // 恢复已购买的产品
        SKPaymentQueue.default().finishTransaction(transaction)
    }
    
    func deferredTransaction(_ transaction: SKPaymentTransaction) {
        // 处理购买延迟的逻辑
    }
}

接下来,创建一个 SKProductsRequest 对象,用于请求应用内购买产品的信息:

func requestProductInfo() {
    if SKPaymentQueue.canMakePayments() {
        let productIdentifiers: Set<String> = ['com.example.product1', 'com.example.product2']
        let productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
        productsRequest.delegate = self
        productsRequest.start()
    } else {
        // 用户禁用了应用内购买
    }
}

然后,实现 SKProductsRequestDelegate 协议,处理产品请求结果:

extension ViewController: SKProductsRequestDelegate {
    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
        let products = response.products
        if products.count > 0 {
            let product = products[0] // 可以根据需求选择产品
            let payment = SKPayment(product: product)
            SKPaymentQueue.default().add(payment)
        }
    }
    
    func request(_ request: SKRequest, didFailWithError error: Error) {
        // 请求产品信息失败
    }
}

最后,在需要进行内购的地方调用 requestProductInfo() 方法:

requestProductInfo()

以上代码是一个简单的 iOS Swift 内购代码示例,可以根据实际需求进行修改和扩展。注意,需要在开发者账号中配置应用内购买产品,并在代码中使用正确的产品标识符。

最佳实践:

  • 在 App Store Connect 中仔细配置产品,包括产品标识符、价格、描述等。
  • 确保产品标识符在代码中正确使用。
  • 处理各种交易状态,包括成功、失败、恢复、延迟等。
  • 在购买成功后,将购买的产品提供给用户。
  • 处理错误信息,并提供友好的提示给用户。
  • 遵循 Apple 的应用内购买指南,以确保应用符合 App Store 审核标准。

注意事项:

  • 内购功能需要在 App Store Connect 中配置,并且需要 Apple 审核。
  • 确保用户可以禁用应用内购买功能。
  • 提供清晰的购买流程,并确保用户理解购买内容。
  • 避免误导性宣传和促销。
  • 遵守 Apple 的开发者条款和条件。

通过遵循最佳实践和注意事项,开发者可以轻松实现安全的应用内购功能,为用户提供优质的应用体验。

iOS Swift 内购代码示例 - 完整指南及最佳实践

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

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