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 | 表示交易状态,如 purchased 、failed 、restored 等。 |
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 的使用流程可以大致总结为以下几步:
获取商品列表(产品管理):
- 使用
SKProductsRequest
请求来自 App Store 的商品元信息并使用SKProduct
解析。
- 使用
启动购买流程(交易与购买流程):
- 使用
SKPayment
创建支付请求,并通过SKPaymentQueue
添加到交易队列开始购买。
- 使用
验证交易合法性(收据验证):
- 使用 Apple 提供的收据系统验证购买记录的合法性(推荐通过服务器端完成验证)。
恢复已购买内容(订阅与恢复):
- 使用
SKPaymentQueue.restoreCompletedTransactions()
从用户购买历史记录中恢复交易。
- 使用
管理订阅(用户订阅状态):
- 检索和处理用户的订阅状态、试用期以及到期时间,提供相关的用户提示。
结合 App Store 功能:
- 提示用户评分或评论 (
SKStoreReviewController
); - 将商店界面嵌入应用内展示 (
SKOverlay
)。
- 提示用户评分或评论 (
测试和调试:
- 在沙箱环境中测试购买逻辑或模拟交易过程。
StoreKit 的设计理念总结 #
安全性优先:
StoreKit 的购买和验证流程使用 Apple 的安全加密设计,确保用户支付和数据的合法性。用户隐私保护:
完全由 Apple 处理用户付款和收据,开发者无权直接访问支付和敏感信息。易于集成:
专注于构建购买流程(IAP),轻松适配单次购买、订阅模式和促销活动。国际化支持:
自动提供多语言、多货币的支持,开发者无需额外处理。