Blog · Ingeniería

Suscripciones push caducadas: por qué pasan y cómo cuidar tu audiencia

Por qué caducan las suscripciones push, qué significan para tus métricas, cómo verlas en el panel, la API y los webhooks, y cómo recuperar a quien vuelve a tu web.

Read in English

Una suscripción push caduca cuando deja de servir para llegar a ese navegador: la persona borró los datos de tu web, retiró el permiso, cambió de navegador o el propio navegador la sustituyó por otra. Es un goteo normal en cualquier audiencia; lo que marca la diferencia es contarlo con honestidad en tus métricas y recuperar a quien vuelve con el permiso todavía concedido.

En resumen:

  • Las suscripciones caducan por lo que hace la persona (borrar datos, retirar el permiso, reinstalar el navegador) o el navegador (renovarlas o retirarlas tras mucho tiempo sin uso).
  • Una suscripción caducada no se puede reactivar: solo el navegador puede crear una nueva.
  • Mide tu audiencia en suscriptores activos y en personas alcanzables, nunca en altas acumuladas.
  • castly las marca como caducadas automáticamente, con estado expired y el webhook subscriber.expired.
  • Para recuperarlas: vuelve a suscribir en la visita si el permiso sigue concedido, asocia tu ID de usuario y no envíes de más.

Por qué deja de funcionar una suscripción

Cuando alguien acepta tus notificaciones, su navegador crea una suscripción: una dirección única en su servicio push (el de Google para Chrome, el de Mozilla para Firefox, el de Apple para Safari o el de Microsoft para Edge) que identifica a ese dispositivo y a tu web. Esa dirección no es eterna:

  • Datos del sitio borrados. Al limpiar cookies y datos de tu web, el navegador elimina también el service worker y la suscripción.
  • Permiso retirado. La persona bloquea tus notificaciones en los ajustes. Es la causa que más depende de ti.
  • Navegador reinstalado o perfil nuevo. Un perfil limpio no hereda las suscripciones del anterior, aunque el equipo sea el mismo.
  • Renovación del navegador. Puede sustituir la suscripción por otra; la antigua deja de funcionar y la nueva no existe para tu web hasta que se registra.
  • Inactividad prolongada. Los servicios push pueden retirar las suscripciones de dispositivos que llevan mucho tiempo sin conectarse.
  • Casos de cada plataforma. En iPhone, borrar la web instalada de la pantalla de inicio elimina su suscripción; en Safari, una push que no muestra ninguna notificación hace que se revoque, como contamos en web push en Safari para macOS.

Hay un caso que no es caducidad: si la persona pulsa tu botón «Desactivar avisos» y tu web llama a Castly.unsubscribe(), el suscriptor pasa a unsubscribed. Es una baja voluntaria y conviene contarla aparte.

Qué significa para tus métricas

Si sumas todas las altas desde el primer día, mezclas dispositivos que ya no existen con los que sí reciben avisos, y todo lo que dependa de ese total (alcance, tasa de clics, coste por aviso) deja de reflejar la realidad. Separa tres números:

  • Suscriptores activos: dispositivos que, según lo último que se sabe, pueden recibir avisos.
  • Caducados: dispositivos que ya no se pueden alcanzar. Su evolución te dice si pierdes audiencia más deprisa que antes.
  • Personas alcanzables: usuarios con al menos un dispositivo activo. Si alguien tenía el teléfono y el portátil suscritos y solo caduca el portátil, sigue siendo alcanzable.

Un matiz para tus informes: el servicio push solo comunica que una suscripción ya no existe cuando se intenta entregarle un mensaje, así que una suscripción muerta sigue contando como activa hasta el siguiente envío a ese dispositivo. Por eso, después de una campaña a toda tu audiencia es normal que los activos bajen de golpe: no perdiste a esas personas ese día, simplemente ahora lo sabes. Compara meses con un ritmo de envíos parecido y vigila las caducadas por envío frente a tu propia media: un goteo constante es sano; un salto brusco merece revisión.

Cómo ver las suscripciones caducadas

En castly no tienes que hacer nada para detectarlas: cuando el servicio push indica que una suscripción ya no existe, el suscriptor pasa a estado expired y deja de recibir envíos. Lo ves de tres formas:

  • En el panel. La vista general muestra los suscriptores activos y las altas de los últimos 7 días. En Suscriptores filtras por estado (activo, caducada o de baja), navegador o etiqueta, y el detalle de cada notificación cuenta cuántos dispositivos resultaron caducados en ese envío.
  • Por API. Desde tu servidor, con la clave secreta, GET /v1/subscribers?status=expired devuelve los caducados; añade userId para ver si a una persona le queda algún dispositivo activo.
  • Por webhook. Cada vez que un suscriptor caduca recibes el evento subscriber.expired con subscriberId y externalUserId, el ID de usuario que le asociaste. Se configura como explica la sección de webhooks.
// Después de verificar la firma del webhook
const event = JSON.parse(rawBody);

if (event.type === 'subscriber.expired') {
  const { subscriberId, externalUserId } = event.data;
  await db.devices.markExpired(subscriberId);
  if (externalUserId) await refreshChannels(externalUserId);
}

Un uso típico: cuando a una persona no le queda ningún dispositivo activo, tu app pasa sus avisos importantes al email. Verifica siempre la firma antes de procesar el evento, como explicamos en verificar webhooks con HMAC, y como los webhooks no se reintentan, cruza de vez en cuando tus datos con la API.

Cómo recuperar a quien vuelve a tu web

Ningún servidor puede reactivar una suscripción caducada: solo el navegador de la persona puede crear una nueva. Tu oportunidad es la siguiente visita, y depende de Castly.permission():

  • granted: el permiso sigue concedido aunque la suscripción se haya perdido. Llamar de nuevo a Castly.subscribe() crea una nueva sin mostrar ningún diálogo; si la actual sigue viva, solo la confirma.
  • default: la persona restableció los permisos de tu web. Trátala como un visitante nuevo y deja que tu aviso de suscripción aparezca cuando corresponda.
  • denied: no insistas; el navegador no te dejará volver a preguntar. Solo la persona puede cambiarlo en sus ajustes.
Castly.init({ publicKey: 'pk_live_…' });

// Una vez por sesión y solo si el permiso ya está concedido
if (Castly.permission() === 'granted' && !sessionStorage.getItem('push-ok')) {
  sessionStorage.setItem('push-ok', '1');
  Castly.subscribe({ userId: currentUser?.id }).catch(() => {
    reactivateButton.hidden = false; // algunos navegadores piden un clic
  });
}

Una comprobación por sesión basta: si la suscripción sigue viva, se reconoce y no se crea un duplicado. Algunos navegadores solo permiten suscribirse tras un gesto de la persona; si la llamada falla al cargar la página, muestra un botón «Reactivar avisos» y repítela desde su clic.

Asocia cada suscripción a tu usuario

Cada suscripción nueva es un suscriptor nuevo, con otro ID. Si en tu sistema solo guardas ese ID, la persona que vuelve parece otra y su historial queda partido en dos. La solución es asociar cada suscripción a tu propio ID de usuario: pásalo en subscribe({ userId }) o, si la persona inicia sesión después de suscribirse, llama a identify.

// Al iniciar sesión, en un navegador que ya estaba suscrito
await Castly.identify(user.id, { plan: user.plan });

A partir de ahí, cuando envías con { "type": "users", "userIds": ["u_123"] }, el aviso llega a todos los dispositivos activos de esa persona, incluido el que acaba de volver, sin que tu servidor tenga que saber qué suscripción caducó ni cuál la sustituyó. Usa un identificador interno y no un email: no necesitas datos personales para esto.

Cómo reducir las caducidades

Nadie puede impedir que alguien formatee su portátil, pero el permiso retirado sí depende de ti: cada aviso irrelevante es una invitación a bloquear tu web, y un bloqueo convierte un dispositivo activo en caducado para siempre.

  • Envía menos y mejor. Agrupa novedades en un resumen en lugar de mandarlas una a una. Tienes criterios en cuántas notificaciones enviar.
  • Segmenta. Envía solo a quien le importa con { "type": "segment", "tags": { "interes": "ofertas" } }.
  • Ofrece preferencias. Deja elegir temas o frecuencia y guárdalos como etiquetas: quien puede bajar el volumen no necesita bloquear.
  • Pide el permiso con contexto. Quien acepta sin saber para qué servirán tus avisos se arrepiente pronto.

Preguntas frecuentes

¿Es normal tener suscripciones caducadas en cada envío?

Sí. La gente borra datos, cambia de equipo o reinstala el navegador de forma continua, así que siempre habrá un goteo. Lo que merece atención es un salto brusco respecto a tu propia tendencia.

¿Por qué bajan mis suscriptores activos justo después de una campaña?

Porque una suscripción muerta solo se descubre al intentar entregarle un mensaje. Una campaña a toda tu audiencia revela de golpe las que caducaron en las semanas anteriores; no es una pérdida de ese día.

¿Qué diferencia hay entre una suscripción caducada y una baja?

La caducada (expired) dejó de funcionar sin que tu web interviniera: datos borrados, permiso retirado o un navegador nuevo. La baja (unsubscribed) ocurre cuando tu web da de baja al suscriptor, normalmente porque la persona lo pidió.

¿Tengo que borrar los suscriptores caducados?

No hace falta: un suscriptor caducado ya no recibe envíos ni cuenta como activo. Si tu política de retención de datos lo exige, puedes eliminarlo desde el panel.

Ponlo en práctica con castlyNotificaciones push web y PWA para developers: un SDK de menos de 3 KB, una API REST y registros de entrega de cada dispositivo. Gratis hasta 10.000 notificaciones al mes.
Crear una cuenta gratis →

Envía tu primera notificación push hoy.

Crea un proyecto, añade el SDK y envía con una llamada a la API. Gratis para empezar.

Crear una cuenta gratis →