Guideline 4.5.4 推送通知被拒:苹果规则详解
作者:Mehdi Azizi
发布于 ,9分钟
Guideline 4.5.4:营销通知需在 App 内获得明确同意并提供退出方式,且 App 必须在没有通知时也能正常使用。
Guideline 4.5.4 规范的是推送通知。你的 App 必须在没有通知的情况下也能正常使用,通知里绝不能放敏感信息,未经同意也绝不能用来推广。营销通知除了需要 iOS 的授权,还需要在你的 App 里有一段书面的同意说明,以及一个可以随时撤回的开关。
我自己用 Expo 开发和发布 iOS App。在我的交易模拟器 TradaZen 上,我删掉了一条宣传折扣的通知,换成了一条不带任何优惠的提醒,并向审核员做了说明。这篇指南依据的是 Apple 的规则原文、开发者许可协议、官方文档和这个案例。想了解被拒原因的全貌,可以读为什么 Apple 拒绝你的 App。
Guideline 4.5.4 说了什么?
这条规则位于 App Review Guidelines 第 4 节“Design”的 4.5 部分“Apple Sites and Services”。所以被拒时的标题是:“Guideline 4.5.4 - Design - Apple Sites and Services”。原文划了三条线。
- 不能强制要求通知。 “Push Notifications must not be required for the app to function.” 用户拒绝 iOS 弹窗后,任何功能都不能被卡住。
- 不能包含敏感信息。 通知“should not be used to send sensitive personal or confidential information”。通知会显示在锁屏上,任何人都能看到。
- 未经同意不能推广。 营销内容是禁止的,“unless customers have explicitly opted in to receive them via consent language displayed in your app's UI”,并且要有“a method in your app for a user to opt out”。
最后一句警告:滥用可能导致你失去这项服务的使用权限。还有两条相邻的规则可以补充。4.5.3 禁止通过通知发送垃圾信息。5.1.2(i) 禁止把开启通知作为使用某个功能、内容或奖励的前提。
开发者许可协议补充了什么
审核指南讲的是推送通知。你注册时接受的 Apple Developer Program License Agreement 附件 1 在三个方面走得更远。
- 本地通知也算在内。 第 2.2 条针对的是“the APN or Local Notifications”。在 App 里设定、不经过服务器的提醒,也适用同样的规则。
- 推广的定义很宽。 它包括追加销售,以及“sending any messages to promote the use of Your Application or advertise the availability of new features or versions”。
- iOS 弹窗不能绕过。 第 1.3 条禁止绕过 Apple 的授权面板。如果用户拒绝或撤回了授权,你就什么都不能再发。
我的理解是:一条“回到 App 来看看”的消息,即使不带价格,也已经接近推广了。 Apple 没有明确界定这种情况,所以这类提醒我都会向审核员说明。
4.5.4 的拒绝信息是什么意思?
记录最完整的拒绝案例,针对的是一个没有通知就无法使用的 App。在 2018 年 B4X 论坛的一个帖子里,Apple 写道:“Push notifications must be optional and must obtain the user's consent to be used within the app.” 开发者随后反馈,拒绝授权后出现了黑屏。帖子里给出的推测是:界面在等通知令牌到位后才显示。
你要默认审核员会拒绝所有授权,看看会发生什么。 如果 App 卡住、反复索要或者撤掉某个功能,就会触发 4.5.4 或 5.1.2(i)。至于未经同意的营销通知,我没有找到近期公开的拒绝信息。
哪种通知需要哪种同意?
我的对照表综合了 Apple 的规则原文、许可协议和界面设计指南。“试用到期”和“召回提醒”两行是我的理解,并非 Apple 的书面立场。
| 通知类型 | 所需同意 | 合规示例 |
|---|---|---|
| 对操作的反馈 | iOS 弹窗 | “你的导出已完成” |
| 用户选择的提醒 | iOS 弹窗 | 每天 19:00 的课程 |
| 试用到期、续订 | iOS 弹窗 | “你的试用 12 号结束” |
| 召回提醒 | iOS 弹窗 + 谨慎 | 不带价格,只发一次 |
| 优惠或折扣 | iOS 弹窗 + 同意 | App 内勾选的选项 |
| App 新功能 | iOS 弹窗 + 同意 | 只发给已订阅的用户 |
| 私信、健康信息 | 绝不显示内容 | “新消息” |
| 临时通知 | 一开始无需弹窗 | 无声音、无横幅送达 |
“iOS 弹窗”指的是系统授权。“同意”是你 App 里单独的选择:一句话说明你会发什么,加一个默认关闭的开关。
订阅提醒和优惠
Apple 界面设计指南的 Managing notifications 页面提到了订阅:如果用户接受了营销通知,可能会欢迎“an offer to become a subscriber”。它还加了两项要求:App 内要有设置页面让用户改变主意,营销内容绝不能用“Time Sensitive”级别。
我认定的界线是:告知已购内容的提醒不是优惠,推动购买的消息才是。 “你的试用 12 号结束”是告知。“24 小时内五折”是推销。通知打开的购买页面仍然受规则 3.1.2 约束。
温和通知,也就是临时通知
Apple 在授权相关文档中称之为“provisional authorization”。App 可以不弹出 iOS 窗口就发送通知。这些通知没有声音也没有横幅,只出现在通知中心的历史记录里,并带有保留或关闭的按钮。在 Expo 里,这是 requestPermissionsAsync 的一个选项:
import * as Notifications from "expo-notifications";
await Notifications.requestPermissionsAsync({
ios: {
allowAlert: true,
allowBadge: true,
allowSound: true,
allowProvisional: true,
},
});
在用户做出选择之前,ios.status 字段的值是 IosAuthorizationStatus.PROVISIONAL。临时通知替代的是 iOS 弹窗,而不是营销同意。 以临时方式发出的推广,仍然是推广。
注意用词。在 TradaZen 上,我说的“温和通知”是语气平和的提醒,只有在用户接受了 iOS 弹窗后才会发送。它不是临时授权。
用 Expo 实现明确同意
- 在合适的场景下请求 iOS 授权。 Apple 建议在某个能体现通知价值的操作之后请求,而不是首次启动时。在 TradaZen 上,它主要出现在引导流程中获得奖励或完成一节课之后。和请求评分是同一个思路。
- 单独加一个营销同意。 一个默认关闭的开关,配上清楚的说明,例如:“接收优惠和新功能,每周最多一次。”
- 提供设置页面。 提醒和优惠都能在 App 内关闭,而不只是在 iOS 的设置里。
- 发送时过滤。 你的服务器或本地调度器,只向已同意的用户发送推广。
- 没有通知也一切正常。 拒绝授权不会卡住任何页面、功能或奖励。
TradaZen:我删掉的那条通知
2026 年 10 月 12 日,TradaZen 的一个版本因规则 5.6 被拒,这条规则针对的是通过操纵手段获得的购买。Apple 没有指出具体是哪个元素。于是我把整个购买流程重新检查了一遍,包括通知。
有一条通知有问题。在引导流程或订阅页面离开 App,会触发这条本地消息:“我为你准备了一份专属折扣。”它只依赖 iOS 授权,没有单独的营销同意。这正是 4.5.4 和许可协议所说的未经明确同意的推广。 我在 App 的全部三十种语言里都删掉了它。
取而代之的是一条一次性提醒:“你的学习进度在等你。想什么时候继续都行,不着急。”它的限制是:
- 只有在通知已获授权时才会发送;
- 每次安装只发一次,在离开引导流程或订阅页面五分钟后;
- 如果用户在此之前回来,就会被取消;
- 没有价格、没有折扣、没有倒计时、没有声音。
这条提醒仍然处在前面说的灰色地带。我没有隐瞒:审核备注和我给审核员的回复里都写明了它。说明过的提醒可以讨论,藏起来的提醒看起来就像在耍手段。
如何回复 4.5.4 拒绝?
沟通在 App Store Connect 里进行,你可以在那里回复 App Review 的消息。先修改:去掉强制要求、加上营销同意或清理通知文案,然后重新构建。下面是我会用的模板,按需调整:
Hello,
Thank you for your feedback on Guideline 4.5.4.
In the new build:
- The app works fully if notifications are denied.
- Promotional notifications are sent only to users
who turn on "[toggle name]" in [screen]. It is off
by default and can be turned off at any time.
- Notifications never include [sensitive data].
How to test:
1. Deny notifications at the first prompt.
2. Open [feature]: it works without them.
3. Open [screen] to see both toggles.
Best regards,
提交前的 4.5.4 检查清单
- 拒绝授权后 App 仍可完整使用,没有卡住的页面,也没有被撤掉的奖励。
- iOS 弹窗出现在一次有用的操作之后,绝不在第一屏。
- 每一条推广,无论本地还是远程,都依赖一个默认关闭的营销同意。
- App 内有设置页面,可以关闭提醒和优惠。
- 任何通知文案都不显示健康数据、金额或私信内容。
- 推广绝不使用“Time Sensitive”级别。
- 审核备注列出了头几天会发送的通知。
- 你已经在拒绝每一项授权的情况下测试过完整流程。TestFlight 指南介绍了如何安装构建版本来做这项测试。
提交前检查你的材料
Review Kit 包含我的提交前检查清单、给测试员的备注模板,以及能审查你项目的 Claude Code skills。如果想让真人帮你看看,可以预约和我一对一的一小时:我们通过视频一起检查你的通知和设置页面。完整的处理流程见 App 被 Apple 拒绝页面。
正在准备你的第一次上架?做一次免费诊断:它会帮你理清步骤顺序,并发给你我的 Apple 防拒检查清单。
常见问题
“Guideline 4.5.4 - Design - Apple Sites and Services”是什么意思?
这是 Apple 认为你的通知是强制的、过于暴露隐私,或者未经同意就在推广时给出的拒绝标题。读一读标题后面那句话:它说明了审核员发现的问题。
可以在引导流程中请求通知授权吗?
可以,前提是拒绝不会卡住任何东西,并且请求出现在能体现通知价值的时刻之后。绝不要把奖励和授权挂钩:5.1.2(i) 禁止这样做。
试用到期通知算营销吗?
我的理解是:如果它只告知当前试用的情况,就不算。如果它提供折扣或其他订阅方案,就变成了推广,需要营销同意。
本地通知也受 4.5.4 约束吗?
审核指南说的是推送通知,但开发者许可协议附件 1 把关于推广的规则也适用于本地通知。按同样的方式处理它们。
临时通知可以免去营销同意吗?
不能。它只是在一开始免去了 iOS 弹窗,但推广仍然是推广:它需要 App 内的明确同意和一个退出方式。

