Como enviar notificação push para o navegador web?

estive a ler nas últimas horas sobre API de notificação Push e API de notificação Web. Eu também descobri que o Google & Apple oferece serviço de notificação push gratuitamente via GCM e APNS, respectivamente.

estou a tentar perceber se podemos implementar a notificação push para navegadores usando a notificação Desktop, que acredito ser o que a API de notificação Web faz. Eu vi uma documentação do google sobre como isso pode ser feito para o Chrome Aqui & Aqui.

O que ainda não consigo entender é:
  1. podemos usar o GCM / APNS para enviar notificação push a todos os navegadores da Web, incluindo o Firefox & Safari?
  2. Se não através da GCM, podemos ter o nosso próprio back-end para fazer o mesmo?
Creio que todas estas respostas numa só resposta podem ajudar muitas pessoas que estão a ter confusões semelhantes.

Author: sideshowbarker, 2015-11-13

9 answers

Então aqui estou eu a responder à minha própria pergunta. Eu tenho respostas para todas as minhas consultas de pessoas que construíram serviços de notificação push no passado.

Actualização (Maio De 2018): aqui está um abrangente e um doc muito bem escrito na notificação Web push do Google.

Resposta às perguntas originais feitas há 3 anos:

  1. podemos usar o GCM / APNS para enviar notificação push para todos os navegadores da Web incluindo Firefox & Safari?

Resposta: O Google depreciou o GCM a partir de abril de 2018. Pode agora utilizar mensagens na nuvem da Firebase (FCM). Isto suporta todas as plataformas, incluindo navegadores web.

    Se não através da GCM, podemos ter o nosso próprio back-end para fazer o mesmo?

Resposta: Sim, a notificação pode ser enviada a partir do nosso próprio back-end. O suporte para o mesmo chegou a todos os navegadores principais.

Verifique Este codelab do Google para entender melhor a implementação.

Implementar infra-estrutura própria em várias linguagens de programação.:

Outras Leituras:

  • Uma boa visão geral do Web Push do Google pode ser encontrada aqui.
  • Uma resposta de Perguntas frequentes e perguntas.

Existem serviços gratuitos para fazer o mesmo? Existem algumas empresas que fornecem uma solução semelhante em modelos gratuitos, freemium e pagos. Am listing few below:

  1. https://onesignal.com | (Free / Support all platforms)
  2. https://firebase.google.com/products/cloud-messaging / (livre)
  3. https://clevertap.com/ (Tem livre plano)
  4. https://goroost.com/

Nota: Ao escolher um serviço gratuito lembre-se de ler os OT. Serviços gratuitos muitas vezes funcionam coletando dados do Usuário para vários fins, incluindo análises.

Além disso, você precisa ter HTTPS para enviar notificações de push. No entanto, pode obter https livremente através de letsencrypt.org

 109
Author: esafwan, 2018-05-25 20:16:07
O Javier cobriu as notificações e as limitações actuais. A minha sugestão é que enquanto esperamos que o navegador deficiente recupere o atraso, o outro ainda está a trabalhar com os Web Workers.

Estas poderão ser a opção de recurso com o comando de visualização de mensagens na caixa de diálogo, para quando um teste de funcionalidade de notificação falhar ou a permissão for negada.

A notificação tem recurso e a verificação da autorização de recusa:

if (!("Notification" in window) || (Notification.permission === "denied") ) {
    // use (window||Worker).postMessage() fallback ...
}
 18
Author: greg.arnott, 2016-03-18 08:34:45

Os GCM / APNS são apenas para cromados e Safari, respectivamente.

Acho que estás à procura Notification:

Https://developer.mozilla.org/en-US/docs/Web/API/notification

Funciona em Chrome, Firefox, Opera e Safari .

 10
Author: Javier Conde, 2017-05-06 22:56:56

Presumo que esteja a falar de Real 'push' notificações que podem ser entregues mesmo quando o utilizador não está a navegar no seu site (caso contrário, consulte WebSockets ou métodos antigos, como sondagens longas).

Podemos usar o GCM / APNS para enviar notificação push a todos os navegadores da Web, incluindo o Firefox & Safari?

O GCM é apenas para o cromado e o APNs é apenas para o Safari. Cada fabricante de navegador oferece seu próprio serviço.

Se não através da GCM podemos ter a nossa o próprio back-end para fazer o mesmo?

A API de empurrar requer duas infra-estruturas! Um deles é oferecido pelo fabricante do navegador e é responsável por entregar a notificação ao dispositivo. O outro deve ser seu (ou você pode usar um serviço de terceiros como Pushpad) e é responsável por desencadear a notificação e contactar o serviço do fabricante do navegador (ou seja, GCM, APNs, Mozilla push servers).

divulgação: eu sou o Pushpad fundador

 9
Author: collimarco, 2018-05-09 23:01:40

Você pode enviar dados do servidor para o navegador através de eventos do lado do Servidor. Este é essencialmente um fluxo unidirecional que um cliente pode "subscrever" a partir de um navegador. A partir daqui, você pode apenas criar novos objetos Notification como fluxo de SSEs para o navegador:

var source = new EventSource('/events');

source.on('message', message => {
  var notification = new Notification(message.title, {
    body: message.body
  });
}); 

Um pouco velho, mas este artigo de Eric Bidelman explica o básico do SSE e fornece alguns exemplos de código de servidor também.

 8
Author: djfdev, 2015-11-23 22:47:40

Posso redefinir a sua pergunta Como Abaixo

Podemos ter o nosso próprio back-end para enviar uma notificação de push ao Chrome, Firefox, Opera & Safari?
Sim. Até hoje (2017/05), Você pode usar a mesma implementação cliente e servidor para lidar com Chrome, Firefox e Opera (sem Safari). Porque eles implementaram notificações Web push da mesma forma. Isso é empurrar o protocolo API pelo W3C. mas o Safari tem a sua própria arquitectura antiga. Por isso, temos de o fazer. manter o Safari separadamente.

Consulte browser-push repo para as linhas-guia para implementar Notificação Web push para a sua aplicação web com o seu próprio back-end. Ele explica com exemplos como você pode adicionar suporte de notificação Web push para sua aplicação web sem quaisquer serviços de terceiros.

 6
Author: TRiNE, 2017-05-10 06:24:10
A partir de agora, o GCM só funciona para o chrome e o android. similarmente firefox e outros navegadores têm sua própria api.

Agora passando à questão de como implementar notificação push de modo que ele irá funcionar para todos os navegadores comuns com o próprio back end.

  1. você precisa do código de script do lado do cliente,I. E. trabalhador do Serviço, veja (a notificação do Google push ). Embora isto continue a ser o mesmo para outros navegadores.

2.depois de obter o endpoint usando Ajax salve-o juntamente com o navegador nome.

3.Você precisa criar back end que tem campos para título,mensagem, ícone,clique em URL de acordo com suas necessidades. agora, depois de clicar em enviar notificação, chame uma função say send_push (). Neste código de escrita para diferentes navegadores, por exemplo

3.1. pelo cromado

 $headers = array(
          'Authorization: key='.$api_key(your gcm key),
          'Content-Type: application/json',
     );
   $msg = array('to'=>'register id saved to your server');
   $url = 'https://android.googleapis.com/gcm/send';
   $ch = curl_init();

      // Set the url, number of POST vars, POST data
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($msg));

      $result = curl_exec($ch);

3.2. para mozilla

$headers = array(            
              'Content-Type: application/json',
              'TTL':6000
            );

       $url = 'https://updates.push.services.mozilla.com/wpush/v1/REGISTER_ID_TO SEND NOTIFICATION_ON';

      $ch = curl_init();

      // Set the url, number of POST vars, POST data
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);


      $result = curl_exec($ch);

Para outros navegadores, por favor procure no google...

 4
Author: Arjun singh, 2016-10-17 07:53:36
Eu sugiro usar o pubnub. Eu tentei usar os trabalhadores do Serviço e PushNotification a partir do navegador no entanto, quando eu tentei it webviews não suportou isso.

Https://www.pubnub.com/docs/web-javascript/pubnub-javascript-sdk

 1
Author: ColacX, 2017-05-23 12:58:28

Esta é uma forma simples de fazer a notificação de push para todo o navegador https://pushjs.org

Push.create("Hello world!", {
body: "How's it hangin'?",
icon: '/icon.png',
timeout: 4000,
onClick: function () {
    window.focus();
    this.close();
}

});

 1
Author: abderrahime sanadi, 2018-04-23 09:37:07