Frameworks — StoreKit

StoreKit 框架的体系结构概述 #

StoreKit 是 Apple 提供的一套框架,用于开发和管理 应用内购买 (In-App Purchase, IAP) 以及与 App Store 相关的功能。主要用于销售虚拟物品(例如订阅、游戏内货币、解锁功能等)以及处理 App Store 的相关交互(如用户评价和评分请求)。

StoreKit 提供了一套安全、高效的工具集,帮助开发者管理产品的购买流程、交易信息验证、订阅管理以及 App Store 相关的交互任务,并确保用户隐私和支付安全。


StoreKit 的大分类结构 #

以下是 StoreKit 的主要模块和功能分类:

分类主要功能组成模块
产品管理获取应用内可购买的商品列表,并描述商品的元信息(价格、标题等)。SKProductsRequest, SKProduct
交易与购买流程处理 IAP 的购买操作,包括交易队列管理和新的交易处理。SKPaymentQueue, SKPayment, SKPaymentTransaction
订阅与恢复管理订阅和恢复已购买内容,支持用户恢复购买历史记录。SKReceiptRefreshRequest, SKPaymentQueue.restoreCompletedTransactions()
收据验证验证购买交易的合法性,支持本地验证和 Apple 服务器端验证。SKReceipt, Receipt Validation
价格和促销活动管理 IAP 的定价和折扣信息,向用户展示定制化的促销内容。SKProductDiscount, SKStorefront, SKOffer, SKPaymentDiscount
App Store 交互提供与 App Store 的直接交互功能,如评分请求弹窗、开发者页面展示等。SKStoreReviewController, SKOverlay, SKCloudServiceController
用户订阅状态检索和显示用户的订阅状态(如试用期、到期时间等)。App Store Server API, SKProduct.SubscriptionPeriod
家长控制与共享管理未成年人购买行为的请求授权以及 iCloud Family Sharing 共享机制。SKPaymentQueue.shouldAddStorePayment, Family Sharing
测试环境与调试工具提供沙箱环境和工具测试 IAP 流程,支持本地化错误排查。沙箱环境 (StoreKit Testing), Transaction Editor (Xcode 12+ 集成功能)

接下来,我们将对各大模块及其子模块进行详细说明,用表格列出其功能结构。


1. 产品管理 #

子模块功能
SKProductsRequest用于从 App Store 获取 IAP 商品列表(如虚拟货币或订阅)。
SKRequestDelegate响应产品请求的回调,处理成功或失败的商品列表返回。
SKProduct表示单个 IAP 商品,包括名称、价格、描述和订阅信息等元数据。
SKStorefront用于确定用户的区域和货币单位(如国家/地区)。
localizedTitle / localizedDescription产品的标题和描述信息(根据用户本地化设置适配)。

2. 交易与购买流程 #

子模块功能
SKPaymentQueue交易队列,负责管理购买的整个生命周期,如新交易、完成交易等。
SKPayment表示用户的购买操作,包含商品 ID 和数量。
SKPaymentTransaction表示单次的交易,包含状态(成功、失败、恢复)、产品标识符以及收据等交易信息。
SKTransactionState表示交易状态,如 purchasedfailedrestored 等。
add(SKPayment)将购买请求添加到队列以开始购买操作。

3. 订阅与恢复 #

子模块功能
SKPaymentQueue.restoreCompletedTransactions()恢复用户所有未完成或者之前购买的内容,可用于重新下载已购买内容。
SKReceiptRefreshRequest请求更新用户的购买收据,用于恢复或验证用户的订阅状态。
SKRequestDelegate处理恢复和更新操作的结果回调。

4. 收据验证 #

子模块功能
SKReceipt包含用户购买交易的基础信息,用于验证购买行为的合法性。
本地验证解析收据文件(位于设备中的 appStoreReceipt 文件)并验证信息,包括商品 ID、金额、有效性等。
服务器验证将收据发送到 Apple 的服务器进行验证(推荐方式,安全性更高)。

5. 价格和促销活动 #

子模块功能
SKProductDiscount表示商品的促销优惠信息(如订阅的限时折扣价格)。
SKPaymentDiscount针对促销价格(如订阅折扣)的支付信息类,用于指定促销购买交易。
SKOffer展示优惠券或促销活动,与 StoreKit 的价格促销策略集成。

6. App Store 交互 #

子模块功能
SKStoreReviewController提示用户发送 App 评分或评论,内置非强制性的评分弹窗。
SKOverlay在 App 内部直接显示来自 App Store 的内容页面(如展示特定应用详情页)。
SKCloudServiceController管理和访问用户的 Apple Music 服务权限(如播放、搜索权限)。

7. 用户订阅状态 #

子模块功能
App Store Server API提供用户当前订阅状态的信息,如试用期剩余时间、订阅是否处于续费状态或取消状态等。
SKProduct.SubscriptionPeriod描述订阅的周期(如按月、按周)。
Transaction.currentEntitlement检索当前用户的订阅或购买权限状态。

8. 家长控制与共享 #

子模块功能
SKPaymentQueue.shouldAddStorePayment用于支持家长批准未成年人购买行为的协议。
iCloud Family Sharing允许用户与家庭成员共享购买的内容(例如订阅和其他 IAP 产品)。

9. 测试环境与调试工具 #

子模块功能
StoreKit Testing使用沙箱 (Sandbox) 和 Xcode 测试环境模拟真实 IAP 流程。
Transaction Editor (Xcode 12+ 集成功能)允许开发者在调试过程中生成自定义的交易,模拟购买、订阅和恢复情景。

StoreKit 的使用流程总结 #

StoreKit 的使用流程可以大致总结为以下几步:

  1. 获取商品列表(产品管理):

    • 使用 SKProductsRequest 请求来自 App Store 的商品元信息并使用 SKProduct 解析。
  2. 启动购买流程(交易与购买流程):

    • 使用 SKPayment 创建支付请求,并通过 SKPaymentQueue 添加到交易队列开始购买。
  3. 验证交易合法性(收据验证):

    • 使用 Apple 提供的收据系统验证购买记录的合法性(推荐通过服务器端完成验证)。
  4. 恢复已购买内容(订阅与恢复):

    • 使用 SKPaymentQueue.restoreCompletedTransactions() 从用户购买历史记录中恢复交易。
  5. 管理订阅(用户订阅状态):

    • 检索和处理用户的订阅状态、试用期以及到期时间,提供相关的用户提示。
  6. 结合 App Store 功能:

    • 提示用户评分或评论 (SKStoreReviewController);
    • 将商店界面嵌入应用内展示 (SKOverlay)。
  7. 测试和调试:

    • 在沙箱环境中测试购买逻辑或模拟交易过程。

StoreKit 的设计理念总结 #

  1. 安全性优先:
    StoreKit 的购买和验证流程使用 Apple 的安全加密设计,确保用户支付和数据的合法性。

  2. 用户隐私保护:
    完全由 Apple 处理用户付款和收据,开发者无权直接访问支付和敏感信息。

  3. 易于集成:
    专注于构建购买流程(IAP),轻松适配单次购买、订阅模式和促销活动。

  4. 国际化支持:
    自动提供多语言、多货币的支持,开发者无需额外处理。

本文共 1979 字,创建于 Jan 9, 2025
相关标签: Xcode