StoreKit 2 和 Xcode 内购测试的新变化
What's new in StoreKit 2 and StoreKit Testing in Xcode
2023年6月5日
一句话判断
App Store 推广购买、Billing Issue 消息、SHA-256 迁移——StoreKit 2 今年带来了多项实用更新。
这场 Session 讲了什么
Session 覆盖了 StoreKit 2 的三个主要更新领域。首先是 App Store 推广购买(Promoted In-App Purchases)的新 Swift API,从 iOS 16.4 开始可用。开发者可以监听用户在 App Store 中发起的推广购买意图,还可以在设备端自定义推广产品的顺序和可见性。
其次是数据模型的增强。Transaction 模型新增了 storefront、storefrontCountryCode 和 reason 字段。RenewalInfo 模型新增了 nextRenewalDate 字段。这些新字段在 Xcode 15 中构建的 app 可用,且大部分向前兼容旧版本系统。
StoreKit Messages 新增了 billingIssue 消息类型,当订阅因账单问题续订失败时触发。安全方面,StoreKit 正在将 receipt 签名证书从 SHA-1 迁移到 SHA-256。
值得深挖的点
推广购买的自定义 API 提供了灵活的控制。你可以获取当前推广顺序、设置自定义顺序、单独控制某个产品的可见性(visible/hidden/default)。这意味着你可以根据用户的游戏进度或使用状态来动态调整 App Store 中展示的推广产品。
Receipt 签名证书的 SHA-256 迁移时间线很明确:sandbox 从 6 月 20 日开始,所有新 app 和更新从 8 月 14 日开始。使用 StoreKit 2 的开发者不需要做任何事,但如果你的 app 进行本地 receipt 验证,需要确认它能正确处理新证书。
代码片段
// 监听推广购买意图
func listenForPurchaseIntents() async {
for await intent in PurchaseIntent.intents {
let product = intent.product
do {
try await product.purchase()
} catch {
// 保存意图,稍后处理
}
}
}
// 自定义推广产品顺序
Product.PromotionInfo.updateProductOrder([
"com.app.premium",
"com.app.starter"
])
// 控制单个产品可见性
Product.PromotionInfo.updateProductVisibility(
.hidden,
for: "com.app.purchased_item"
)
最佳实践
- 实现 PurchaseIntent 监听,不要错过 App Store 中的购买入口
- 根据用户状态动态调整推广产品的顺序和可见性
- 使用 billingIssue 消息处理订阅续订失败的场景
- 如果进行本地 receipt 验证,尽快验证 SHA-256 兼容性
- StoreKit 2 用户无需关心证书迁移
还有什么值得关注
- SwiftUI 的 StoreView、ProductView 和 SubscriptionStoreView 是全新的内购 UI 方案
- StoreKit Testing in Xcode 的增强让测试内购更加方便
- 详细的迁移时间线可在 Apple Developer 网站查看