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

StoreKit 2沙盒用户无法重复购买相同订阅问题求助

StoreKit 2 订阅降级无弹窗/状态未变更问题分析

针对你测试流程中遇到的「从lvl2订阅再次购买lvl1时无支付弹窗、返回.success但订阅未变更」的问题,结合StoreKit 2的订阅逻辑,可能的原因和排查方向如下:

可能原因

  • 订阅降级的延迟生效机制
    苹果订阅默认设置中,降级操作(从高等级订阅转为低等级)会在当前订阅周期结束后才生效,而非立即切换。此时调用lvl1的购买接口,StoreKit会直接返回.success(因为已成功安排降级),但当前活跃订阅仍为lvl2,系统设置中显示的是当前生效的订阅等级,需查看「下一个账单日期」对应的订阅计划才能看到lvl1的变更。

  • 未正确处理订阅状态的实时更新
    StoreKit 2中,订阅状态的变更不会仅通过Product.PurchaseResult返回,需主动监听事务更新或刷新订阅信息。若仅依赖购买结果的返回值,可能会错过实际的状态同步,导致误以为订阅未变更。

  • 事务未完成导致状态不同步
    购买返回.success后,必须调用transaction.finish()完成事务处理。若未执行此步骤,StoreKit可能不会将订阅状态同步到系统设置,也无法触发后续的状态更新回调。

  • 沙盒环境的状态同步延迟
    沙盒测试中,订阅状态的同步可能存在延迟,尤其是使用了订阅周期加速功能时。此时本地App的状态可能未及时刷新,而系统设置的操作走原生流程,同步效率更高。

排查与解决步骤

  • 检查订阅组的生效设置
    登录App Store Connect,进入你的订阅组配置页面,确认「降级选项」是「立即生效」还是「当前周期结束后生效」。若为后者,第三次购买lvl1后需等待当前lvl2周期结束才能看到变更。

  • 监听事务更新并处理状态
    实现Transaction.updates的监听逻辑,实时获取订阅状态变更:

    Task {
        for await transaction in Transaction.updates {
            if case let .success(verificationResult) = transaction {
                let transaction = verificationResult.payload
                // 更新本地订阅状态
                updateSubscriptionStatus(with: transaction)
                // 完成事务
                await transaction.finish()
            }
        }
    }
    
  • 购买后主动刷新订阅状态
    不要仅依赖PurchaseResult,购买完成后主动调用SubscriptionInfo刷新并获取最新状态:

    let purchaseResult = try await product.purchase()
    if case .success(let verificationResult) = purchaseResult {
        await verificationResult.payload.finish()
        // 刷新订阅信息
        let subscriptionInfo = try await SubscriptionInfo.shared.refresh()
        // 从subscriptionInfo中获取当前订阅状态
        let currentSubscriptions = subscriptionInfo.currentSubscriptions
    }
    
  • 验证沙盒测试流程
    重启测试设备和App,等待1-2分钟让沙盒状态同步;若使用了订阅周期加速,手动触发周期到期(可通过Xcode的「StoreKit测试工具」或系统设置的订阅管理操作),再查看订阅状态是否变更。

内容的提问来源于stack exchange,提问作者Nataliia.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:10:32