StoreKit for Swift:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 StoreKit,为什么需要它?

\n\n

StoreKit 是 Apple 内置的框架,用于在 iOS、macOS、watchOS 和 tvOS 应用中实现应用内购买和订阅。它为开发者提供了与 App Store 交互的统一接口:请求产品、处理交易、验证访问权限以及管理订阅。

\n\n

StoreKit 解决的主要任务:

\n
    \n
  • 变现 — 销售数字商品(高级访问权限、虚拟货币、内容)。
  • \n
  • 订阅管理 — 自动续订、状态、试用期。
  • \n
  • 安全性 — 通过 App Store 处理付款,无需向开发者传输银行卡数据。
  • \n
  • 恢复购买 — 用户可以将购买内容转移到其他设备。
  • \n
\n\n

重要提示:StoreKit 不是第三方库,而是 Xcode SDK 的一部分。无需单独安装,但需要在 App Store Connect 中进行配置并添加到项目中。

\n\n

安装与配置

\n\n

由于 StoreKit 是系统框架,其安装只需在 Xcode 项目中连接即可:

\n\n
    \n
  1. 在 Xcode 中打开您的项目。
  2. \n
  3. 选择目标(您的应用)→ "General" 选项卡。
  4. \n
  5. 滚动到 "Frameworks, Libraries, and Embedded Content" 部分。
  6. \n
  7. 点击 "+" 并选择 StoreKit.framework。
  8. \n
  9. 确保 "Embed" 状态设置为 "Do Not Embed"。
  10. \n
\n\n

之后,在需要的文件中导入框架:

\n\n
import StoreKit
\n\n

同时,务必在 App Store Connect 中配置产品:

\n
    \n
  • 创建产品标识符(例如 com.example.premium)。
  • \n
  • 指定价格、本地化、类型(消耗品/非消耗品/订阅)。
  • \n
  • 对于订阅,配置订阅组和试用期。
  • \n
\n\n

快速上手与代码示例

\n\n

请求和购买产品的最小工作示例:

\n\n
import StoreKit\n\nclass StoreManager: NSObject, SKProductsRequestDelegate, SKPaymentTransactionObserver {\n    \n    static let shared = StoreManager()\n    private var products: [SKProduct] = []\n    \n    override private init() {\n        super.init()\n        SKPaymentQueue.default().add(self)\n    }\n    \n    // 1. 请求产品\n    func fetchProducts(productIDs: Set<String>) {\n        let request = SKProductsRequest(productIdentifiers: productIDs)\n        request.delegate = self\n        request.start()\n    }\n    \n    // 2. 获取产品的代理方法\n    func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {\n        self.products = response.products\n        for product in products {\n            print("找到产品: \\(product.localizedTitle) — \\(product.price)")\n        }\n    }\n    \n    // 3. 购买\n    func purchase(product: SKProduct) {\n        let payment = SKPayment(product: product)\n        SKPaymentQueue.default().add(payment)\n    }\n    \n    // 4. 处理交易\n    func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {\n        for transaction in transactions {\n            switch transaction.transactionState {\n            case .purchased:\n                // 解锁内容\n                print("购买成功: \\(transaction.payment.productIdentifier)")\n                SKPaymentQueue.default().finishTransaction(transaction)\n            case .failed:\n                if let error = transaction.error {\n                    print("购买错误: \\(error.localizedDescription)")\n                }\n                SKPaymentQueue.default().finishTransaction(transaction)\n            case .restored:\n                print("购买")                    

推荐