You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

StoreKit 2:如何正确使用自动续订订阅?

StoreKit 2 自动续订订阅完整实现指南

首先明确:仅靠SubscriptionStoreView和.onInAppPurchaseCompletion、.subscriptionStatusTask、.manageSubscriptionsSheet这几个修饰符不足以支撑完整的生产环境订阅功能,StoreKit 2只是帮你简化了UI层和基础交易流程,核心的业务逻辑、权益管理、合规验证都需要你自己补充。下面是具体的实现要点和完整流程:

一、先搞懂你用的核心组件到底做了啥

  • SubscriptionStoreView:负责拉取App Store Connect中配置的订阅商品(月度/年度Pro),生成标准的订阅选择UI,调起苹果官方支付界面,不用你自己写商品列表和购买按钮。
  • .onInAppPurchaseCompletion:购买操作结束后的回调入口,你需要在这里处理成功/失败的结果,比如给用户反馈、更新本地状态。
  • .subscriptionStatusTask:实时监听用户订阅状态的变化(续订、过期、取消、升级/降级),是同步权益的核心回调。
  • .manageSubscriptionsSheet:快速调起苹果官方的订阅管理界面,满足苹果审核要求的“订阅管理入口”需求。

二、必须补充的关键业务逻辑

1. 订阅权益的精准管理

  • 不能只依赖购买完成回调:订阅状态会因为自动续订失败、用户手动取消、苹果退款等情况发生变化,必须通过subscriptionStatusTask实时将状态同步到本地存储(比如UserDefaults、Core Data)。
  • APP启动必查状态:每次APP启动时,主动触发一次订阅状态检查,确保用户打开APP时的权益是最新的,避免本地状态和实际订阅状态不一致。
  • 权益判断以状态为准:所有Pro功能的解锁逻辑,都要基于本地存储的订阅状态(比如是否处于有效期内),而不是仅记录“用户购买过”。

2. 交易验证不可少

  • StoreKit 2会在客户端自动验证交易的合法性,但生产环境必须做服务器端验证:
    • 客户端将交易的JWSTransaction(或transactionID)发送到你的后端。
    • 后端调用苹果的App Store Server API,验证订阅的有效性、到期时间、续订状态、是否退款等信息。
    • 最终的权益判断要以服务器验证结果为准,防止越狱设备篡改本地数据绕过付费。

3. 异常场景的处理

  • 购买失败处理:在.onInAppPurchaseCompletion中捕获StoreError,给用户明确的提示(比如“支付失败,请检查账户余额”“商品暂时不可用”)。
  • 订阅状态异常处理:当subscriptionStatusTask检测到订阅过期、取消时,及时收回Pro权益,弹出引导用户重新订阅的提示;检测到续订成功时,更新有效期。
  • 退款与S2S通知:必须在后端监听苹果的Server-to-Server(S2S)通知,一旦收到退款通知,立即收回用户的Pro权益,避免用户退款后仍能使用付费功能。

4. 合规与用户体验

  • 强制提供订阅管理入口:除了用.manageSubscriptionsSheet,还要在APP的设置页、用户中心等明显位置添加“管理订阅”按钮,符合苹果审核规则。
  • 清晰的订阅说明:在SubscriptionStoreView展示前,要明确告知用户订阅价格、续订规则、取消方式(比如“月度订阅¥12,自动续订,可在Apple ID设置中取消”)。
  • 优惠/试用的处理:如果设置了免费试用或 introductory offer,要确保SubscriptionStoreView正确展示,同时在代码中处理试用资格判断(比如用户是否已使用过试用)。

三、完整的运行流程

  1. APP初始化

    • 配置SubscriptionStoreView的商品ID(必须和App Store Connect中创建的订阅组商品ID一致)。
    • 主动调用一次订阅状态检查,同步本地用户的Pro权益状态。
  2. 用户订阅流程

    • 用户进入订阅页面,SubscriptionStoreView自动加载并展示月度/年度订阅选项。
    • 用户选择订阅计划,调起苹果支付界面,完成支付操作。
  3. 购买结果处理

    • .onInAppPurchaseCompletion触发:
      • 购买成功:更新本地用户状态为Pro,解锁付费功能,同时将交易信息发送到后端做服务器验证。
      • 购买失败:提示用户错误原因,引导重试。
  4. 订阅状态维护

    • .subscriptionStatusTask持续监听状态变化:
      • 续订成功:更新本地订阅有效期,确保权益持续有效。
      • 订阅过期/取消:收回Pro权益,提示用户重新订阅。
      • 订阅升级/降级:更新本地的订阅计划信息,同步权益级别。
  5. 用户管理订阅

    • 用户点击“管理订阅”按钮,通过.manageSubscriptionsSheet调起苹果官方管理界面,修改订阅计划或取消订阅,状态变化会通过subscriptionStatusTask同步到APP。
  6. 后端同步与S2S通知

    • 后端接收客户端的交易信息,调用苹果Server API验证并存储订阅信息。
    • 后端监听S2S通知,处理退款、续订失败等事件,同步用户账户状态,必要时通知客户端更新。

四、测试关键要点

  • 使用苹果沙盒测试账号进行测试,禁止用真实账号。
  • 测试自动续订:沙盒环境下订阅会缩短续订周期(比如月度订阅5分钟后续订),验证状态是否自动更新。
  • 测试退款流程:在App Store Connect沙盒测试中发起退款,验证APP和后端是否正确收回权益。
  • 测试订阅升级/降级:模拟用户从月度转年度,验证状态和权益是否正确切换。

内容的提问来源于stack exchange,提问作者KatM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:43:12