Atualizações em tempo real nas extensões

As atualizações em tempo real oferecem um caminho de comunicação instantâneo dos seus servidores diretamente para as instalações de extensão. É possível enviar e receber dados à medida que os eventos acontecem. Seja para mensagens instantâneas, acionamento de tarefas em segundo plano ou sincronização de dados do dispositivo, é uma operação essencial com vários serviços modernos. Há várias opções para ter comunicação em tempo real em extensões do Chrome.

  • O Web Push, ou API Push, é um padrão da Web que permite enviar e receber mensagens em uma extensão do Chrome de qualquer provedor de push ou até mesmo com seu próprio servidor da Web.
  • chrome.gcm é uma API legada específica para extensões que permite enviar e receber mensagens usando o Firebase Cloud Messaging.
  • WebSockets é um protocolo de baixo nível que permite abrir uma conexão bidirecional entre sua extensão do Chrome e seu servidor.

Cenários comuns

Confira alguns cenários comuns em extensões do Chrome em que a comunicação em tempo real é essencial:

Mantenha os usuários atualizados sobre as mudanças.

Se você estiver sincronizando arquivos, configurações ou outras informações entre vários usuários, o Web Push será a maneira perfeita de enviar atualizações silenciosas para sua extensão e informar que ela precisa atualizar o estado do servidor.

Você permite que os usuários relatem bugs ou problemas? Você pode fazer a integração com um provedor de push para avisar assim que tiver uma atualização para compartilhar, diretamente na extensão.

Enviar notificações para usuários.

Embora seja possível enviar notificações completamente do lado do cliente, se você tiver uma lógica do lado do servidor para quem, o quê, onde ou quando enviar uma notificação, o Web Push será a opção mais preparada para o futuro.

Se você quiser enviar mensagens apenas para um subconjunto de usuários, a melhor opção é o Push. Embora o Firebase Cloud Messaging ofereça tópicos (também conhecidos como canais), eles só estão disponíveis na API HTTP Cloud Messaging. Isso é diferente da versão legada usada pelo chrome.gcm. Se você quiser enviar mensagens gerais para todos os usuários, incluindo aqueles em versões legadas do Chrome (antes do Chrome 121), o chrome.gcm é a opção ideal. Criado com base nas APIs de mensagens legadas do Firebase, o chrome.gcm é compatível com o Chrome há mais de uma década.

Você pode usar o Web Push ou chrome.gcm para enviar notificações aos usuários quando algo importante acontecer na conta deles, como quando uma nova mensagem chega ou quando um arquivo é compartilhado.

Mensagens instantâneas

Precisa de comunicação bidirecional frequente? Então, um WebSocket pode ser a melhor opção para você. Ela abre uma conexão bidirecional entre sua extensão e seu servidor (ou até mesmo diretamente para outros usuários). Ele permite trocar dados e mensagens em tempo real. Embora sejam uma ótima opção na Web em geral, elas têm algumas limitações com extensões que você precisa ter em mente se planeja usá-las.

No restante deste guia, vamos analisar melhor as opções disponíveis.

Notificações push com a API Push

Com a API Push, você pode usar qualquer provedor de push para enviar notificações e mensagens push. Um push da API Push será processado pelo service worker assim que for recebido. Se a extensão tiver sido suspensa, uma notificação push vai reativá-la. O processo para usar em extensões é exatamente o mesmo que você usaria na Web aberta.

Notificações push com chrome.gcm

A API chrome.gcm oferece uma conexão direta com o Firebase Cloud Messaging (FCM), um serviço para enviar atualizações em tempo real a aplicativos da Web e para dispositivos móveis. Essa é uma API de extensão específica do Chrome que foi adicionada muitos anos antes de o Push estar disponível nos navegadores. Ele foi criado usando as APIs HTTP legadas (agora descontinuadas) do Firebase. Embora essas APIs estejam descontinuadas em outros lugares, elas não estão descontinuadas em extensões. Elas vão continuar funcionando no futuro próximo. No entanto, como esse é o back-end push legado, ele não tem recursos como Temas.

Embora um serviço de back-end do FCM seja um requisito obrigatório para que as notificações cheguem aos usuários no Chrome, não é necessário usar chrome.gcm para enviar mensagens. Todos os provedores de push podem enviar e receber mensagens e eventos para uma conta do Firebase usando o push da Web. Embora essa ainda seja uma API de extensão do Chrome totalmente compatível, a prática recomendada é preferir padrões da Web, como a API Push, em vez de APIs específicas de extensão, como essa. Se o seu caso de uso for melhor atendido com chrome.gcm, confira um tutorial detalhado sobre como configurar o chrome.gcm do zero.

Mensagens em tempo real com WebSockets

Os WebSockets são a base das mensagens em tempo real na Web há mais de uma década. Eles são a opção ideal para eventos em tempo real na Web, oferecendo uma conversa contínua e bidirecional. Os WebSockets funcionam em vários componentes de extensão, sejam scripts de conteúdo, pop-ups, painéis laterais ou service workers em segundo plano. Embora sejam uma ótima opção na Web em geral, elas têm algumas limitações com extensões que você precisa ter em mente se planeja usá-las.

Não é bom para notificações push

Como os WebSockets são executados na plataforma da Web, em vez de usar uma API de plataforma de extensão, como chrome.gcm, o Chrome não tem como ativar sua extensão quando uma conexão WebSocket é iniciada fora dela.

Somente conexões ativas

O Chrome suspende as extensões que não estão sendo usadas após 30 segundos. Várias heurísticas ajudam o Chrome a determinar se a extensão está "sendo usada". Uma delas é uma conexão WebSocket ativa. O Chrome não suspende uma extensão que enviou ou recebeu uma mensagem do WebSocket nos últimos 30 segundos. Se você estiver usando WebSockets na sua extensão e precisar garantir que ela não seja fechada prematuramente, envie uma mensagem de pulsação para manter a conexão. Isso envolve o envio de mensagens periódicas ao servidor, informando a ele e ao Chrome que você ainda está ativo. Um exemplo de como manter um websocket ativo indefinidamente está disponível na documentação do WebSocket.