Guideline 3.1.2 订阅被拒:付费墙价格怎么改
作者:Mehdi Azizi
发布于 ,9分钟
3.1.2:实际扣款金额必须是付费墙上最醒目的价格,并写明周期、自动续订和条款链接。附两次真实被拒与修改方法。
Guideline 3.1.2 管的是自动续期订阅。如果 Apple 引用了这一条,先查两件事:实际扣款的金额必须是付费墙上最醒目的价格;另外,app 和商品页都要写明订阅周期、价格,并提供能打开的使用条款和隐私政策链接。
2026 年 10 月,我有两个 app 被这条拒了:Solys 在 10 日,TradaZen 在 12 日。问题出在同一种展示方式上:每周价格写得很大,真正扣款的金额写得很小。下面先看规则原文,再讲这两个案例,最后给出我现在用的检查清单。其他被拒原因可以看Apple 为什么拒绝你的 app。
Guideline 3.1.2 说了什么?
3.1.2「Subscriptions」位于 App Review Guidelines 第 3 部分「Business」的 3.1「Payments」下。所以邮件标题才是「Guideline 3.1.2 - Business - Payments - Subscriptions」。它分三款,括号里的字母告诉你该去哪里找问题。
| 条款 | Apple 的要求 | 典型被拒原因 |
|---|---|---|
| 3.1.2(a) Permissible uses | 持续提供价值,周期至少 7 天 | 订阅没有持续更新的内容 |
| 3.1.2(b) Upgrades and Downgrades | 切换方案时不能重复扣费 | 同时为两个方案付费 |
| 3.1.2(c) Subscription Information | 用户花这个价能得到什么 | 折算价格比实际扣款金额更大 |
3.1.2(c) 的原文很短。在让用户订阅之前,你必须「clearly describe what the user will get for the price」:清楚说明用户花这个价能得到什么。接着它指向开发者计划许可协议的附件 2(Schedule 2)。这个附件列出了你必须「clearly and conspicuously」(清楚且醒目地)展示的内容:
- 订阅的名称;
- 订阅周期;
- 价格,如有必要还要写单位价格;
- 在 app 内可以访问的隐私政策和使用条款链接。
关于价格字号的规则在 Apple 的订阅说明页上。在购买流程中,「the amount that will be billed must be the most prominent pricing element in the layout」:将要扣款的金额必须是布局中最醒目的价格元素。可以展示每月折算价或优惠幅度,但要放在次要位置,而且字号更小。同一页面还要求:如果有免费试用,必须写明试用时长以及试用结束后扣款的价格。
我收到的两次 3.1.2(c) 拒绝
Solys:0.38 欧元写得大,19.99 欧元写得小
Solys 是我做的闹钟 app,会让你的社交软件进入休眠。引导流程里的付费墙上,「年度」卡片用 21 号粗体显示「0.38 欧元/周」。下面用 15 号字写着「即 19.99 欧元/年」。可实际扣的是 19.99 欧元,不是 0.38 欧元。
2026 年 10 月 10 日,Apple 引用 3.1.2(c) 拒了这个版本。邮件要求扣款金额必须是最清晰、最醒目的价格元素,免费试用、首发价和折算价格都只能处于从属地位。Apple 列出了判断标准:字体、字号、颜色和位置。
这种展示是我明知故犯:TradaZen 之前有个版本用的是同样的思路,审核通过了。这是一次赌博,代价是多走了一轮审核。
修改方法:「19.99 欧元/年」用大字,「即 0.38 欧元/周」作为灰色小字说明放在下面,app 的 30 种语言全部改掉。付费墙写在代码里,所以重新提交版本前得先打一个新 build。
TradaZen:同样的原因,两天后
TradaZen 是我的模拟交易 app。2026 年 10 月 12 日,1.5.1 版本因为同一条规则被拒。邮件里说「weekly calculated」价格显示得「more clearly and conspicuously than the billed amount」:每周折算价比扣款金额更醒目。
我的第一次修改还不够,好在提交前自己发现了。我把「0.92 欧元/周」改小了,但还留在右侧的价格那一行。而周订阅卡片在同一列显示的是它的真实价格:「8.99 欧元/周」。两个金额看起来处于同一层级。折算价格只要放在真实价格那一列,就会被当成扣款价格,字再小也一样。
最终的修改:每张卡片右侧用大字显示扣款金额,每周价格改为下方的灰色小字,左侧只放方案名称。下一次审核,Apple 没再提 3.1.2(c)。
这个 app 的其他经验教训在 TradaZen 案例分析里。
Apple 拒了什么,放过了什么
下面按时间顺序列出真实的展示方式和结果。
| 价格展示方式 | 结果 |
|---|---|
| TradaZen 早期版本:突出每周价格 | 之前一次审核通过 |
| Solys:粗体「0.38 欧元/周」,下方「19.99 欧元/年」 | 2026/10/10 被拒,3.1.2(c) |
| TradaZen 1.5.1:每周价格比扣款金额更醒目 | 2026/10/12 被拒,3.1.2(c) |
| TradaZen:每周价格改小,但仍在价格列 | 提交前被我自己否掉 |
| TradaZen:右侧大字扣款金额,每周价格作说明 | 下一次审核不再被提及 |
| Solys:大字「19.99 欧元/年」,每周价格作灰色说明 | 已修改并重新提交给 Apple |
第一行最关键。一次审核通过,不代表你的付费墙下次也能过。 每个版本都要重新给审核员看,而新的审核员可能比上一个更严格。唯一安全的展示,是严格遵守规则原文的展示。
扣款金额是唯一用大字显示的价格。任何折算价格,不管按周、按月还是按天,都只是更小、更淡的说明文字,绝不能占它的位置。
符合 3.1.2 的付费墙检查清单
现在每次提交前,我都会对每个 app 的每个付费墙过一遍这份清单:
- 每张卡片上,扣款金额是字号最大、对比度最高、位置最好的价格。
- 所有折算价格(按周、按月、按天)都作为说明文字,更小、更淡,放在扣款金额下面。
- 折算价格不出现在另一个方案显示真实价格的那一列。
- 周期写得明明白白:「每年」「每周」。
- 免费试用写明时长,以及试用结束后扣款的金额。
- 有一句话说明订阅会自动续订,并且可以在 Apple 账户设置中取消。
- 购买按钮之前写清楚订阅能解锁什么。
- 付费墙上有可见的「Restore Purchases」(恢复购买)按钮。
- 付费墙上有使用条款和隐私政策链接,而且能打开。
- 如果提供多个方案,按 Apple 的建议把它们放在同一个订阅组里。
- 在最小尺寸的 iPhone 上、用最长的价格检查显示效果。TradaZen 我会用越南盾价格测试:金额一换行,层级就乱了。
如果你用 RevenueCat 的付费墙,RevenueCat 的文档也有同样的提醒:如果别处没有显示扣款金额和扣款周期,只放一个月度价格变量是不够的。完整的接入流程见 RevenueCat:搭建 iOS 应用内订阅,设计上的坑见 iOS 付费墙:新手常犯的 7 个错误。
使用条款和隐私政策链接:app 里和商品页上都要有
另一种 3.1.2 拒绝针对的不是付费墙,而是元数据。开发者在 Apple 论坛上贴出的审核消息说明了 Apple 期望的位置:隐私政策链接放在 App Store Connect 的对应字段里,使用条款(EULA)链接放在描述中或 EULA 字段里。
坑出在标准协议上。根据 App Store Connect 帮助文档,如果你不添加自定义协议,就适用 Apple 的标准协议,而且「the license agreement link isn't shown on your App Store product page」:商品页上不会出现任何链接。如果你用的是标准协议,就得自己把链接写进描述里,指向你的条款页面,或者指向 Apple 标准许可协议。
我的订阅类 app,描述的结尾都有两行,商品页的每种语言都写。下面是模板,按你的方案和域名修改:
免费试用 7 天,之后按年或按周订阅,
可随时取消。
使用条款:https://your-domain.com/terms
隐私政策:https://your-domain.com/privacy
粘贴之前先把两个链接都打开看看:打不开的页面等于没有链接。隐私政策要写哪些内容,详见应用的隐私政策;商品页的其他部分见 App Store ASO 页面。
这一点不用打新 build 就能改:描述和 App Store Connect 的各个字段都属于元数据。
3.1.2(a):订阅必须持续提供价值
另一款常导致被拒的条款针对的是商业模式,而不是界面。3.1.2(a) 要求「ongoing value」:持续一段时间的价值。订阅周期至少七天,并且要能在用户的所有设备上使用。订阅者付了钱就该得到相应内容,不需要额外完成任务,比如发社交平台动态。
如果你的 app 提供的是一次性服务,买断可能更合适。两种模式的对比见订阅还是买断。
被 3.1.2 拒绝后怎么回复 Apple
沟通在你 app 的 App Review 部分进行。回复 App Review 的流程和其他条款一样。分两种情况:
- 问题在 app 里(价格字号、付费墙上的说明):需要新 build,Solys 和 TradaZen 都是这样。审核员测试的是打包进去的代码,我在 guideline 2.1 的指南里解释过。
- 问题在商品页上(链接缺失或打不开):改元数据,回复消息,同一个提交会重新进入审核。
用英文写,简洁就好:哪里有问题,改了什么,怎么验证。这是我用的模板(把 build 号、价格和操作路径换成你自己的):
Hello,
Thank you for your review.
Issue: on the paywall, the weekly equivalent price was displayed
more prominently than the billed amount.
Fix in build X:
- Each plan now shows its billed amount (e.g. "€19.99/year")
as the largest price on the card.
- The weekly equivalent is a smaller grey caption below it.
- The paywall states the duration, the auto-renewal, and links
to our Terms of Use and Privacy Policy.
How to verify: launch the app and complete the onboarding.
The paywall appears at the end.
Best regards,
下次提交前改好你的付费墙
如果你的 app 刚因为 3.1.2 被拒,Apple Review Kit 能帮你找到被引用的规则、它的要求,以及修改和回复的示例。它的 Claude Code skills 还会在提交前检查你的付费墙和商品页。想要真人帮你看,可以预约我一小时:我们一起读 Apple 的消息,在你的屏幕上重新调整付费墙。完整流程见 app 被 Apple 拒绝页面,订阅的搭建见 iOS 应用内订阅页面。
如果你在准备第一次上架,做一下免费诊断:它会帮你理清步骤顺序,并把我的 Apple 防拒清单发给你。想开发一款手机 app 并从上线第一天就开始赚钱,iOS Kit 的第三步「接入收款」专门讲订阅和付费墙。
没人能保证 Apple 一定会通过你的 app。我能做的,是让你避开我交过两次学费的 3.1.2(c) 拒绝。
常见问题
「Guideline 3.1.2 - Business - Payments - Subscriptions」是什么意思?
这是订阅规则的完整标题。它表示价格层级不对、付费墙缺少信息、商品页缺少链接,或者订阅没有持续价值。括号里的字母,比如 3.1.2(c),指的是具体条款。
还能显示每周或每月价格吗?
能。Apple 允许显示每周或每月折算价,或者优惠幅度,前提是它们比实际扣款金额更小、更不显眼。在我的 app 里,折算价是扣款价格下方的灰色说明文字,从不放在真实价格那一列。
被 3.1.2 拒绝后需要新 build 吗?
如果问题在付费墙上,需要,因为审核员测试的是打包进去的代码。如果问题在商品页上,比如描述里缺链接,就不需要:改好元数据,同一个提交会重新进入审核。
使用条款(EULA)链接该放在哪里?
app 里放在付费墙上。商品页这边,放在描述中;如果你有自定义协议,也可以放在 App Store Connect 的 EULA 字段里。用 Apple 标准协议的话,商品页上不会显示任何链接:自己在描述里加上,每种语言都要加。
我的付费墙以前通过了,为什么现在被拒?
因为每个版本都要重新审核,有时换了审核员。突出每周价格的做法在 TradaZen 上通过过,到了 2026 年 10 月却在 Solys 和 TradaZen 上都被拒了。只有规则原文靠得住。