发布时间:2026 年 7 月 16 日
从 Chrome 152 开始,在 macOS 上安装的渐进式 Web 应用 (PWA) 的通知将以原生方式归因于 PWA 本身,而不是 Google Chrome。
这在用户体验方面是一项重大改进,让 Web 应用感觉与 macOS 的集成度更高。不过,这也对通知权限的处理方式以及某些通知 API 的行为方式做出了重要更改。
有何变化?
以前,PWA 发送的所有通知都在操作系统级层归因于 Chrome。在 macOS 通知中心内,这些通知会显示在“Google Chrome”下,并使用 Chrome 图标。如需停用通知,用户需要使用 Chrome 内的控件,而不是 macOS 系统设置。
借助通知归因,当网站作为 PWA 安装时,macOS 会将其视为一个单独的应用来处理通知。这适用于新安装的 PWA 以及用户之前安装的 PWA。
优点:
- 品牌身份:通知会在 macOS 通知中心和横幅中显示 PWA 自己的名称和图标。
- 用户熟悉的控件:这些应用的通知控件现在会显示在用户期望的位置:macOS 系统设置(而不是 Chrome)中。
- 精细控制:用户可以管理各个 PWA 应用的通知 设置(例如提醒样式、锁定屏幕行为)。
- 专注模式:可以在 macOS 专注模式 配置文件(勿扰模式)中单独允许或静音 PWA。
新的权限授予流程
由于 macOS 现在将 PWA 视为单独的应用,因此 PWA 必须先获得操作系统级层的通知权限 ,然后才能显示通知。这会更改新用户和现有用户的权限授予流程。
新用户(首次请求权限)
如果用户安装了 PWA,并且网站在安装后请求通知权限,则:
- Chrome 将跳过浏览器级层的权限提示 (地址栏中的下拉菜单)。
- Chrome 会立即触发 PWA 的 macOS 系统权限提示 。
现有用户(迁移路径)
如果用户已在 Chrome 中向您的网站授予通知权限,然后安装(或已安装)PWA,则他们仍必须向 PWA 授予操作系统级层的权限。
为了尽可能顺利地完成此过渡,请执行以下操作:
- 当 PWA 首次尝试发送通知时,macOS 会显示系统权限提示。
- 如果用户批准,通知将继续无缝运行。
- 如果用户忽略或关闭此提示,PWA 将显示一个应用内指示器 (通常位于应用标题栏或菜单中),引导用户前往 macOS 系统设置以手动启用权限。
对开发者的影响:macOS 上已弃用 requireInteraction
在 macOS 上,通知是保留在屏幕上直到用户关闭它 (“持久” ),还是自动消失 (“临时” ),这是 macOS 系统设置中的 用户控制的按应用设置 。
由于此操作系统设计,Chrome 将不再遵循
requireInteraction选项在 macOS 上 Notification API 中当归因
处于活动状态时。
这对您的代码意味着什么:
如果您的应用依赖于 requireInteraction: true 来使重要通知保留在屏幕上,则在 macOS 上将不再保证这一点。相反,您应该:
- 在设计应用时,假设通知可能是短暂的(临时 )。
- 鼓励需要持久通知的用户在
System Settings > Notifications > [Your PWA]中将 PWA 的 通知提醒样式配置为“持久”。
对开发者的影响:App Badging API 需要通知权限
借助 App Badging API ,Web 应用可以在其应用图标上设置标记(例如,显示 未读消息数)。在 macOS 上,应用图标标记在技术上与应用的通知设置相关联。由于 PWA 现在拥有自己的原生通知身份,因此:
- 需要权限:PWA 必须启用操作系统级层的通知权限 ,标记才能显示在 Dock 图标上。这符合 macOS 平台标准,并且与 Safari 已经处理 Web 应用的 Badging API 的方式一致。
- 静默失败:如果用户在
System Settings > Notifications > [Your PWA]中停用了“标记应用图标”,或完全拒绝了通知 权限,则对navigator.setAppBadge()的调用仍会在 JavaScript 中成功(不会抛出错误),但标记不会显示在 Dock 上。如果您的应用依赖于标记,请务必请求通知权限,以确保可以显示标记。
对企业管理的影响
对于管理 macOS 设备并希望预先授予通知权限的企业管理员:
- Chrome 政策:您仍必须配置 Chrome 政策
(
NotificationsAllowedForUrls),以向 PWA 的来源授予权限。 - macOS 政策:此外,您现在还必须部署 macOS 配置 文件 (MDM),以向 PWA 的软件包 标识符(应用 shim)预先授予通知权限。
如果缺少这两项政策,系统仍会在操作系统级层提示用户。
开发者最佳实践
- 检查权限状态:在
发送通知之前,请务必检查
Notification.permission。 - 情境提示:如果您检测到在 Web 级层授予了权限,但未显示通知(如果操作系统级层 的权限被撤消,可能会发生这种情况),请引导用户前往 macOS 系统设置。
- 为临时通知做好准备:请勿依赖
requireInteraction来实现 macOS 上的关键用户流程。