实时更新可提供从服务器直接到扩展程序安装的即时通信路径。您可以在事件发生时发送和接收数据。无论您是将其用于即时通讯、触发后台任务还是同步设备数据,它都是许多现代服务中的一项关键操作。Chrome 扩展程序中有很多选项可用于实现实时通信。
- Web Push(即 Push API)是一种 Web 标准,可让您通过任何 Push 提供方甚至使用自己的 Web 服务器在 Chrome 扩展程序中发送和接收消息。
- browser.gcm 是一种旧版扩展程序专用 API,可让您使用 Firebase Cloud Messaging 发送和接收消息。
- WebSockets 是一种低级协议,可让您在 Chrome 扩展程序与服务器之间建立双向连接。
常见使用场景
以下是 Chrome 扩展程序中需要实时通信的一些常见场景:
让用户及时了解变化。
如果您要在多个用户之间同步文件、设置或其他信息,那么 Web 推送是向扩展程序发送静默更新的理想方式,以便让扩展程序知道要从服务器更新状态。
您是否允许用户报告 bug 或问题?您可以与推送提供商集成,以便在扩展程序中直接告知他们您有更新要分享。
向用户发送通知。
虽然您可以完全在客户端发送通知,但如果您有服务器端逻辑来确定向谁、发送什么、在何处或何时发送通知,那么 Web 推送是最具前瞻性的选择。
如果仅向部分用户发送消息,那么推送是最佳选择。
虽然 Firebase Cloud Messaging 确实提供了主题(也称为渠道),但它仅在 HTTP Cloud Messaging API 中可用。这与 browser.gcm 使用的旧版不同。如果您想向所有用户(包括使用旧版 Chrome(Chrome 121 之前)的用户)发送广播消息,那么 browser.gcm 是理想之选。browser.gcm 基于旧版 Firebase Messaging API 构建,在 Chrome 中已支持十多年。
您可以使用 Web 推送或 browser.gcm 在用户账号发生重要事件时(例如收到新消息或文件被共享时)向用户发送通知。
即时通讯
需要频繁的双向通信?那么,WebSocket 可能是您的最佳选择。它会在扩展程序和服务器(甚至直接与其他用户)之间建立双向连接。借助它,您可以实时交换数据和消息。虽然它们在网络上通常是不错的选择,但在扩展程序方面存在一些限制,如果您打算使用它们,则需要牢记这些限制。
在本指南的其余部分,我们将详细了解可用的选项。
使用 Push API 发送推送通知
借助 Push API,您可以使用任何推送提供商来发送推送通知和消息。来自 Push API 的推送在收到后会立即由您的 Service Worker 处理。如果扩展程序已被暂停,推送会将其唤醒。在扩展程序中使用它的流程与在开放式网络中使用它的流程完全相同。
通过 browser.gcm 发送推送通知
browser.gcm API 可直接连接到 Firebase Cloud Messaging (FCM),后者是一项用于向 Web 应用和移动应用发送实时更新的服务。这是一个 Chrome 特定的扩展程序 API,在浏览器中提供 Push 之前就已添加。它是使用 Firebase 的(现已弃用的)旧版 HTTP API 构建的。虽然这些 API 在其他地方已被废弃,但在扩展程序中并未被废弃。在可预见的未来,它们将继续正常运行。不过,由于这是旧版推送后端,因此它缺少主题等功能。
虽然 FCM 后端服务是 Chrome 中通知到达用户的硬性要求,但您无需使用 browser.gcm 即可发送消息。所有推送提供程序都能够使用 Web 推送向 Firebase 账号发送和接收消息及事件。虽然这仍然是完全受支持的 Chrome 扩展程序 API,但最佳实践是优先使用 Push API 等 Web 标准,而不是像这样特定于扩展程序的 API。如果您的使用情形最适合使用 browser.gcm,请参阅详细的操作指南,了解如何从头开始设置 browser.gcm。
通过 WebSocket 进行实时消息传递
WebSockets 十多年来一直是 Web 上实时消息传递的基石。它们一直是网络上实时事件的首选方案,可提供持续的双向对话。WebSocket 可在各种扩展组件中使用,无论是内容脚本、弹出式窗口、侧边栏还是后台服务工作器。虽然它们在网络上通常是不错的选择,但在扩展方面存在一些限制,如果您打算使用它们,则需要牢记这些限制。
不适合推送通知
由于 WebSocket 在 Web 平台中运行,而不是使用 browser.gcm 等扩展平台 API,因此当在扩展程序外部启动 WebSocket 连接时,Chrome 无法唤醒您的扩展程序。
仅限有效连接
Chrome 会在 30 秒后暂停未使用的扩展程序。Chrome 会使用多种启发式方法来确定扩展程序是否“正在使用”,其中一种方法是检查是否存在有效的 WebSocket 连接。如果扩展程序在过去 30 秒内发送或接收了 WebSocket 消息,Chrome 将不会暂停该扩展程序。如果您在扩展程序中使用 WebSocket,并且需要确保它不会过早关闭,则可以发送心跳消息来保持连接。这包括定期向服务器发送消息,让服务器和 Chrome 知道您仍处于活跃状态。如需查看如何无限期保持 WebSocket 活跃状态的示例,请参阅我们的 WebSocket 文档。