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