Firefox 72 将对通知权限进行重大更改

通知。你能记住每天有多少网站或服务提示你授权它们发送通知吗?你能记得你上次收到通知时有多兴奋吗?

今年早些时候,我们决定减少人们在使用 Firefox 浏览器浏览网页时收到的未经请求的通知权限提示的数量。我们认为,这是 Mozilla 将用户利益放在首位的承诺的重要组成部分。

为此,我们进行了一系列研究和实验。我们希望了解如何改善用户体验,减少用户厌烦。作为回应,我们现在对网站请求用户授权发送通知的工作流程进行了一些更改。从 Firefox 72 开始,Firefox 将要求所有通知权限提示都需要显式用户交互。

有关背景故事,以及我们分析和实验的详细信息,请阅读 限制 Firefox 中的通知权限提示。今天,我们希望确保网络开发者了解即将发生的更改,并分享这两种关键场景的最佳实践

  1. 如何引导用户前往提示。
  2. 如何确认用户更改权限。

an animation showing the browser UI where a user can click on the small permission icon that appears in the address bar.

我们预计,一些网站会受到用户流程更改的影响。我们怀疑许多网站在他们的 UX 设计中尚未处理后者。让我们简要地浏览一下这两种场景

如何引导用户前往提示

理想情况下,希望获得授权向用户发送通知或提醒的网站已经引导他们完成了此过程。例如,他们会询问用户是否希望为该网站启用通知,并提供一个可点击的按钮。

document.getElementById("notifications-button").addEventListener("click", () => {
  Notification.requestPermission().then(setupNotifications);
});

从 Firefox 72 开始,通知权限提示将受到用户手势的限制。对于不遵循上述指南的网站,我们将不会代表它们发送提示。Firefox 将立即拒绝由 Notification.requestPermission()PushManager.subscribe() 返回的承诺。但是,用户将在地址栏中看到一个小的通知权限图标。

请注意,由于 PushManager.subscribe() 需要一个 ServiceWorkerRegistration,因此 Firefox 将通过返回 ServiceWorkerRegistration 对象的承诺来传递用户交互标志。这使 常见的示例 能够在从事件处理程序调用时继续工作。

Firefox 在提示成功后显示通知权限图标。用户可以选择此图标来更改通知权限。例如,如果他们决定授予网站权限,或更改他们的偏好,不再接收通知。

如何确认用户更改权限

当用户通过通知权限图标更改通知权限时,这将通过 Permissions API 公开

navigator.permissions.query({ name: "notifications" }).then(status => {
  status.onchange = () => potentiallyUpdateNotificationPermission(status.state);
  potentiallyUpdateNotificationPermission(status.state);
}

我们相信这将改善用户体验,使其更加一致。并允许将网站界面与通知权限对齐。请注意,上述代码在 Firefox 的早期版本中也起作用。但是,用户不太可能在早期 Firefox 版本中动态更改通知权限。为什么?因为地址栏中没有通知权限图标。

我们的研究表明,用户更有可能参与他们显式交互的提示。我们已经看到,通过在用户界面中进行预提示,网站可以在呈现提示之前通知用户他们正在做出的选择。否则,在超过 99% 的情况下,未经请求的提示会被拒绝。

我们希望这些更改将为所有人带来更好的用户体验,以及与通知的更健康、更有效的互动。

关于 Anne van Kesteren

对隐私和安全边界以及 Web 平台架构感兴趣的标准人员。他/他

更多由 Anne van Kesteren 撰写的文章…

关于 Johann Hofmann

Firefox 安全和隐私工程师

更多由 Johann Hofmann 撰写的文章…


9 条评论

  1. Trevor

    此更改会影响其他权限提示吗?我特别想知道是否会影响授予摄像头和麦克风的权限。浏览器提示目前有一个复选框。如果用户授予权限,但未选中复选框,则每次调用 navigator.mediaDevices.getUserMedia() 时都会提示他们。在某些情况下,这会导致用户体验不佳。

    2019 年 11 月 13 日 下午 07:45

    1. Anne van Kesteren

      此更改仅影响通知权限。如果您可以在 https://bugzilla.mozilla.org/ 上提交一个错误报告,描述特定的令人沮丧的场景,这将非常有帮助。随时可以 CC 我或在后续评论中提及它。

      2019 年 11 月 14 日 上午 00:02

      1. Trevor

        https://bugzilla.mozilla.org/show_bug.cgi?id=1596959

        2019 年 11 月 15 日 下午 03:02

  2. Martin B

    干得好!是否有可能设置一个全局设置?我希望永远不被询问任何网站的网站通知。我不希望通过网页接收通知。

    2019 年 11 月 13 日 下午 08:28

    1. Anne van Kesteren

      不止有可能,它已经存在

      导航到 about:preferences
      搜索“通知”。
      单击其旁边的“设置…”按钮。
      选中“阻止新的请求询问是否允许通知”复选框。
      单击“保存更改”。

      2019 年 11 月 14 日 上午 00:06

  3. jr conlin

    在我的代码中仔细研究了一番后,发现以下*内容似乎有效。我是否正确地认为,Notification.requestPermission() 必须位于订阅请求按钮处理程序的第一个包围结构中?(FWIW,我的旧代码把它放在了更上层的链条中,因此页面甚至不会在没有权限的情况下安装服务工作者,但这似乎不够。)

    navigator.serviceWorker.getRegistration().then( (registration) => { document.getElementById("request_subscription_button").addEventListener("click", () => { Notification.requestPermission().then( () => { registration.pushManager.subscribe().then( (subscription_info) => { // 将订阅信息发送到服务器 }); }); }); });

    * 请原谅任何语法错误,我正在手动输入并从页面的代码中推断出来。

    2019 年 11 月 13 日 下午 04:28

    1. Anne van Kesteren

      我非常确定,调用 requestPermission()subscribe() 都应该可以。您可能还想更积极地注册事件监听器,尽管通常注册应该很快完成。

      2019 年 11 月 14 日 上午 00:17

  4. James Browning

    我想知道,对于这些权限问题,是否可以采用与权限提示不同的方法。因为即使需要交互,许多网站仍然会在进行任何任意交互时再次提示,这同样令人讨厌(例如,单击链接,但出现提示而不是链接)。

    我想到的一个解决方法是基于 https://developers.google.com/web/updates/2019/02/intersectionobserver-v2 的东西,浏览器提供一个可以成为页面一部分的专用元素。但为了保护它,浏览器将有效地使用类似于 IntersectionObserver v2 的机制,以确保该元素没有被点击劫持,没有最近移动,等等,以确保请求合法,这比提示更可预测,因为如果该元素具有一致的 UI,用户就不会感到意外。

    2019 年 11 月 13 日 下午 11:11

  5. Jordan

    谢谢!很多次我都觉得,网站只是在等待我将鼠标悬停在最想要的链接上,他们会将链接移到接受通知按钮弹出的位置,然后“砰!”通知请求就在我的光标下!

    2019 年 11 月 14 日 上午 05:32

本文的评论已关闭。