Cordova / Ionic + Cordova

Plugin oficial cordova-plugin-pushhub sobre @havesource/cordova-plugin-push, o integración por REST.

El plugin oficial cordova-plugin-pushhub (Cordova 12+, cordova-android 13+, cordova-ios 7+) se apoya en @havesource/cordova-plugin-push, que se instala solo, y agrega:

  • registro del dispositivo, con cola sin conexión;
  • entorno de iOS detectado del perfil de aprovisionamiento;
  • canal de Android;
  • notificaciones con la app abierta en Android, con imagen y botones;
  • aperturas y clics reportados;
  • usuarios, tags y topics.

Tokens:

Instalación

cordova plugin add cordova-plugin-pushhub

En config.xml, el archivo de Firebase para Android:

<platform name="android">
  <resource-file src="google-services.json" target="app/google-services.json" />
</platform>

La Content-Security-Policy de index.html debe permitir la API: connect-src 'self' https://api.pushhub.daertec.com.

Uso

document.addEventListener('deviceready', async () => {
  await PushHub.init({
    appKey: 'pk_live_TU_LLAVE_PUBLICA',          // solo la llave PUBLICA
    androidChannel: { id: 'general', name: 'Avisos generales' },
  });
  PushHub.onNotificationOpened((n) => {
    // n.deepLink, n.actionId (botón tocado), n.data (tus datos)
  });
});

// Pide el permiso cuando el usuario entienda para qué
const estado = await PushHub.requestPermission();

PushHub.identify('cliente-123');
PushHub.setTags({ plan: 'gold' });
PushHub.subscribe('ofertas');
await PushHub.pairTestDevice('483920');   // dispositivo de prueba
PushHub.logout();

Las opciones de init son las mismas que en Capacitor. Para TypeScript, los tipos están en cordova-plugin-pushhub/types.

Imágenes y botones en iOS

  1. En Xcode (platforms/ios): File > New > Target > Notification Service Extension.
  2. Reemplaza su NotificationService.swift por plugins/cordova-plugin-pushhub/src/ios/NotificationService/NotificationService.swift.
  3. Inicia el SDK con iosNotificationServiceExtension: true.

Sin SDK (REST)

Con cualquier plugin push, registra el token tú mismo:

fetch('https://api.pushhub.daertec.com/v1/devices', {
  method: 'POST',
  headers: { Authorization: 'Bearer pk_live_TU_LLAVE_PUBLICA', 'Content-Type': 'application/json' },
  body: JSON.stringify({ token, platform: cordova.platformId, framework: 'cordova', environment: 'auto' }),
});

El id del envío llega en _phid y el enlace en deepLink. Repórtalo a /v1/events al abrir.