>

Notificaciones Push - Funcionamiento, alternativas y posibilidades

Betabeers  Colaboraciones    16/11/2018


Este artículo ha sido escrito por Siro Ramírez y publicado originalmente en el blog de Solid GEAR.

¿Conoces todas las alternativas de notificaciones PUSH existentes hoy en día y cómo funcionan?

Porque supongo que a estas alturas sabrás lo que es una notificación PUSH, ¿verdad? Esos mensajes que recibimos aunque la aplicación esté cerrada, y que nos permiten informar al usuario de eventos importantes (o al menos debería usarse para eso) de una manera mucho menos costosa para el móvil que tener la app levantada y estar preguntando constantemente si ha ocurrido algo (a este otro sistema se le conoce como PULL).

push whatsapp

Pero lo que a lo mejor aún no sabes si no te ha tocado trabajar con ello es cómo se implementa esta parte, o lo que es peor, puedes perderte en largas páginas de documentación, diferentes alternativas, liarte y no saber por donde empezar, cuando el esquema general es bastante sencillo y la mayoría de alternativas actuales siguen el mismo patrón. Lo que pretende este post es darte una idea general (con links que contendrán la información detallada para cada una de las plataformas) de qué patrón utilizar para implementar notificaciones PUSH dependiendo de tus necesidades.

Notificaciones PUSH iOS - APNs

Empezaremos hablando por el sistema posiblemente más cerrado y por ello uno de los más sencillos de entender de notificaciones PUSH. APNs es la plataforma principal mantenida por Apple para la gestión de envío de notificaciones a sus dispositivos iOS. Como todos los sistemas de notificaciones van a requerir tanto configuración en la parte del cliente móvil como configuración en la parte servidora de nuestro sistema, como adelantan en el que esquema de su plataforma:

apns

El primer paso es crear un provisioning profile para tu app iOS, la parte más complicada del proceso de notificaciones Apple. Podrás ver información más detallada de como se hace aquí. Pero no quiero que nos liemos con demasiado detalle, nos vamos a quedar con el concepto de que ese provisioning profile crea una asociación entre tu dispositivo (identificado por el UDID) y tu aplicación (con un App ID que la identifica de manera única para Apple)

Una vez tengas ese provisioning profile, vas a poder registrar tu dispositivo + aplicación en la plataforma APNs. (Info detallada aquí). Lo cual te va a devolver un token de notificación que identifica tu móvil y aplicación en concreto. Una vez tengamos ese token, habrá que guardarlo en nuestro server de alguna manera, probablemente a través de un API Rest. Con ese token (o toda la colección de tokens que haya recibido el server), ya seremos capaces de, en el momento que queramos, contactar con la plataforma APNs para que envíe una notificación.

Dependiendo la tecnología / framework de servidor que utilicemos, probablemente haya librerías creadas que nos faciliten mucho la labor, pero el concepto por debajo es tan sencillo como hacer una petición POST al servidor de APNs (api.push.apple.com:443) que contiene tu id de aplicación, la lista de tokens y un payload con el contenido de la notificación y unos cuantos parámetros adicionales que puedes ver aquí.

Seguimos?

Notificaciones PUSH Android - FCM

El segundo sistema del que vamos a tratar es Firebase Cloud Messaging, el sistema por defecto para Android. Atrás quedaron ya los antiguos sistemas GCM o el anterior C2DM. Igual que con APNs, el primer paso es registrar registrar nuestro proyecto en la plataforma, en este caso Firebase. (Info detallada aquí)

Una vez registrado, instalamos el sdk en la app, que al iniciarse generará un token de registro para mandar notificaciones a ese dispositivo y aplicación (os suena el proceso? exactamente igual que en APNs!)

Así que ya sabéis la parte que queda, guardar esos tokens en servidor y mandar un POST a la url de FCM (https://fcm.googleapis.com/fcm/send) con los tokens a incluir y el contenido de tu notificación. Y si, seguro que hay ya librerías que te facilitan mucho la vida al respecto.

FCM - ¡Y tenemos la Firebase console!

Que no necesitáis server en vuestro sistema, queréis hacer una prueba de concepto, etc. Nos podemos saltar la última parte, pasarle los tokens a la consola de firebase y empezar a enviar notificaciones desde ahí. Una manera muy rápida y sencilla de empezar a probar nuestras notificaciones.

FCM - ¡Y es multiplataforma!

Si, si, que queréis enviar notificaciones a ambas plataformas, firebase se puede encargar por nosotros de hablar con APNs. Porque las notificaciones iOS tienen que pasar por APNs si o si. Pero centralizamos nuestra comunicación con firebase y él gestiona la comunicación necesaria con APNs.

Para ello tendremos que:

  • Agregar el proyecto iOS a Firebase (Info detallada aquí)
  • Agregar el sdk de Firebase a la app (en vez del de APNs)
  • Generar el perfil de aprovisionamiento igualmente en tu centro de programadores de Apple. (Info detallada aquí)

Y con eso, podemos enviar las notificaciones a ambas plataformas de la misma manera que lo haríamos para dispositivos Android.

Notificaciones PUSH en Web

Porque nuestro paradigma favorito de notificaciones para usuarios ya no es exclusivo de aplicaciones móviles, ¡sino que se puede usar para aplicaciones web! Que no tienen nada que ver. ¿O sí? (no adelantemos acontecimientos, ya que de eso hablaremos en el último punto)

Algunos navegadores ya soportan la especificación del API Push W3C, aún en estado borrador y que viene muy de la mano del API de service workers. Posiblemente exista ya una librería que te facilite las cosas en el framework de desarrollo web que utilices, pero voy a intentar esquematizar el flujo que hay detrás. Flujo que posiblemente te suena porque es muy similar al que ya hemos tratado en las aplicaciones móviles.

Tu aplicación web deberá tener un service worker asociado (de ahí la conexión obvia entre las push web y los service worker). Este service worker será el que tendrás que utilizar para suscribirte al al servicio de notificaciones (Into detallada aquí) y obtener tu subscriptionId (si, lo mismito que el token de APNs y de FCM) y un endpoint al que llamar para enviar la notificación (menos mal! porque aquí todavía no sabíamos si había que llamar a la url de apns, fcm o a quién)

Y haciendo un POST a ese endpoint, con esos tokens y la info de la notificación... voilá! tenemos notificación en nuestra aplicación web

Notificaciones PUSH en apps híbridas

¿A estas alturas no sabes lo que es una app híbrida? Pues te dejo unos links para que te pongas al día rápido:

Apps híbridas con Ionic

Desarrollo multiplataforma con Xamarin

Si ya sabes de lo que te hablamos, posiblemente sepas que el mundo de aplicaciones híbridas es un terreno con múltiples alternativas. Existen tecnologías que nos proporcionan aplicaciones nativo-híbridas como Xamarin o React Nativa. Apps híbridas basadas en tecnología web como Ionic. PWAs que posiblemente puedas crear ya con tu tecnología web favorita..

Una vez que ya conocemos las alternativas anteriores, integrar notificaciones PUSH en nuestra app híbrida va a ser muy sencillo. Si se trata de una app nativa híbrida, buscaremos librerías que nos permitan utilizar APNs o FCM y seguiremos los pasos descritos anteriormente. ¿Que está basada en web? Repasemos la compatibilidad de navegadores e integremos una web push! (Importante repasar esta compatibilidad, ya que a fecha de creación de este post no hay compatibilidad con ninguna versión de Safari y por lo tanto no se pueden integrar web PUSH para apps iOS)

Espero que con todo esto te queden mucho más claras las alternativas y esquema general a la hora de integrar notificaciones PUSH en tu app!


Sobre el autor

Betabeers