What's new in StoreKit 2 and StoreKit Testing in Xcode
Developer Tools 进阶 20m

StoreKit 2 和 Xcode 内购测试的新变化

What's new in StoreKit 2 and StoreKit Testing in Xcode

2023年6月5日

在 Apple 官方观看视频

一句话判断

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 网站查看
WWDC 2023