{"id":18094,"date":"2021-03-04T09:45:43","date_gmt":"2021-03-04T07:45:43","guid":{"rendered":"https:\/\/www.hiberus.com\/crecemos-contigo\/?p=18094"},"modified":"2024-04-08T11:10:20","modified_gmt":"2024-04-08T09:10:20","slug":"como-crear-una-aplicacion-web-progresiva-pwa-con-liferay","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/como-crear-una-aplicacion-web-progresiva-pwa-con-liferay\/","title":{"rendered":"C\u00f3mo crear una aplicaci\u00f3n web progresiva (PWA) con Liferay"},"content":{"rendered":"<p>El uso de las <strong>tecnolog\u00edas m\u00f3viles ha crecido exponencialmente<\/strong> a lo largo de los \u00faltimos a\u00f1os, lo que ha provocado que cualquier empresa que quiera estar presente en este tipo de entornos digitales (ya sea con su web corporativa p\u00fablica o con la prestaci\u00f3n de cualquier servicio online) se vea en la<strong> necesidad de invertir en la transformaci\u00f3n de sus sistemas<\/strong>.<\/p>\n<p>Para la <strong>mayor\u00eda de empresas<\/strong> esta incorporaci\u00f3n en el mundo m\u00f3vil ha podido llevarse a cabo mediante una <strong>adaptaci\u00f3n de sus p\u00e1ginas y aplicaciones web<\/strong> bas\u00e1ndose en el uso del <strong>dise\u00f1o responsive<\/strong>, que permite aplicar distintos estilos a una misma p\u00e1gina en funci\u00f3n de las caracter\u00edsticas de la ventana en la que se est\u00e1 mostrando.<\/p>\n<p>Esta soluci\u00f3n es algo <strong>sencillo de llevar a cabo<\/strong> y est\u00e1 <strong>desvinculada casi por completo del sistema operativo<\/strong> (entorno de escritorio, navegador en un dispositivo m\u00f3vil Android o iPhone, etc.) sobre el que se ejecutar\u00e1 la aplicaci\u00f3n, ya que siempre lo har\u00e1 desde un entorno web mediante el uso de un navegador.<\/p>\n<p>Sin embargo, otras aplicaciones <strong>requieren una interacci\u00f3n mayor<\/strong> con el usuario o con el propio sistema, lo que genera la necesidad del desarrollo de aplicaciones espec\u00edficas para dispositivos m\u00f3viles.<\/p>\n<p>El problema de las <strong>aplicaciones nativas tradicionales<\/strong> es que requieren de una <strong>alta cantidad de recursos<\/strong> para su creaci\u00f3n, ya que obliga a llevar a cabo un <strong>desarrollo y mantenimiento independiente<\/strong> para cada una de las plataformas en las que se quiera estar presente (dispositivos iPhone o iPad, dispositivos Android, navegadores web, etc.)<\/p>\n<p>Cuando es necesario disponer de una <strong>aplicaci\u00f3n m\u00f3vil<\/strong>, pero <strong>evitando todos los costes de desarrollo<\/strong> derivados de la creaci\u00f3n de aplicaciones m\u00f3viles nativas deberemos tener muy cuenta el concepto de <strong>Aplicaci\u00f3n web progresiva<\/strong> o <strong>PWA.<\/strong><\/p>\n<h2>\u00bfQu\u00e9 es una aplicaci\u00f3n web progresiva?<\/h2>\n<p>Las <strong>aplicaciones web progresivas<\/strong> son un concepto intermedio<strong> situado entre una aplicaci\u00f3n web y una aplicaci\u00f3n nativa tradicional<\/strong>.<\/p>\n<p>Estas aplicaciones se desarrollan y ejecutan como una <strong>aplicaci\u00f3n web normal<\/strong> y corriente, pero con el <strong>aspecto y posibilidades de interacci\u00f3n<\/strong> propios de las <strong>aplicaciones m\u00f3viles desarrolladas de forma nativa<\/strong>.<\/p>\n<p>Algunas de las caracter\u00edsticas m\u00e1s atractivas de las PWA son la posibilidad de acceder a las mismas desde un <strong>icono en el men\u00fa de cualquier dispositivo m\u00f3vil<\/strong>, el <strong>env\u00edo de notificaciones<\/strong> al propio dispositivo del usuario o la posibilidad del <strong>uso sin conexi\u00f3n<\/strong> a internet de la propia aplicaci\u00f3n.<\/p>\n<p>Adem\u00e1s, desde recientes actualizaciones de <strong>Windows<\/strong>, pueden <strong>registrarse como aplicaciones de escritorio<\/strong>, al igual que las descargadas desde el propio Marketplace de Microsoft.<\/p>\n<h2>Liferay como PWA<\/h2>\n<p><strong>Liferay<\/strong> es en la actualidad una de las <a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/casos-de-exito-de-liferay\/\"><strong>herramientas m\u00e1s utilizadas para crear portales<\/strong> <\/a>web de todo tipo (webs corporativas, intranets, portales de servicios de administraci\u00f3n p\u00fablica, etc.)<\/p>\n<p><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/casos-de-exito-de-liferay\/\"><strong>Liferay portal<\/strong><\/a> es una herramienta muy potente pero cuya ejecuci\u00f3n <strong>se basa en entorno web cl\u00e1sico<\/strong> que debe llevarse a cabo mediante un cliente web como pueden ser Google Chrome o Mozilla Firefox.<\/p>\n<p>Sin embargo, existe la posibilidad de generar una aplicaci\u00f3n web progresiva en un portal basado en Liferay siguiendo una serie de sencillos pasos que deberemos aplicar sobre nuestro tema de apariencia.<\/p>\n<h3>Modificaciones visuales: el fichero manifest<\/h3>\n<p>En primer lugar, haremos que nuestro portal basado en Liferay sea visualmente atractivo desde un entorno m\u00f3vil<\/p>\n<h3>Adaptaci\u00f3n responsive de la aplicaci\u00f3n<\/h3>\n<p>El primer paso ser\u00e1 <strong>adaptar el tema de apariencia de nuestro portal<\/strong> basado en Liferay para que se <strong>visualice correctamente en cualquier dispositivo<\/strong>.<\/p>\n<p>Para ello utilizaremos el dise\u00f1o responsive y la metodolog\u00eda mobile-first que prioriza el dise\u00f1o optimizado para dispositivos m\u00f3viles. Al estar Bootstrap incluido por defecto dentro de Liferay, <strong>utilizaremos el grid nativo y las distintas caracter\u00edsticas del framework<\/strong> para facilitar esta adaptaci\u00f3n a dispositivos m\u00f3viles.<\/p>\n<div id=\"attachment_18124\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18124\" class=\"wp-image-18124 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-1024x495.png\" alt=\"pwa\" width=\"1024\" height=\"495\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-1024x495.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-300x145.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-768x371.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-1536x742.png 1536w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-360x174.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa.png 1917w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><p id=\"caption-attachment-18124\" class=\"wp-caption-text\"><em>Dise\u00f1o del portal en desktop<\/em><\/p><\/div>\n<p>Mediante la utilizaci\u00f3n de las utilidades de Bootstrap minimizamos la cantidad de <strong>c\u00f3digo CSS<\/strong> a incluir en el tema para la adaptaci\u00f3n del contenido a dispositivos m\u00f3viles.<\/p>\n<div id=\"attachment_18125\" style=\"width: 179px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18125\" class=\"wp-image-18125 size-medium\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-169x300.png\" alt=\"pwa movil\" width=\"169\" height=\"300\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-169x300.png 169w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil.png 346w\" sizes=\"auto, (max-width: 169px) 100vw, 169px\" \/><p id=\"caption-attachment-18125\" class=\"wp-caption-text\"><em>Dise\u00f1o del portal en m\u00f3vil<\/em><\/p><\/div>\n<h3>Generaci\u00f3n del fichero Manifest de la aplicaci\u00f3n<\/h3>\n<p>El fichero central que da vida a las PWA es el fichero <em><strong>Manifest<\/strong><\/em>, que contendr\u00e1 los metadatos propios de la aplicaci\u00f3n.<\/p>\n<p>Algunos de los datos definidos en este fichero son el <strong>nombre<\/strong>, la <strong>descripci\u00f3n<\/strong>, la <strong>url de inicio de la aplicaci\u00f3n<\/strong> o el icono con el que se crear\u00e1 el acceso a la misma en los dispositivos m\u00f3viles o entornos Windows.<\/p>\n<p>Crearemos este fichero en la ruta del tema <strong>src &gt; templates &gt; manifest.json<\/strong> e incluiremos los siguientes datos:<\/p>\n<ul>\n<li><strong>name<\/strong>: Nombre de la aplicaci\u00f3n.<\/li>\n<li><strong>start_url<\/strong>: Url del portal en la que se iniciar\u00e1 la aplicaci\u00f3n.<\/li>\n<li><strong>background_color<\/strong>: Color de fondo de la pantalla mostrada mientras carga la app.<\/li>\n<li><strong>display<\/strong>: Determina la visualizaci\u00f3n de la aplicaci\u00f3n (pantalla completa, con barra de b\u00fasqueda del navegador, etc.)<\/li>\n<li><strong>icons<\/strong>: Permite indicar el icono de la aplicaci\u00f3n. Indicaremos en el campo src la ruta de la imagen que previamente habremos subido a la carpeta images del tema. Pueden indicarse varios iconos para optimizar la visualizaci\u00f3n de los mismos en distintas resoluciones de pantalla.<\/li>\n<\/ul>\n<div id=\"attachment_18127\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18127\" class=\"wp-image-18127 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-Manifest-1024x407.png\" alt=\"\" width=\"1024\" height=\"407\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-Manifest-1024x407.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-Manifest-300x119.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-Manifest-768x305.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-Manifest-360x143.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-Manifest.png 1029w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><p id=\"caption-attachment-18127\" class=\"wp-caption-text\"><em>Manifest.json<\/em><\/p><\/div>\n<h3>Modificaci\u00f3n de la plantilla portal_normal.vm<\/h3>\n<p>Uno de los ficheros principales de un m\u00f3dulo de tipo theme es la plantilla <em><strong>portal_normal.vm<\/strong>.<\/em><\/p>\n<p>Esta plantilla contiene la <strong>estructura general del portal<\/strong>, por lo que se deber\u00e1 modificar para incluir los elementos requeridos para indicar que cuenta con integraci\u00f3n con PWA.<\/p>\n<p>Dentro de la <strong>etiqueta head<\/strong> de la plantilla deber\u00e1 referenciarse el <em><strong>manifest<\/strong><\/em> creado en el apartado anterior de la siguiente forma:<\/p>\n<div id=\"attachment_18128\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18128\" class=\"wp-image-18128 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-1024x227.png\" alt=\"\" width=\"1024\" height=\"227\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-1024x227.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-300x67.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-768x171.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-360x80.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest.png 1031w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><p id=\"caption-attachment-18128\" class=\"wp-caption-text\"><em>Referencia al manifest desde el portal-normal<\/em><\/p><\/div>\n<h2>Resultado<\/h2>\n<p>Una vez hecho esto y <strong>habiendo desplegado el tema<\/strong> de apariencia en nuestro portal Liferay podremos acceder a la pesta\u00f1a <strong><em>Application &gt; Manifest<\/em><\/strong> de las opciones de la <strong>consola de desarrollador de Google Chrome<\/strong> desde cualquier p\u00e1gina de nuestra instancia de Liferay y podremos ver todos los metadatos extra\u00eddos desde el propio manifest.<\/p>\n<div id=\"attachment_18129\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18129\" class=\"wp-image-18129 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-1024x554.png\" alt=\"\" width=\"1024\" height=\"554\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-1024x554.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-300x162.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-768x415.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-1536x831.png 1536w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-360x195.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado.png 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><p id=\"caption-attachment-18129\" class=\"wp-caption-text\"><em>Preview del manifest desde chrome<\/em><\/p><\/div>\n<p>Si accedemos al propio portal <strong>desde un dispositivo m\u00f3vil<\/strong>, podremos <strong>generar un acceso al portal desde el navegador<\/strong> (opciones &gt; A\u00f1adir a pantalla de inicio) que ejecutar\u00e1 la aplicaci\u00f3n siguiendo toda la configuraci\u00f3n indicada en el propio manifest.<\/p>\n<div id=\"attachment_18130\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18130\" class=\"wp-image-18130 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-android-1024x715.png\" alt=\"\" width=\"1024\" height=\"715\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-android-1024x715.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-android-300x210.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-android-768x537.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-android-360x252.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/manifest-android.png 1248w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><p id=\"caption-attachment-18130\" class=\"wp-caption-text\"><em>Resultado en dispositivo Android<\/em><\/p><\/div>\n<p>Con estos sencillos pasos ya tendr\u00edamos lista toda la configuraci\u00f3n para que se pueda mostrar el portal con la <strong>sensaci\u00f3n visual<\/strong> por parte del usuario de que <strong>est\u00e1 utilizando una aplicaci\u00f3n nativa<\/strong>.<\/p>\n<p>Sin embargo, cualquier dispositivo m\u00f3vil o navegador de escritorio seguir\u00e1 <strong>sin reconocer nuestro portal como una aplicaci\u00f3n real<\/strong>, ya que para ello es necesario dar de alta un <strong><em>Service Worker<\/em><\/strong>.<\/p>\n<h2>Modificaciones funcionales: los Service Workers<\/h2>\n<p>Para dotar de <strong>funcionalidad adicional<\/strong> a nuestra aplicaci\u00f3n web y consolidarla como una Progressive Web App deberemos crear lo conocido como <strong>Service Worker<\/strong> los cuales act\u00faan como <strong>canal de comunicaci\u00f3n entre el navegador, la red y la propia aplicaci\u00f3n web<\/strong>.<\/p>\n<p>Estos Service Workers pueden utilizarse para m\u00faltiples tareas desde el <strong>cacheado de recursos est\u00e1ticos<\/strong>, hasta la <strong>recepci\u00f3n de notificaciones push<\/strong> desde dispositivo del usuario.<\/p>\n<p>Hay que tener en cuenta que los Service Workers <strong>solo funcionan<\/strong> si nuestro portal cuenta con un <strong>certificado SSL<\/strong> servido bajo protocolo https o si accedemos al propio servidor desde <em><strong>localhost<\/strong><\/em>.<\/p>\n<h3>Definici\u00f3n del Service Worker<\/h3>\n<p>En primer lugar, crearemos un fichero llamado <strong>service-worker.js<\/strong> en la carpeta src &gt; js del tema de apariencia.<\/p>\n<div id=\"attachment_18131\" style=\"width: 964px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18131\" class=\"wp-image-18131 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/service-worker.png\" alt=\"\" width=\"954\" height=\"407\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/service-worker.png 954w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/service-worker-300x128.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/service-worker-768x328.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/service-worker-360x154.png 360w\" sizes=\"auto, (max-width: 954px) 100vw, 954px\" \/><p id=\"caption-attachment-18131\" class=\"wp-caption-text\"><em>Fichero service-worker<\/em><\/p><\/div>\n<p>En este fichero bastar\u00e1 con definir los eventos <strong>install<\/strong> y <strong>fetch<\/strong>.<\/p>\n<p>En este caso no incluir\u00e1n l\u00f3gica adicional, pero ser\u00e1n los encargados de implementar toda la l\u00f3gica que queramos extender en nuestra aplicaci\u00f3n, como popular la cach\u00e9 y consultarla respectivamente para poder implementar el modo sin conexi\u00f3n de nuestra aplicaci\u00f3n.<\/p>\n<h3>Registro del Service Worker<\/h3>\n<p>Una vez definido el propio Service Worker ser\u00e1 necesario registrarlo en el momento de carga de cualquier p\u00e1gina del portal.<\/p>\n<p>Para ello, llevaremos a cabo el <strong>registro en el eventListener<\/strong> que indica que la p\u00e1gina ha cargado justo al cierre de la etiqueta body del <strong>portal_normal.ftl<\/strong> del tema, para que as\u00ed se aplique en cualquier url del portal a la que accedamos.<\/p>\n<div id=\"attachment_18132\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-18132\" class=\"wp-image-18132 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/registro-service-worker-1024x245.png\" alt=\"\" width=\"1024\" height=\"245\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/registro-service-worker-1024x245.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/registro-service-worker-300x72.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/registro-service-worker-768x184.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/registro-service-worker-360x86.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/registro-service-worker.png 1216w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><p id=\"caption-attachment-18132\" class=\"wp-caption-text\"><em>Registro del Service Worker en el portal_normal<\/em><\/p><\/div>\n<p>Es importante indicar que <strong>el scope del Service Worker partir\u00e1 de la ra\u00edz \u201c\/\u201d del portal<\/strong>, ya que, por defecto, el scope toma el valor de la url en la que se encuentra el <strong>fichero javascript de nuestro Service Worker<\/strong> (en este caso \u201c\/o\/pwa-theme\/js\u201d), lo que har\u00e1 que no act\u00fae en las p\u00e1ginas creadas desde Liferay.<\/p>\n<p>Una vez seguidos estos pasos, el tema de apariencia no necesitar\u00eda ninguna modificaci\u00f3n adicional y podr\u00eda ser desplegado.<\/p>\n<p>Si accedemos a cualquier p\u00e1gina del portal desde Chrome y revisamos la consola veremos que el registro del <strong>Service Worker<\/strong> que implementamos lanza un error de javascript que indica que el scope \u201c\/\u201d no es v\u00e1lido ya que es un path de nivel superior al m\u00e1ximo permitido, el cual est\u00e1 determinado por la url en la que se encuentra el fichero js de nuestro service worker (\u201c\/o\/pwa-theme\/js\/\u201d).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18133 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-js-1024x344.png\" alt=\"fichero js\" width=\"1024\" height=\"344\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-js-1024x344.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-js-300x101.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-js-768x258.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-js-360x121.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/fichero-js.png 1194w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><br \/>\nPara resolver este error, <strong>deberemos crear un servlet filter<\/strong> que incluya en todas las peticiones que se hagan al portal el soporte para que el scope del portal admita partir de la ra\u00edz:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18134 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/servelt-filter-1024x395.png\" alt=\"servlet filter\" width=\"1024\" height=\"395\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/servelt-filter-1024x395.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/servelt-filter-300x116.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/servelt-filter-768x296.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/servelt-filter-360x139.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/servelt-filter.png 1186w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><br \/>\nUna vez desplegado el m\u00f3dulo que implementa el filter, si accedemos a cualquier p\u00e1gina de nuestro portal podremos ver que ya no hay errores en consola y que <strong>el Service Worker se ha registrado correctamente.<\/strong><\/p>\n<h2>Resultado<\/h2>\n<p>Lo primero que podemos ver al abrir las opciones de desarrollador de Google Chrome dentro cualquier p\u00e1gina de nuestro portal, es que el <strong>Service Worker<\/strong> aparece como registrado y podemos ver todos sus datos desde la pesta\u00f1a <strong>Application &gt; Service Workers<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18135 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-service-worker.png\" alt=\"\" width=\"793\" height=\"672\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-service-worker.png 793w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-service-worker-300x254.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-service-worker-768x651.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/resultado-service-worker-360x305.png 360w\" sizes=\"auto, (max-width: 793px) 100vw, 793px\" \/><\/p>\n<p>Adem\u00e1s, en la barra de b\u00fasqueda del navegador veremos que ya se est\u00e1 detectando el portal como una aplicaci\u00f3n y nos da la <strong>opci\u00f3n de instalarla<\/strong> en nuestro equipo Windows.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18136 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/instalar-pwa-test.png\" alt=\"\" width=\"617\" height=\"64\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/instalar-pwa-test.png 617w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/instalar-pwa-test-300x31.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/instalar-pwa-test-360x37.png 360w\" sizes=\"auto, (max-width: 617px) 100vw, 617px\" \/><\/p>\n<p>Si clicamos en la opci\u00f3n de instalar, nos preguntar\u00e1 si queremos instalar la aplicaci\u00f3n en nuestro equipo utilizando tanto el nombre como el icono que configuramos en el fichero <strong>Manifest<\/strong> que creamos anteriormente.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18137 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-test.png\" alt=\"\" width=\"863\" height=\"478\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-test.png 863w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-test-300x166.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-test-768x425.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-test-360x199.png 360w\" sizes=\"auto, (max-width: 863px) 100vw, 863px\" \/><\/p>\n<p>Si instalamos la aplicaci\u00f3n en nuestro equipo Windows, veremos que nos aparece desde el launcher como cualquier otra aplicaci\u00f3n instalada desde el <strong>Marketplace<\/strong> y que el aspecto tanto del acceso directo como de la propia ventana, cumplen con la configuraci\u00f3n definida en el <strong>Manifest<\/strong> (icono, colores, nombre, etc.)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-18138 size-large\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-test-1024x557.png\" alt=\"\" width=\"1024\" height=\"557\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-test-1024x557.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-test-300x163.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-test-768x418.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-test-1536x835.png 1536w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-test-360x196.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2021\/02\/pwa-movil-test.png 1916w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Por \u00faltimo, <strong>podr\u00edamos instalar esta app en un dispositivo m\u00f3vil de igual manera<\/strong> que en Windows siguiendo los mismos pasos desde el navegador.<\/p>\n<p>Sin embargo, como ya comentamos anteriormente, los <strong>Service Workers<\/strong> solo se registran en entornos seguros servidos por https o accesibles desde localhost, por lo que deber\u00edamos publicar nuestro Liferay siguiendo un protocolo seguro para poder hacer este \u00faltimo paso.<\/p>\n<p>En Hiberus contamos con un equipo de expertos en desarrollo de portales en <a href=\"https:\/\/www.hiberus.com\/dxp\/liferay\">Liferay<\/a>. Ya han confiado en nosotros clientes como El Gobierno de Arag\u00f3n, El Corte Ingl\u00e9s o Walgreens Boots Alliance. Contacta con nosotros y descubre c\u00f3mo podemos ayudarte.<\/p>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestros servicios de Liferay?<\/p>\n                        <p>Contacta con nuestro equipo de Liferay<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/18094#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>El uso de las tecnolog\u00edas m\u00f3viles ha crecido exponencialmente a lo largo de los \u00faltimos a\u00f1os, lo que ha provocado que cualquier&#8230;<\/p>\n","protected":false},"author":208,"featured_media":18162,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[3,232],"tags":[50],"class_list":{"0":"post-18094","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-negocio-electronico","8":"category-portales-dxp","9":"tag-liferay"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/18094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/208"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=18094"}],"version-history":[{"count":12,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/18094\/revisions"}],"predecessor-version":[{"id":41652,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/18094\/revisions\/41652"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/18162"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=18094"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=18094"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=18094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}