设置 12 个月承诺计划
要提供承诺计划,你需要一个年度 App Store 订阅、一个自定义付费墙,以及 Adapty SDK v4.3 或更高版本。流程无法展示该计划。
要让订阅者承诺订阅整年并按月付款,请在 App Store Connect 和 Adapty 中为您的年度产品添加 12 个月承诺计划。
开始之前
在实现承诺方案之前,请确认你已完成以下准备工作:
- 精准定位目标市场:承诺计划不适用于美国。在德国、以色列、南非和土耳其,订阅用户可以通过 Apple Support 立即取消。
- 精准定位目标系统版本:订阅用户需要 iOS 26.4 或更高版本,或相同版本的 iPadOS、macOS、tvOS 或 visionOS。请使用 Xcode 26.5 或更高版本构建应用。
- 精准定位目标价格区间:12 个月付款的总金额必须在年付订阅价格的 1 倍到 1.5 倍之间。
- 使用 Adapty SDK v4.3 或更高版本:在使用早期 SDK 版本的应用中,用户只能购买预付方案。
- 更新读取产品 ID 的代码:Webhooks、集成、数据导出和服务端 API 会将承诺计划的购买记录为
<product_id>:monthly。如果您的代码会处理产品 ID,请在第一笔承诺计划购买发生前更新相关逻辑。
1. App Store Connect 配置
- 在 App Store Connect 中打开一个年度订阅,或创建一个新订阅,时长设为 1 Year。
- 在 Availability 部分,在 1 Year Upfront 和 Monthly with 12-Month Commitment 下添加相同的国家/地区。Apple 仅在提供预付费计费的地区才提供承诺计费。反之则不要求:你可以在没有承诺计划的国家/地区提供预付方案。
- 在 Subscription Prices 部分,为你的基础地区设置预付价格(如果订阅尚未设置)。即使你只向用户展示承诺计划,Apple 也要求设置预付价格。
- 为你的基础地区设置月价格。月价格必须为预付价格的 1/12 到 1/8。例如,预付价格为 €59.99 时,月价格可设为 €5.00 到 €7.49。
App Store Connect 会根据您的基础地区价格自动计算其他国家/地区的价格。
如需完整操作说明,请参阅 Apple 的指南:提供按月付费的 12 个月承诺订阅。
2. Adapty 配置
要在自定义付费墙中显示承诺计划,请在 Adapty 中为年度产品启用该功能。如果你不使用自定义付费墙,可以跳过此步骤。
-
打开年度产品。如果该产品尚不存在,请创建并关联你在 App Store Connect 中设置的订阅。不要从 Adapty 推送新产品:这样会创建一个不含承诺计划的独立订阅。
-
打开 App Store 标签页,选择 Offer monthly payments with a 12-month commitment。
-
在弹出窗口中,从 Monthly price, USD 列表中选择与 App Store Connect 匹配的分期付款价格。该列表仅包含允许范围内的 App Store 价格点。此价格为参考值:Adapty 不会将其发送至 App Store Connect。
3. 设置优惠
在 App Store Connect 中,每个计费方案都有各自的新用户优惠、促销活动、赢回优惠和优惠码。针对预付款方案的优惠不适用于承诺方案。
- 免费试用及其他新用户优惠:在 App Store Connect 中,为承诺计划设置优惠。Adapty 会自动应用新用户优惠。新用户优惠结束后,订阅者的 12 个月承诺期正式开始。
- 促销活动与赢回优惠:在 App Store Connect 中,为承诺计划设置促销活动或赢回优惠。然后在 Adapty 中添加这些优惠,并将其 App Store plan 设置为 Monthly with 12-month commitment。付费墙中的每一行仅显示该计费方案对应的优惠。如果你不使用自定义付费墙,则无需将这些优惠添加到 Adapty。
- 优惠码:在 App Store Connect 中为承诺计划设置优惠码。
4. 添加到自定义付费墙
Apple 要求你在购买前同时展示分期价格和年度总价。
- 在自定义付费墙中,添加年度产品,并将其 Billing plan 设置为 Monthly。若要在同一付费墙上同时销售预付方案,请再次添加该年度产品,并将 Billing plan 设置为 Upfront。
- 若要为选择预付方案的用户提供预付优惠(适用于较早版本的 SDK,或不支持承诺方案的情况),请在 Fallback offer 下选择对应优惠。
- 在应用中,从
product.subscriptionPricingTerms获取价格并展示。对于可以购买承诺方案的用户,Adapty SDK 会返回承诺方案的价格;对于其他用户,SDK 则返回预付方案的价格:- 要判断 SDK 返回的是哪个方案,请检查
product.subscriptionPricingTerms?.billingPlan。承诺方案对应的值为.monthly,预付方案对应的值为.upFront。 - 要展示分期价格,请使用
subscriptionPricingTerms.localizedBillingPrice和subscriptionPricingTerms.billingPeriod。 - 要展示年度总价,请使用
subscriptionPricingTerms.commitmentInfo.localizedPrice和subscriptionPricingTerms.commitmentInfo.period。对于承诺方案,product.localizedPrice和product.subscriptionPeriod返回相同的年度数据。
- 要判断 SDK 返回的是哪个方案,请检查
用户在以下情况下无法购买承诺计划:
- 不支持的操作系统版本或国家/地区:用户的 Apple 设备系统版本低于 26.4,或该套餐在其 App Store 所在国家/地区不可用。Adapty SDK 将返回预付套餐的定价。
- 已有预付订阅:StoreKit 报告该用户已订阅。如需切换套餐,订阅用户需通过 Apple 订阅设置操作。
- App Store 内的应用内购买:用户在 App Store 中选择产品,然后 Adapty SDK 在您的应用中发起购买。对于此类购买,SDK 仅支持预付套餐。
要停止提供承诺付款方案,请在自定义付费墙中,将年度产品的 Billing plan 设置为 Upfront,或删除 Monthly 行。您无法在 Adapty 中取消勾选 Offer monthly payments with a 12-month commitment 复选框。现有订阅者仍会每年续订新的承诺周期,除非您在 App Store Connect 中点击年度订阅的 Remove Monthly Billing。已做出承诺的订阅者将继续付款,直到其承诺期结束。
5. 在沙盒中测试方案
参照沙盒测试指南,使用两个沙盒账号进行测试:
- 来自你提供承诺方案的国家的账号:付费墙应显示承诺方案,同时展示月价格和总价。购买后,该沙盒用户的用户画像应具备年度产品的访问等级。
- 美国账号:付费墙应仅显示预付方案。
如果你的代码需要处理来自 webhook 或服务端 API 的产品 ID,请确认它能正确接收格式为 <product_id>:monthly 的承诺计划购买记录。
如需在本地测试购买逻辑,请使用 Xcode 中的 StoreKit 测试 26.5 或更高版本。通过 StoreKit 测试完成的购买不会上报到 Adapty。
故障排查
- 月付复选框不显示:Offer monthly payments with a 12-month commitment 复选框仅在设置了 App Store 产品 ID 的年付产品上显示,且需要填写Price (USD) 后才会激活。
- 用户看不到承诺方案的免费试用或其他优惠:在 App Store Connect 中,每项优惠归属于一个计费方案。请为承诺方案配置优惠。对于促销活动或赢回优惠,还需在 Adapty 中将优惠的 App Store plan 设置为 Monthly with 12-month commitment。
- 所有用户都看到一次性付清的价格:请确认以下两点:
- 应用使用 Xcode 26.5 或更高版本构建。若使用更低版本,Adapty SDK 始终返回一次性付清方案的价格。
- 在自定义付费墙中,年付产品的 Billing plan 设置为 Monthly。
- 部分用户看到一次性付清的价格:这些用户无法购买承诺方案。
- 付费墙显示的是年度总价而非分期价格:对于承诺方案,
product.localizedPrice返回年度总价。如需显示分期价格,请使用subscriptionPricingTerms.localizedBillingPrice。