Usamos notificaciones automáticas en el sitio. El código de trabajo es bastante sencillo.
const subscribe = async () => { let sub = await self.registration.pushManager.getSubscription(); if(!sub) { sub = await self.registration.pushManager.subscribe({ applicationServerKey: serverKey(), userVisibleOnly: true }); } let resp; try { resp = await fetch('/subscribe', { method: 'post', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(sub) }); const body = await resp.json(); if(body.status !== 'ok') resp = null; } catch(e) { resp = null; } if(resp) return; if(sub.unsubscribe) { sub.unsubscribe(); } else { self.registration.pushManager.unregister(sub.endpoint); } await self.registration.unregister(); };Babel procesa el código anterior antes de aterrizar en la producción de la causa. Funciona bastante bien para nosotros y para la mayoría de nuestros usuarios.
Pero de vez en cuando recibimos informes de error del back-end que dicen que los datos de suscripción recién recibidos son 'nulos'. Quiero decir literalmente: el punto final '/subscribe' obtiene una cadena 'nula' en lugar de un objeto de suscripción codificado en JSON.
¿Es posible que pushManager.subscribe devuelva NULL en lugar del objeto de suscripción?