You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS中如何发起含免费试用期的IAP订阅购买请求?

解决iOS订阅免费试用无法触发的问题

嘿,我刚好碰到过类似的情况,给你梳理下解决办法:

问题根源

你直接用SKPayment(product:)创建支付请求时,系统不会自动应用产品的促销优惠(比如免费试用),必须显式指定对应的优惠参数才能触发试用流程。

具体解决方案

  1. 筛选月度产品的免费试用优惠
    每个SKProduct对象的discounts数组里包含了该产品所有已配置的促销优惠,你需要从中筛选出免费试用类型的优惠:
// 假设你已经成功获取到月度产品实例monthlyProduct
guard let freeTrialDiscount = monthlyProduct.discounts.first(where: {
    $0.type == .freeTrial
}) else {
    // 未找到免费试用优惠,执行普通订阅流程
    let regularPayment = SKPayment(product: monthlyProduct)
    SKPaymentQueue.default().add(regularPayment)
    return
}
  1. 创建带优惠的支付请求
    使用SKPayment的专用初始化方法init(product:discount:)来创建包含免费试用的支付请求:
let trialPayment = SKPayment(product: monthlyProduct, discount: freeTrialDiscount)
SKPaymentQueue.default().add(trialPayment)

几个关键检查点

  • 确认App Store Connect里的免费试用优惠已经配置完成并生效(新配置的优惠可能需要1-2小时同步到沙盒环境)
  • 测试时要用未订阅过该产品的沙盒账号(免费试用每个用户只能享受一次)
  • 可以先打印monthlyProduct.discounts,确认优惠信息已经正确加载到产品对象中

这样修改后,用户购买月度订阅时就会先触发1周的免费试用流程,而不是立即生效付费订阅啦。

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

火山引擎 最新活动