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

iOS StoreKit优惠码兑换Sheet预填充异常问题求助

优惠码兑换Sheet无输入框问题解决方案

问题场景

我在Xcode中创建了Product.StoreKit,其中的订阅产品关联了3个Offer Codes。尝试通过两种方式打开优惠码兑换Sheet:

  • 使用SKPaymentQueue API:
if #available(iOS 14.0, *) { 
     paymentQueue.presentCodeRedemptionSheet() 
}
  • 使用SwiftUI的offerCodeRedemption修饰符:
.offerCodeRedemption(isPresented: $presentOfferCodeSheet) { result in
            switch result {
            case .success:
                print("***********Offer code redemption successful.")
                presentOfferCodeSheet = false
            case .failure(let error):
                print("Offer code redemption failed: \(error.localizedDescription)")
            }
        }

但两种方式打开的Sheet都只预填充了优惠码列表,没有用户手动输入优惠码的文本框,不符合预期。


问题根因

出现这种现象是因为你在App Store Connect中创建的Offer Code类型为「自动兑换(Auto-Redeemable)」。Apple的设计逻辑如下:

  • 自动兑换类型优惠码:直接在兑换Sheet中列出,用户点击即可完成兑换,无需手动输入。
  • 手动兑换类型优惠码:兑换Sheet会显示输入框,允许用户自行输入优惠码。

修复步骤

  1. 登录App Store Connect,进入你的应用页面,选择「功能」>「订阅」。
  2. 找到目标订阅产品,进入其「优惠码」管理界面。
  3. 查看已创建的3个Offer Codes的类型,将需要用户手动输入的优惠码修改为**「手动兑换」**;或直接创建新的手动兑换类型优惠码。
  4. 确认优惠码已正确关联到目标订阅产品,且处于有效状态。
  5. 使用App Store Sandbox测试账号重新测试兑换流程。

额外验证点

  • 确保测试设备登录的是Sandbox测试账号,而非正式App Store账号。
  • 如果确实需要展示输入框,必须使用手动兑换类型的优惠码——自动兑换类型无法触发输入框展示,这是Apple的默认行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:46:00