Compatibilidad
Resultado del laboratorio de compatibilidad: frameworks, plataformas, modos de iOS y tipos de notificación.
PushHub prueba cada framework en dos niveles:
- Automático, en cada versión del servidor o de un SDK. El servidor envía a un simulador de FCM y APNs, y se verifica el payload exacto que recibiría el dispositivo. También se prueba que el SDK de cada framework lo interpreta igual (id, deep link, botones, multimedia y datos).
- En dispositivos reales: Android físico, iPhone con compilación de Xcode (sandbox) y TestFlight (production), con la app en primer plano, en segundo plano y cerrada.
Última ejecución automática: 2026-10-25 — 120 de 120 casos correctos (1220 verificaciones).
Verificación automática
Tipos: visible (con texto, botones, deep link, datos e imagen), datos (data_only: el texto viaja en data) y silenciosa (silent).
| Framework | Android (FCM) | iOS (APNs directo) | iOS (vía FCM) | Installation ID (FID) |
|---|---|---|---|---|
| Nativo (Android / iOS) · SDK oficial | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa |
| Nativo (Android / iOS) · sin SDK (REST) | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | — | — |
| Ionic + Capacitor · SDK oficial | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | — | — |
| Ionic + Capacitor · sin SDK (REST) | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | — | — |
| Cordova · SDK oficial | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | — |
| Cordova · sin SDK (REST) | ✔ visible, datos, silenciosa | — | ✔ visible, datos, silenciosa | — |
| Flutter · SDK oficial | ✔ visible, datos, silenciosa | — | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa |
| Flutter · sin SDK (REST) | ✔ visible, datos, silenciosa | — | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa |
| React Native · SDK oficial | ✔ visible, datos, silenciosa | — | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa |
| React Native · sin SDK (REST) | ✔ visible, datos, silenciosa | — | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa |
| Expo · SDK oficial | ✔ visible, datos, silenciosa | — | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa |
| Expo · sin SDK (REST) | ✔ visible, datos, silenciosa | ✔ visible, datos, silenciosa | — | — |
«—» significa que esa integración no produce ese tipo de token: por ejemplo, firebase_messaging siempre entrega FCM en iOS.
Installation ID (FID): los SDK de Firebase recientes reemplazan el token de registro por el Firebase Installation ID. PushHub lo reconoce y lo envía en message.fid. La columna resume Android e iOS vía FCM en las integraciones que ya pueden usarlo.
En cada caso se verifica:
- proveedor y entorno de APNs;
_phidy_ph;- claves planas según el perfil de payload;
- texto, botones traducidos, categoría y
mutable-contenten iOS; - imagen nativa (Android y
fcm_options), canal y prioridad; - tamaño menor de 4 KB.
Qué cubre cada integración
| Integración | Con la app abierta | Botones | Imágenes | Aperturas y clics |
|---|---|---|---|---|
| SDK oficial | Sí | Android con la app abierta; iOS con la extensión | Sí (iOS con la extensión) | Automático |
| Sin SDK (REST) | Depende del plugin | Implementación propia | Android sí; iOS con extensión propia | Llamar a /v1/events |
Perfiles de payload
Sin SDK, cada plugin lee los datos de forma distinta. PushHub ajusta el payload según el framework de la app. Con un SDK oficial, el dispositivo recibe solo _phid y _ph.
| Perfil | Claves planas | Texto en mensajes de solo datos |
|---|---|---|
| SDK oficial | ninguna | title, body |
| Capacitor, Flutter, React Native, nativo, otros | deepLink, imageUrl |
title, body |
| Cordova | deepLink, imageUrl, image |
title, message |
| Expo | deepLink, imageUrl |
title, message |
Pruebas en dispositivos reales
Notificación visible en cada estado de la app.
| Framework | Android 1.er plano | Android fondo | Android cerrada | iOS 1.er plano | iOS fondo | iOS cerrada |
|---|---|---|---|---|---|---|
| Nativo (Android / iOS) · SDK oficial | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Nativo (Android / iOS) · sin SDK (REST) | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Ionic + Capacitor · SDK oficial | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Ionic + Capacitor · sin SDK (REST) | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Cordova · SDK oficial | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Cordova · sin SDK (REST) | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Flutter · SDK oficial | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Flutter · sin SDK (REST) | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| React Native · SDK oficial | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| React Native · sin SDK (REST) | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Expo · SDK oficial | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
| Expo · sin SDK (REST) | pendiente | pendiente | pendiente | pendiente | pendiente | pendiente |
¿Tu framework no aparece? Cualquier app que obtenga un token de FCM o APNs funciona por REST.