StoreKit|在 App Store Connect 中设置促销优惠
了解如何在 App Store Connect 中为 App 订阅设置不同的促销优惠方式。

苹果提供了一系列与 App Store、StoreKit 相关的资源,帮助建议开发者构建收费体系、推广产品,推荐查看:



推介促销优惠(Introductory Offer)

推介促销优惠是指在订阅的初始阶段,提供的限时折扣价格或免费试用。
- 需要设置生效时间段,优惠会在选定结束日期的具体时间终止,不是永久生效。
- 每个订阅组每位客户仅限使用一次介绍性优惠。
在 App Store Connect 中,每个订阅产品可设置一项推介促销优惠。每个订阅群组可设置多项优惠。对于用户而言,在每个订阅群组中,新老用户都只能享受一项推介促销优惠。例如,如果用户先享受了免费试用,然后升级到了同一订阅群组中另一个提供免费试用的订阅产品,则无法再次享受该订阅的推介促销优惠。

入门优惠分为三种类型:
- 随用随付
- 提前支付
- 免费试用
创建优惠之后,无法修改。只能删除后重新创建。
免费试用(Free trail)

SKProductDiscount.PaymentMode.freeTrial
值:表示免费试用
优惠类型。
在这种推介促销优惠中,新的订阅用户在特定时限内可以免费访问相应内容。订阅会立即生效,但在免费试用期结束前,不会向订阅用户收取费用。

常见为 Paywall 中提供的「前三天/一周免费试用」。在 Apple TV、Apple Music 提供的「三个月免费试用」,也使用这种方式。

随用随付(Pay as you go)

SKProductDiscount.PaymentMode.payAsYouGo
值:表示随用随付优惠类型。
在这种推介促销优惠中,新的订阅用户在特定时限的每个结算周期享有推介促销价 (例如,前 3 个月享受每月 1.99 美元的订阅价格)。


如上图所示,会提示前三个月是优惠价。到期后是全价订阅。
提前支付(Pay up front)

SKProductDiscount.PaymentMode.payUpFront
值:表示提前支付优惠类型。
和随用随付非常类似,但设定的优惠价格包含全部优惠期(例如前三个月),会一次性支付,而不是每月支付。到期之后,每月按照全额收费。


如上图所示,0.99 美元的包含 3 个月的订阅时间。如果你想每月按照 0.99 美元收费,在设置价格是,应该设置为 0.99 * 3 美元。
优惠代码(offer-codes)

优惠代码的类型与推介促销优惠一致。使用优惠代码可以实现:
- 免费兑换订阅会员。最短 3 天,最长 1 年。
- 兑换前三个月的优惠价格。支持按月付费,或一次性支付 3 个月费用。
一次性使用代码 vs 自定义代码
一次性使用代码(One-time-use codes)

创建之后,会提供一个下载功能,你可以下载包含所有 Code 的 csv
文件:

自定义代码(Custom codes)

- 适合需要大规模分发的活动。
- 可选设置最大兑换限制、过期日期。
通过编程的方式按需创建优惠代码
目前只能在 App Store Connect 网页中创建优惠码。
创建完成之后,可以下载 csv
文件,并在编程中使用。
在 Xcode 中测试优惠代码
通过使用 .offerCodeRedemption(isPresented:onCompletion:)
修饰器,可以打开一个优惠代码兑换页面(由系统创建)。
在本地测试环境,该窗口无需输入代码,可以直接选择任意订阅选项。并在弹出的支付窗口中,可以看到对应 Code 提供的优惠信息。

具体可以查看我在这篇文章中的讲解:

由于 Store Kit 测试仅为本地测试,建议在应用上架 App Store 后,向用户分发优惠码前,同样在生产环境中测试优惠码功能。
回头客优惠(win-back-offers)
必须至少上线一个带订阅功能的版本之后,才能创建该优惠。

促销优惠(promo-offers)
哪种促销优惠方式最佳?
What is the best way to add in-app purchase discounts for non-consumable products?
by u/tedsomething in iOSProgramming