Chrome 50 中的网络通知功能改进 - 图标、关闭事件、重新通知偏好设置和时间戳

P 推送通知可让您为用户提供类似应用的极佳体验,提醒他们重要且及时的更新,例如收到的聊天消息。通知平台在浏览器中相对较新,随着越来越多的用例和要求不断完善,我们看到通知 API 又增加了很多。Chrome 50(2016 年 3 月推出 Beta 版)也不例外,其中包含不少于四项新功能,可让开发者更好地控制通知。您可以执行以下操作:

  • 向通知按钮添加图标
  • 修改时间戳以帮助打造一致的体验
  • 跟踪通知关闭事件,以帮助同步通知并提供分析数据,
  • 在通知取代当前显示的通知时管理重新通知体验。

Chrome 50 还新增了适用于推送通知的载荷。如需及时了解在 Chrome 中实现的 Notifications API,请遵循spec规范问题跟踪器

使用自定义图标创建富有吸引力的操作按钮

在近期发布的一篇关于 Chrome 49 中的通知操作按钮的帖子中,我提到,您不能在通知按钮中附加图片以使其外观精美且具有吸引力,但可以使用 Unicode 字符来内嵌表情符号等。现在,您不必担心:借助最近添加的内容,您现在可以在操作按钮上指定图像:

self.registration.showNotification('New message from Alice', {
  actions: [
    {action: 'like', title: 'Like', icon: 'https://example/like.png'},
    {action: 'reply', title: 'Reply', icon: 'https://example/reply.png'}]
});
桌面通知

操作图标的外观因平台而异。例如,在 Android 上,在 Lollipop 及更高版本中,该图标会应用深灰色滤镜,而在 Lollipop 之前,该图标则会应用白色滤镜,而在桌面设备上,则是全彩色滤镜。(注意:您可以讨论此功能在桌面设备上的未来发展)。某些平台甚至可能无法显示操作图标,因此请确保使用这些图标为操作提供上下文,而不是作为 intent 的唯一指示符。

最后,由于必须下载资源,因此最好尽可能保持图标小,并在安装事件中预缓存它们。(在写入之时,Chrome 中的通知资源提取尚未通过 Service Worker 进行路由。)

通知关闭事件

用户经常请求的通知功能是能够了解用户何时关闭了通知。不过,在通知规范近期所做的一系列更改添加了 notificationclose 事件之前,我们无法做到这一点。

通过使用 notificationclick 和 notificationclose 事件,您可以了解用户如何与通知进行互动。他们是让这些表单长时间打开,然后主动将其关闭,还是立即处理它们?

一个常见用例是能够在设备之间同步通知。如果用户在其桌面设备上关闭某条通知,其移动设备上的该通知也应关闭。我们还不能以静默方式执行此操作(请注意,每条推送消息都必须显示通知),但使用 notificationclose 后,您可以跟踪服务器上用户的通知状态,并在用户使用时将通知状态与其他设备同步。

如需使用 notificationclose 事件,请在 Service Worker 中注册该事件,该事件将仅在用户主动关闭通知时触发,例如,如果用户关闭特定通知或关闭其托盘中的所有通知(在 Android 上)。

如果 requireInteraction 标志为 false 或未设置,那么,如果通知不是由用户手动关闭的,而是由系统自动关闭,则不会触发 notificationclose 事件。

下面展示了一个简单的实现。当用户关闭通知时,您可以访问通知对象,从而从中执行自定义逻辑。

self.addEventListener('notificationclose', e => console.log(e.notification));

您可以在通知生成器中对此进行测试;关闭通知时您将收到提醒。

替换现有通知时不会令用户生厌

我很肯定,Ben 叔叔在说“能力越大,责任越大”时谈论的是通知系统,而不是 Peter Parker 的能力。通知系统是用来与用户互动的强大媒介。如果您滥用他们的信任,他们会关闭所有通知,而您可能会完全失去他们。

创建通知时,您可以设置通知,让其发出声音提醒或振动,以吸引用户的注意。此外,您还可以通过在新通知对象中重复使用现有通知的“标记”属性来替换现有通知。

在 Chrome 50 之前,每次您创建通知或替换现有通知时,系统都会运行振动模式或播放声音提醒,这可能会让用户感到失望。现在,在 Chrome 50 中,您可以通过一个名为“renotify”的简单布尔标记来控制重新通知期间发生的情况。 针对后续通知使用相同的“标记”时,新的默认行为是静默状态;作为开发者,您必须通过将标志设置为“true”来选择“重新通知”用户。

self.registration.showNotification('Oi!', {
  'renotify': true,
  'tag': 'tag-id-1'
});

您可以在通知生成器中试用此功能。

管理向用户显示的时间戳

在 Android 上,Chrome 的通知默认在右上角显示创建时间。遗憾的是,这可能并不是系统实际生成通知的时间。例如,事件可能是在设备离线时触发的,或者可能针对即将召开的会议显示通知。从 Chrome 50 开始,Chrome 已添加一个新的“timestamp”属性,该属性可让开发者提供应在通知中显示的时间。

self.registration.showNotification('Best day evar!', {
  'timestamp': 360370800000
});

时间戳目前仅在 Android 版 Chrome 上显示。尽管它在桌面设备上不可见,但会影响移动设备和桌面设备上的通知顺序。