# Guideline 4.5.4 推送通知被拒：苹果规则详解

> Guideline 4.5.4：营销通知需在 App 内获得明确同意并提供退出方式，且 App 必须在没有通知时也能正常使用。

原始页面：[Guideline 4.5.4 推送通知被拒：苹果规则详解](https://devoria.fr/zh-hans/blog/guideline-4-5-4-push-notifications-rejected)
作者：[Mehdi Azizi](https://devoria.fr/zh-hans/mehdi-azizi)
发布：2026-11-04
内容最后修订：2026-11-04


Guideline 4.5.4 规范的是推送通知。你的 App 必须在没有通知的情况下也能正常使用，通知里绝不能放敏感信息，未经同意也绝不能用来推广。**营销通知除了需要 iOS 的授权，还需要在你的 App 里有一段书面的同意说明，以及一个可以随时撤回的开关。**

我自己用 Expo 开发和发布 iOS App。在我的交易模拟器 TradaZen 上，我删掉了一条宣传折扣的通知，换成了一条不带任何优惠的提醒，并向审核员做了说明。这篇指南依据的是 Apple 的规则原文、开发者许可协议、官方文档和这个案例。想了解被拒原因的全貌，可以读[为什么 Apple 拒绝你的 App](https://devoria.fr/zh-hans/blog/apple-app-rejection-reasons-real-cases)。

## Guideline 4.5.4 说了什么？

这条规则位于 [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#4.5.4) 第 4 节“Design”的 4.5 部分“Apple Sites and Services”。所以被拒时的标题是：“Guideline 4.5.4 - Design - Apple Sites and Services”。原文划了三条线。

1. **不能强制要求通知。** “Push Notifications must not be required for the app to function.” 用户拒绝 iOS 弹窗后，任何功能都不能被卡住。
2. **不能包含敏感信息。** 通知“should not be used to send sensitive personal or confidential information”。通知会显示在锁屏上，任何人都能看到。
3. **未经同意不能推广。** 营销内容是禁止的，“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)](https://devoria.fr/zh-hans/blog/guideline-5-1-2-third-party-ai-att-data-sharing) 禁止把开启通知作为使用某个功能、内容或奖励的前提。

## 开发者许可协议补充了什么

审核指南讲的是推送通知。你注册时接受的 [Apple Developer Program License Agreement](https://developer.apple.com/support/terms/apple-developer-program-license-agreement/#A1) 附件 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 论坛的一个帖子](https://www.b4x.com/android/forum/threads/apple-app-store-rejected.89295/)里，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](https://developer.apple.com/design/human-interface-guidelines/managing-notifications) 页面提到了订阅：如果用户接受了营销通知，可能会欢迎“an offer to become a subscriber”。它还加了两项要求：App 内要有设置页面让用户改变主意，营销内容绝不能用“Time Sensitive”级别。

我认定的界线是：**告知已购内容的提醒不是优惠，推动购买的消息才是。** “你的试用 12 号结束”是告知。“24 小时内五折”是推销。通知打开的购买页面仍然受[规则 3.1.2](https://devoria.fr/zh-hans/blog/guideline-3-1-2-subscription-rejection-paywall) 约束。

## 温和通知，也就是临时通知

Apple 在[授权相关文档](https://developer.apple.com/documentation/usernotifications/asking-permission-to-use-notifications)中称之为“provisional authorization”。App 可以不弹出 iOS 窗口就发送通知。这些通知没有声音也没有横幅，只出现在通知中心的历史记录里，并带有保留或关闭的按钮。在 Expo 里，这是 [requestPermissionsAsync](https://docs.expo.dev/versions/latest/sdk/notifications/) 的一个选项：

```ts
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 实现明确同意

1. **在合适的场景下请求 iOS 授权。** Apple 建议在某个能体现通知价值的操作之后请求，而不是首次启动时。在 TradaZen 上，它主要出现在引导流程中获得奖励或完成一节课之后。和[请求评分](https://devoria.fr/zh-hans/blog/guideline-5-6-3-app-review-request-rejected)是同一个思路。
2. **单独加一个营销同意。** 一个默认关闭的开关，配上清楚的说明，例如：“接收优惠和新功能，每周最多一次。”
3. **提供设置页面。** 提醒和优惠都能在 App 内关闭，而不只是在 iOS 的设置里。
4. **发送时过滤。** 你的服务器或本地调度器，只向已同意的用户发送推广。
5. **没有通知也一切正常。** 拒绝授权不会卡住任何页面、功能或奖励。

## TradaZen：我删掉的那条通知

2026 年 10 月 12 日，TradaZen 的一个版本因规则 5.6 被拒，这条规则针对的是通过操纵手段获得的购买。Apple 没有指出具体是哪个元素。于是我把整个购买流程重新检查了一遍，包括通知。

有一条通知有问题。在引导流程或订阅页面离开 App，会触发这条本地消息：“我为你准备了一份专属折扣。”它只依赖 iOS 授权，没有单独的营销同意。**这正是 4.5.4 和许可协议所说的未经明确同意的推广。** 我在 App 的全部三十种语言里都删掉了它。

取而代之的是一条一次性提醒：“你的学习进度在等你。想什么时候继续都行，不着急。”它的限制是：

- 只有在通知已获授权时才会发送；
- 每次安装只发一次，在离开引导流程或订阅页面五分钟后；
- 如果用户在此之前回来，就会被取消；
- 没有价格、没有折扣、没有倒计时、没有声音。

这条提醒仍然处在前面说的灰色地带。我没有隐瞒：审核备注和我给审核员的回复里都写明了它。**说明过的提醒可以讨论，藏起来的提醒看起来就像在耍手段。**

## 如何回复 4.5.4 拒绝？

沟通在 App Store Connect 里进行，你可以在那里[回复 App Review 的消息](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/)。先修改：去掉强制要求、加上营销同意或清理通知文案，然后重新构建。下面是我会用的模板，按需调整：

```text
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](https://devoria.fr/zh-hans/blog/testflight-guide-test-iphone-app) 指南介绍了如何安装构建版本来做这项测试。

## 提交前检查你的材料

[Review Kit](https://devoria.fr/zh-hans/kits/app-review) 包含我的提交前检查清单、给测试员的备注模板，以及能审查你项目的 Claude Code skills。如果想让真人帮你看看，可以[预约和我一对一的一小时](https://devoria.fr/zh-hans/coaching)：我们通过视频一起检查你的通知和设置页面。完整的处理流程见 [App 被 Apple 拒绝](https://devoria.fr/zh-hans/expertise/app-rejected-by-apple)页面。

正在准备你的第一次上架？[做一次免费诊断](https://devoria.fr/zh-hans/diagnostic)：它会帮你理清步骤顺序，并发给你我的 Apple 防拒检查清单。

## 常见问题

### “Guideline 4.5.4 - Design - Apple Sites and Services”是什么意思？

这是 Apple 认为你的通知是强制的、过于暴露隐私，或者未经同意就在推广时给出的拒绝标题。读一读标题后面那句话：它说明了审核员发现的问题。

### 可以在引导流程中请求通知授权吗？

可以，前提是拒绝不会卡住任何东西，并且请求出现在能体现通知价值的时刻之后。绝不要把奖励和授权挂钩：5.1.2(i) 禁止这样做。

### 试用到期通知算营销吗？

我的理解是：如果它只告知当前试用的情况，就不算。如果它提供折扣或其他订阅方案，就变成了推广，需要营销同意。

### 本地通知也受 4.5.4 约束吗？

审核指南说的是推送通知，但开发者许可协议附件 1 把关于推广的规则也适用于本地通知。按同样的方式处理它们。

### 临时通知可以免去营销同意吗？

不能。它只是在一开始免去了 iOS 弹窗，但推广仍然是推广：它需要 App 内的明确同意和一个退出方式。


## 你的项目

[Review Kit](https://devoria.fr/zh-hans/kits/app-review)：我的 App Store 审核清单、我被 Apple 拒审后的修正方案、Google Play 审核清单，以及三个 Claude Code skill。¥369。

[iOS & Android Kit](https://devoria.fr/zh-hans/kits/ios)：用 Claude Code 打造你的 iPhone 和 Android 应用：我自己应用的起步代码、上架商店的完整流程，以及全部工具包。¥739。

[诊断：你离自己的 iPhone 应用还差什么](https://devoria.fr/zh-hans/diagnostic)：7 个问题，60 秒：看清真正阻碍你发布 iPhone 应用的原因，拿到你的 4 步路线和适合你的套件。
