Como integrar notificações push em seu PWA

Publicados: 2021-04-28

Índice

Em nosso tutorial de hoje, estaremos integrando Push Notifications em um PWA usando Firebase, ou mais especificamente, usando o recurso Cloud Messaging dentro dele, que permite o envio de mensagens usando solicitações HTTPS.

Aplicativos da Web progressivos e notificações push

Como o Progressive Web App é um movimento em constante mudança, não é surpreendente ver que a própria tecnologia tornou-se no mesmo nível (em termos de função) com sua contraparte do aplicativo nativo.

 Leitura recomendada: PWA vs Native: Qual combina melhor com você?

Os acionadores de notificação dão aos desenvolvedores a capacidade de agendar notificações, mesmo se o dispositivo do usuário estiver no modo avião.

Jon Krafcik, Chrome Dev Summit 2019
Acionadores de notificação por push - Chrome Dev Summit 2019
Novidade no Chrome 80, os acionadores de notificação permitem notificações mesmo no modo avião

Com todas essas mudanças radicais em vigor, seria um desperdício não aproveitá-las para gerar ainda mais receita para o seu PWA. E nem é algo muito complicado, pois você pode facilmente configurar uma função de notificação por push própria usando este tutorial.

 Leitura recomendada: 9 recursos obrigatórios de um aplicativo da Web progressivo (PWA) para comércio eletrônico

Como integrar notificações push em seu PWA

Em nosso tutorial de hoje, estaremos integrando Push Notifications em um PWA usando Firebase , especificamente o recurso Cloud Messaging que permite o envio de mensagens usando solicitações HTTPS.

Pré-requisitos

  • Uma conta do Firebase (já que você criará um projeto no Firebase)
  • Um aplicativo da Web progressivo. Para uma demonstração simplificada, usaremos um aplicativo create-react que é um PWA básico que pode ser criado usando um comando
Notificações push do PWA: crie um projeto do Firebase
Criar um projeto com o Firebase

Etapa 1 : criar um PWA básico

Já que estaremos criando um PWA básico usando create-react-app, vamos baixar o NodeJS primeiro. Após terminar de instalar o NodeJS, abra o prompt de comando do NodeJS e execute os comandos a seguir.

Para criar um aplicativo React simples em seu diretório especificado:

 npx create-react-app your-pwa-directory

Altere o diretório de trabalho atual para seu aplicativo React recém-criado:

 cd seu-diretório-pwa

Adicione a biblioteca JavaScript do Firebase ao projeto:

 npm instala firebase --save 
Instalando o Firebase

Etapa 2: crie seu push-notification.js

O próximo passo é criar o módulo que se encarregará de todos os seus processamentos de notificações. Em <your-pwa-directory>\src , crie um arquivo chamado push-notification.js .

Primeiro, vamos criar uma função que inicialize o Firebase e passe as chaves do seu projeto. Você pode encontrar as chaves do seu projeto acessando Firebase > Visão geral do projeto > Configurações do projeto e clique neste ícone:

SDK do Firebase para notificação por push do PWA

Isso direcionará você para outra página que contém o SDK do Firebase para seu PWA:

SDK do Firebase

Agora que temos as chaves do nosso projeto, vamos adicionar o seguinte código ao seu push-notification.js .

 importar o firebase de 'firebase';
export const inicializeFirebase = () => {
  firebase.initializeApp({
    apiKey: "XXXXXXXXXXXXX",
    authDomain: "XXXXXXXXXXXXX",
    databaseURL: "XXXXXXXXXXXXX",
    ID do projeto: "XXXXXXXXXXXXX",
    storageBucket: "XXXXXXXXXXXXX",
    messagingSenderId: "XXXXXXXXXXXXXX",
    appId: "XXXXXXXXXXXXX"
  });
}

Com isso, você criou a função responsável por todo o processamento de suas notificações, agora você precisará importá-la e chamá-la. Edite seu index.js assim:

 importe React de 'react';
importe ReactDOM de 'react-dom';
import './index.css';
importar App de './App';
import * como serviceWorkerRegistration de './serviceWorkerRegistration';
importar reportWebVitals de './reportWebVitals';
importar o firebase de 'firebase';
import { initializeFirebase } from './push-notification';
ReactDOM.render(<App />, document.getElementById('root'));
inicializeFirebase();

Etapa 3: criar um service worker

Service Workers é o nome da tecnologia por trás de um Progressive Web App, que potencializa sua capacidade offline, notificações push e armazenamento em cache de recursos.

SimiCart, tudo o que você precisa saber sobre aplicativos da Web progressivos

É necessário um service worker para receber o evento onMessage e, consequentemente, permitir o envio de notificações para o dispositivo do usuário. Por padrão, o Firebase procura automaticamente um arquivo chamado firebase-messaging-sw.js .

Vamos adicionar firebase-messaging-sw.js ao diretório em que seus arquivos são veiculados. Como o nosso é um projeto create-react create-react-app , este firebase-messaging-sw.js estará em nossa pasta pública:

 importScripts('https://www.gstatic.com/firebasejs/8.4.1/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/8.4.1/firebase-messaging.js');
firebase.initializeApp({
    apiKey: "XXXXXXXXXXXXX",
    authDomain: "XXXXXXXXXXXXX",
    databaseURL: "XXXXXXXXXXXXX",
    ID do projeto: "XXXXXXXXXXXXX",
    storageBucket: "XXXXXXXXXXXXX",
    messagingSenderId: "XXXXXXXXXXXXXX",
    appId: "XXXXXXXXXXXXX"
});
const messaging = firebase.messaging();

Se você ainda não ouviu falar do PWA Service Worker, temos um artigo exclusivo para você aprender tudo sobre essa tecnologia incrível.

Etapa 4: solicitar permissões de usuário para enviar notificações

É a era da privacidade e você não quer incomodar seus usuários enviando notificações indesejadas e não autorizadas!

Para solicitar a permissão do seu usuário, basta adicionar isso ao seu push-notification.js :

 importar o firebase de 'firebase';
 
export const inicializeFirebase = () => {
  firebase.initializeApp({
    apiKey: "XXXXXXXXXXXXX",
    authDomain: "XXXXXXXXXXXXX",
    databaseURL: "XXXXXXXXXXXXX",
    ID do projeto: "XXXXXXXXXXXXX",
    storageBucket: "XXXXXXXXXXXXX",
    messagingSenderId: "XXXXXXXXXXXXXX",
    appId: "XXXXXXXXXXXXX"
  });
}
 
export const askForPermissionToReceiveNotifications = assíncrono () => {
  tentar {
    const messaging = firebase.messaging();
    aguardar mensagens.requestPermission();
    const token = await messaging.getToken();
    console.log('Seu token é:', token);
    
    ficha de retorno;
  } pegar (erro) {
    console.error(erro);
  }
}

E como essa função precisará ser chamada de algum lugar, vamos adicioná-la com o clique de um botão. Edite o arquivo app.js em seu diretório /src/ assim:

 importar logotipo de './logo.svg';
import './App.css';
import { askForPermissionToReceiveNotifications } from './push-notification';

função App() {
  Retorna (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edite <code>src/App.js</code> e salve para recarregar.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          alvo="_blank"
          rel="noopener noreferrer"
        >
          Aprenda Reagir
        </a>
		 <button onClick={askForPermissionToReceiveNotifications} >
          Clique para receber notificações
        </button>
      </header>
    </div>
  );
}

exportar aplicativo padrão;

Agora vamos iniciar nosso projeto e você deve ver um botão Clique para receber notificações assim:

Clique para receber o botão de notificações

Clique no botão e você deverá ver um pop-up pedindo sua permissão:

Aviso de notificação por push

Clique em Permitir e verifique o console do seu navegador. Você deve ver uma mensagem notificando sobre seu token:

Token de uso gerado

Agora salve esse token em outro lugar porque você precisará dele na próxima etapa.

Etapa 5: enviar notificações push com o Postman

Nas próximas etapas, usaremos o Postman para enviar notificações usando o serviço Cloud Messaging do Firebase.

No Postman, crie uma solicitação POST com as seguintes informações:

  • URL de solicitação : https://fcm.googleapis.com/fcm/send
  • Headers : Nos cabeçalhos da sua solicitação POST, você precisará ter as seguintes chaves:

Autorização: key= SERVER_KEY

Tipo de conteúdo : application/json

Autorização e Tipo de Conteúdo configurados corretamente

Observações : SERVER_KEY pode ser encontrado na guia Cloud Messaging nas configurações do Firebase

  • Body : Preencha o corpo da sua solicitação POST com o seguinte código:
 {
    "notificação": {
        "title": "SimiCart",
        "body": "Testar notificação push",
        "click_action": "http://localhost:3000/",
        "icon": "https://i.imgur.com/5zO5cce.png"
    }
    "para": "USER_TOKEN"
}

Substitua USER_TOKEN pelo token que você obteve (clicando no botão Click to receive notifications ) na Etapa 4. Não esqueça de escolher Body type as raw e JSON .

Corpo do carteiro

Agora clique em Enviar e você deverá ver uma notificação aparecendo no canto inferior direito:

Teste o resultado da notificação por push

Observações : Essas notificações só aparecem quando o aplicativo está em segundo plano ou minimizado.

Parabéns! Seu PWA agora pode enviar notificações!

Conclusão

Esperamos que, após este guia, você possa configurar com confiança uma função de notificação por push própria. Sendo uma nova tecnologia, o Progressive Web Apps certamente é uma coisa complicada para usuários não experientes em tecnologia, e é por isso que existem provedores de soluções prontamente disponíveis, como o SimiCart, que podem cuidar de todas as suas necessidades com nossos anos de experiência em PWAs.

Explore o simicart PWA