StoreKit 的 ProductView
是苹果在 StoreKit 2 框架中引入的一个 SwiftUI 组件,用于在应用中快速集成和展示应用内购买(In-App Purchase)的商品信息界面。它简化了商品展示和购买流程的代码实现,帮助开发者以极少的代码量构建符合苹果设计规范的商店界面。
核心功能 #
- 商品信息展示
自动显示商品的名称、描述、价格和购买按钮,无需手动处理本地化或货币格式。 - 购买集成
内置购买逻辑,用户点击按钮即可完成购买,无需开发者手动处理交易流程。 - 样式自适应
根据平台(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)
}
}
使用前提 #
- 配置商品信息
在 App Store Connect 中创建应用内购买项目,并确保状态为 “已批准”。 - 沙盒测试
在真机上使用沙盒账户测试,或在 Xcode 中通过 StoreKit 测试配置文件 模拟购买流程。 - 最低系统要求
- 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。