扩展程序中的实时更新

实时更新提供了从服务器直接到扩展程序安装的即时通信路径。您可以在事件发生时发送和接收数据。无论您是将它用于即时通讯、触发后台任务或同步设备数据,它都是涉及许多现代服务的关键操作。您可以通过多种方式在 Chrome 扩展程序中进行实时通信。

  • Web 推送 (Push API) 是一种 Web 标准,可让您在 Chrome 扩展程序中通过任何推送提供程序(甚至您自己的网络服务器)发送和接收消息。
  • chrome.gcm 是旧版扩展程序专用 API,可让您使用 Firebase Cloud Messaging 发送和接收消息。
  • WebSockets 是一种低级别协议,允许您在 Chrome 扩展程序和服务器之间打开双向连接。

常见方案

以下是实时通信至关重要的 Chrome 扩展程序中的一些常见场景:

让用户及时了解更改。

如果您要在多个用户之间同步文件、设置或其他信息,那么 Web Push 是向您的扩展程序发送静默更新以告知其从服务器更新状态的理想方式。

您是否允许用户报告 bug 或问题?您可以集成推送提供程序,以便在您有要共享的更新时,直接在您的扩展程序中通知他们。

向用户发送通知。

虽然您可以完全在客户端发送通知,但如果服务器端逻辑确定发送通知的对象、内容、位置或时间,那么与 Web 推送相比,Web Push 将是最能满足未来需求的方案。

如果仅向一部分用户发送消息,则推送是最佳选择。 虽然 Firebase Cloud Messaging 确实提供 Topics(也称为“渠道”),但只能在 HTTP Cloud Messaging API 中使用。这与 chrome.gcm 使用的旧版不同。如果您希望向所有用户发送广泛消息,包括使用旧版 Chrome(Chrome 121 以下版本)的用户,chrome.gcm 是理想之选。chrome.gcm 基于旧版 Firebase 消息传递 API 而构建,十多年来一直受到 Chrome 的支持。

您可以使用网页推送或 chrome.gcm,在发生对用户帐号的重要情况时(例如收到新消息或共享文件时)向用户发送通知。

即时通讯

需要频繁的双向通信?那么 Web Socket 可能是您的最佳选择。它会在您的扩展程序和服务器(甚至直接连至其他用户)之间打开双向连接。您可以实时交换数据和消息。虽然它们一般是 Web 应用的理想选择,但它们存在一些扩展程序限制,如果您打算使用它们,请务必注意。

在本指南的其余部分,我们将详细了解可用的选项。

使用 Push API 实现推送通知

借助 Push API,您可以使用任何推送提供程序发送推送通知和消息。一旦收到 Push API 推送,您的 Service Worker 就会对其进行处理。如果扩展程序已暂停,通过 Push 会重新将其唤醒。在扩展程序中使用它的过程与在开放网络中使用完全相同。

使用 chrome.gcm 接收推送通知

chrome.gcm API 提供与 Firebase Cloud Messaging (FCM) 的直接连接,Firebase Cloud Messaging (FCM) 服务用于向 Web 应用和移动应用发送实时更新。这是 Chrome 专用的扩展程序 API,在浏览器推出推送功能之前已有数年增加。它是使用 Firebase(现已弃用)的旧版 HTTP API 构建的。虽然这些 API 已在其他地方弃用,但它们在扩展程序中不会弃用。在可预见的未来,它们将继续工作。但是,由于这是旧版推送后端,因此它缺少 Topics 等功能。

虽然必须使用 FCM 后端服务才能在 Chrome 中收到通知,但您无需使用 chrome.gcm 即可发送消息。所有推送提供方都可以使用网页推送向 Firebase 帐号发送和接收消息和事件。虽然这仍然是一个完全受支持的 Chrome Extension API,但最佳做法是优先采用 Push API 等网络标准,而不是像这样的扩展程序专用标准。如果您的用例最好使用 chrome.gcm,请查看有关如何从头开始设置 chrome.gcm 的详细操作方法

使用 WebSocket 实现实时消息

十多年来,WebSockets 一直是 Web 实时消息传递的基石。它们已成为网络上实时事件的首选方案,可以提供连续的双向对话。WebSocket 适用于各种扩展程序组件,包括内容脚本弹出式窗口侧边栏和/或后台 Service Worker。虽然它们一般是 Web 应用的理想选择,但它们在扩展程序方面存在一些限制,如果您打算使用它们,需要注意。

不适合推送通知

由于 WebSocket 在 Web 平台中运行,而不是使用 chrome.gcm 等扩展程序平台 API,因此在扩展程序外部启动 Websocket 连接时,Chrome 无法唤醒您的扩展程序。

仅限活跃连接

Chrome 会在 30 秒后暂停未使用的扩展程序。Chrome 会通过许多启发法来确定是否“正在使用”扩展程序,其中一个就是有效的 WebSocket 连接。Chrome 不会暂停在过去 30 秒内发送或接收 WebSocket 消息的扩展程序。如果您在扩展程序中使用 WebSocket,并且需要确保 WebSocket 不会过早关闭,您可以发送检测信号来保持连接。这包括定期向服务器发送消息,让服务器和 Chrome 知道您仍处于活跃状态。如需查看有关如何无限期地让 websocket 保持活动状态的示例,请参阅我们的 WebSocket 文档