Cómo enviar notificaciones push al navegador web?


He estado leyendo durante las últimas horas sobre Push Notification API y Web Notification API. También descubrí que Google & Apple da servicio de notificación push de forma gratuita a través de GCM y APNS respectivamente.

Estoy tratando de entender si podemos implementar notificaciones push a los navegadores usando Notificaciones de escritorio, que creo que es lo que hace la API de Notificaciones Web. Vi una documentación de Google sobre cómo se puede hacer esto para Chrome aquí & aquí.

Ahora lo que todavía no soy capaz de entender es:

  1. ¿Podemos usar GCM/APNS para enviar notificaciones push a todos los Navegadores Web, incluidos Firefox y Safari?
  2. Si no es a través de GCM podemos tener nuestro propio back-end para hacer lo mismo?

Creo que todas estas respuestas en una sola respuesta pueden ayudar a muchas personas que están teniendo confusiones similares.

Author: sideshowbarker, 2015-11-13

9 answers

Así que aquí estoy respondiendo a mi propia pregunta. Tengo respuestas a todas mis consultas de personas que han creado servicios de notificaciones push en el pasado.

Actualización (mayo de 2018): Aquí hay un completo y un documento muy bien escrito sobre la notificación push web de Google.

Respuesta a las preguntas originales hechas hace 3 años:

  1. Podemos usar GCM / APNS para enviar notificaciones push a todos los Navegadores Web incluyendo Firefox & Safari?

Respuesta: Google ha dejado de usar GCM a partir de abril de 2018. Ahora puede usar Firebase Cloud Messaging (FCM). Esto es compatible con todas las plataformas, incluidos los navegadores web.

  1. Si no es a través de GCM podemos tener nuestro propio back-end para hacer lo mismo?

Respuesta: Sí, la notificación push se puede enviar desde nuestro propio back-end. El soporte para el mismo ha llegado a todos los principales navegadores.

Compruebe este codelab de Google para entender mejor la implementación.

Implementación de backend propio en varios lenguajes de programación.:

Otras Lecturas:

¿Hay algún servicio gratuito para hacer lo mismo? Hay algunas empresas que ofrecen una solución similar en modelos gratuitos, freemium y de pago. Estoy enumerando algunos a continuación:

  1. https://onesignal.com / (Gratis | Soporta todas las plataformas)
  2. https://firebase.google.com/products/cloud-messaging / (Libre)
  3. https://clevertap.com / (Tiene libre plan)
  4. https://goroost.com/

Nota: Al elegir un servicio gratuito, recuerde leer los términos de servicio. Los servicios gratuitos a menudo funcionan mediante la recopilación de datos de usuario para diversos fines, incluido el análisis.

Aparte de eso, necesita tener HTTPS para enviar notificaciones push. Sin embargo, puede obtener https libremente a través de letsencrypt.org

 109
Author: esafwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-25 20:16:07

Javier cubrió Notificaciones y limitaciones actuales.

Mi sugerencia: window.postMessage mientras esperamos a que el navegador para discapacitados se ponga al día, de lo contrario Worker.postMessage() para seguir funcionando con los Trabajadores Web.

Estas pueden ser la opción de reserva con el controlador de visualización de mensajes del cuadro de diálogo, para cuando falla una prueba de características de notificación o se deniega el permiso.

La notificación tiene-característica y verificación de permiso denegado:

if (!("Notification" in window) || (Notification.permission === "denied") ) {
    // use (window||Worker).postMessage() fallback ...
}
 18
Author: greg.arnott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-18 08:34:45

GCM/APNS son solo para Chrome y Safari respectivamente.

Creo que usted puede estar buscando Notification:

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

Funciona en Chrome, Firefox, Opera y Safari .

 10
Author: Javier Conde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-06 22:56:56

Asumo que estás hablando de real notificaciones push que se pueden entregar incluso cuando el usuario no está navegando por su sitio web (de lo contrario, echa un vistazo a WebSockets o métodos heredados como long polling).

¿Podemos usar GCM/APNS para enviar notificaciones push a todos los Navegadores Web, incluidos Firefox y Safari?

GCM es solo para Chrome y APNs es solo para Safari. Cada fabricante de navegadores ofrece su propio servicio.

Si no es a través de GCM podemos tener nuestra propia back-end para hacer lo mismo?

La API Push requiere dos backends! Uno es ofrecido por el fabricante del navegador y es responsable de entregar la notificación al dispositivo. El otro debe ser suyo (o puede usar un servicio de terceros como Pushpad) y es responsable de activar la notificación y ponerse en contacto con el servicio del fabricante del navegador (es decir, GCM, APNs, Mozilla push servers).

Divulgación: Yo soy el Pushpad fundador

 9
Author: collimarco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-09 23:01:40

Puede enviar datos desde el servidor al navegador a través de Server Side Events. Esta es esencialmente una secuencia unidireccional a la que un cliente puede "suscribirse" desde un navegador. Desde aquí, solo puede crear nuevos objetos Notification como flujo de SSEs en el navegador:

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

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

Un poco viejo, pero este artículo de Eric Bidelman explica los fundamentos de SSE y proporciona algunos ejemplos de código de servidor también.

 8
Author: djfdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-23 22:47:40

Puedo redefinir su pregunta como abajo

¿Podemos tener nuestro propio back-end para enviar notificaciones push a Chrome, Firefox, Opera y Safari?

Sí. Por hoy (2017/05), puede usar la misma implementación del lado del cliente y del servidor para manejar Chrome, Firefox y Opera (sin Safari). Porque han implementado notificaciones push web de la misma manera. Eso es Push API protocolo por W3C. Pero Safari tienen su propia arquitectura antigua. Así que tenemos que mantenga Safari por separado.

Consulte browser-push repo para obtener líneas guía para implementar notificaciones push web para su aplicación web con su propio back-end. Explica con ejemplos cómo puede agregar soporte de notificaciones push web para su aplicación web sin ningún servicio de terceros.

 6
Author: TRiNE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-10 06:24:10

A partir de ahora GCM solo funciona para chrome y Android. del mismo modo firefox y otros navegadores tienen su propia api.

Ahora viene a la pregunta cómo implementar notificaciones push para que funcione para todos los navegadores comunes con back-end propio.

  1. Necesita código de script del lado del cliente,es decir, trabajador de servicio, consulte( Notificación push de Google). Aunque esto sigue siendo lo mismo para otros navegadores.

2.después de obtener endpoint usando Ajax guárdelo junto con el navegador nombre.

3.Es necesario crear back-end que tiene campos para el título, mensaje, icono, haga clic en URL según sus requisitos. ahora después de hacer clic en enviar notificación, llame a una función como send_push (). En esta escritura de código para diferentes navegadores por ejemplo

3.1. para chrome

 $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 otros navegadores por favor google...

 4
Author: Arjun singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-17 07:53:36

Sugiero usar pubnub. Traté de usar ServiceWorkers y PushNotification desde el navegador sin embargo, sin embargo, cuando lo intenté webviews no era compatible con esto.

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

 1
Author: ColacX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:58:28

Esta es una forma sencilla de hacer notificaciones push para todos los navegadores 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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-23 09:37:07