StoreKit — ProductView
This article is extracted from the chat log with AI. Please identify it with caution.

StoreKit 的 ProductView 是苹果在 StoreKit 2 框架中引入的一个 SwiftUI 组件,用于在应用中快速集成和展示应用内购买(In-App Purchase)的商品信息界面。它简化了商品展示和购买流程的代码实现,帮助开发者以极少的代码量构建符合苹果设计规范的商店界面。


核心功能 #

  1. 商品信息展示
    自动显示商品的名称、描述、价格和购买按钮,无需手动处理本地化或货币格式。
  2. 购买集成
    内置购买逻辑,用户点击按钮即可完成购买,无需开发者手动处理交易流程。
  3. 样式自适应
    根据平台(iOS、macOS 等)和上下文环境自动适配界面风格。

基本用法 #

1. 初始化方式 #

ProductView 支持通过 Product ID 或预获取的 Product 对象初始化:

import SwiftUI
import StoreKit

// 通过 Product ID 初始化(推荐动态加载)
struct ContentView: View {
    var body: some View {
        ProductView(id: "com.yourcompany.product1")
    }
}

// 通过 Product 对象初始化(需提前获取商品信息)
struct ContentView: View {
    let product: Product // 通过 StoreKit 的 Product 模型获取
    
    var body: some View {
        ProductView(product: product)
    }
}

2. 展示多个商品 #

使用 ProductView(id:)ProductView(product:) 结合循环,可展示多个商品:

struct StoreView: View {
    let productIDs = ["com.yourcompany.product1", "com.yourcompany.product2"]
    
    var body: some View {
        VStack {
            ForEach(productIDs, id: \.self) { id in
                ProductView(id: id)
                    .padding()
            }
        }
    }
}

3. 处理购买结果 #

通过 onInAppPurchaseCompletion 回调监听购买状态:

ProductView(id: "com.yourcompany.product1")
    .onInAppPurchaseCompletion { product, result in
        switch result {
        case .success(.success):
            print("购买成功: \(product.id)")
        case .failure(let error):
            print("购买失败: \(error.localizedDescription)")
        default:
            break
        }
    }

高级配置 #

1. 自定义按钮类型 #

通过 productViewStyle 修改购买按钮样式(需 iOS 16+):

ProductView(id: "com.yourcompany.product1")
    .productViewStyle(.compact) // 支持 .compact(紧凑)或 .regular(常规)

2. 订阅商品展示 #

对订阅类商品自动显示续订周期和优惠信息:

// 自动适配订阅计划展示
ProductView(id: "com.yourcompany.monthly_subscription")

3. 自定义展示内容 #

通过 storeButton 在自定义位置嵌入购买按钮:

HStack {
    VStack(alignment: .leading) {
        Text("自定义商品标题")
        Text("自定义描述")
    }
    Spacer()
    StoreView(id: "com.yourcompany.product1") { product in
        // 自定义按钮样式
        PurchaseButton(product: product)
    }
}

使用前提 #

  1. 配置商品信息
    App Store Connect 中创建应用内购买项目,并确保状态为 “已批准”
  2. 沙盒测试
    在真机上使用沙盒账户测试,或在 Xcode 中通过 StoreKit 测试配置文件 模拟购买流程。
  3. 最低系统要求
    • iOS 15.0+
    • macOS 12.0+
    • SwiftUI 框架支持

常见问题 #

  • 商品无法加载?
    检查网络权限、商品 ID 是否匹配,确保商品在 App Store Connect 已审核通过。
  • 如何本地测试?
    在 Xcode 项目设置中启用 StoreKit Testing,使用 SKTestSession 模拟购买环境。
  • 样式不符合预期?
    ProductView 依赖系统样式,确保应用未强制覆盖 SwiftUI 的默认样式。

通过 ProductView,开发者可以快速构建符合 App Store 规范的购买界面,同时减少交易处理代码量。更多细节可参考苹果官方文档:Displaying In-App Purchases with StoreKit

本文共 948 字,创建于 May 4, 2025
相关标签: Xcode, ByAI, SwiftUI, StoreKit