扩展程序中的实时更新

实时更新提供了从服务器直接到扩展程序安装的即时通信路径。您可以在事件发生时发送和接收数据。无论您将该应用用于即时通讯、触发后台任务还是同步设备数据,它都是一项与许多现代服务搭配使用的关键操作。Chrome 扩展程序中有多种实时通信功能

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

常见方案

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

让用户及时了解最新更改。

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

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

向用户发送通知。

虽然您可以在完全客户端发送通知,但如果您具有关于谁、什么、在哪里或何时发送通知的服务器端逻辑,则比网络推送是最能满足未来需求的选项。

如果只想向一部分用户发送消息,推送是最佳选择。 虽然 Firebase Cloud Messaging 确实提供 Topics(也称为通道),但它仅在其 HTTP Cloud Messaging API 中提供。这与 chrome.gcm 使用的旧版本不同。如果您想要向所有用户(包括使用旧版 Chrome(Chrome 121 之前的版本)的用户)发送广泛消息,那么 chrome.gcm 是理想的选择。chrome.gcm 基于旧版 Firebase Messaging API 构建,十多年来在 Chrome 中一直受支持。

当发生对用户帐号具有重要意义的事情时(例如收到新消息或共享文件时),您可以使用 Web 推送或 chrome.gcm 向用户发送通知。

即时通讯

需要频繁的双向沟通?那么 Web 套接字可能是您的最佳选择。它会在您的扩展程序与您的服务器之间建立双向连接(甚至直接面向其他用户)。它可让您实时交换数据和消息。虽然扩展程序在 Web 上通常是一个不错的选择,但如果您计划使用扩展程序,则需要注意这些扩展程序的一些限制

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

使用 Push API 推送通知

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

使用 chrome.gcm 接收推送通知

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

虽然 FCM 后端服务是向 Chrome 中的用户发送通知的硬性要求,但是您无需使用 chrome.gcm 即可发送消息。所有推送提供程序都能使用 Web 推送功能向 Firebase 帐号发送和接收消息和事件。虽然这仍然是一个完全受支持的 Chrome Extension API,但最佳做法是优先使用 Push API 等 Web 标准,而不是像这样的扩展程序专用标准。如果您的用例最适合使用 chrome.gcm,请参阅详细的操作方法,了解如何从头开始设置 chrome.gcm。

使用 WebSocket 实时发送消息

十多年来,WebSockets 一直是 Web 实时消息传递的基石。它们已成为 Web 上的实时事件的首选选项,能够提供连续的双向对话。WebSocket 适用于各种扩展程序组件,包括内容脚本弹出式窗口侧边栏后台 Service Worker。虽然在 Web 上一般来说,扩展程序是很好的选择,但它们在一些方面存在一些限制,因此如果您打算使用这些扩展程序,请务必注意。

不适合推送通知

WebSocket 在网络平台中运行,而不是使用 chrome.gcm 等扩展程序平台 API,当您的扩展程序外部发起 Websocket 连接时,Chrome 无法唤醒您的扩展程序。

仅限活跃连接

如果扩展程序在 30 秒后没有被使用,Chrome 就会将其暂停。Chrome 会采用一系列启发法来确定扩展程序是否“正在使用”,其中之一是处于活动状态的 WebSocket 连接。Chrome 不会暂停在过去 30 秒内发送或接收 WebSocket 消息的扩展程序。如果您在扩展程序中使用 WebSocket,并且需要确保该模式不会过早关闭,您可以发送检测信号消息来保持连接。这涉及定期向服务器发送消息,让服务器和 Chrome 知道您仍处于活跃状态。我们的 WebSocket 文档提供了有关如何使 websocket 无限期地保持活动的示例。