{"id":2907,"date":"2020-12-10T11:01:27","date_gmt":"2020-12-10T10:01:27","guid":{"rendered":"https:\/\/www.ice-dev.com\/non-classifiee\/how-to-add-pwa-functionality-to-your-site\/"},"modified":"2024-03-28T11:13:18","modified_gmt":"2024-03-28T10:13:18","slug":"how-to-add-pwa-functionality-to-your-site","status":"publish","type":"post","link":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/","title":{"rendered":"How to add PWA functionality to your site?"},"content":{"rendered":"\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">What is a Progressive Web App?<\/h2>\n\n<p><\/p>\n\n<p>A Progressive Web App is <strong>a mix between a website and a mobile application<\/strong>.<\/p>\n\n<p>A Progressive Web App is an optimized version of a mobile site incorporating features of native applications (normally not available on a browser).<\/p>\n\n<p>It combines the best features of a <strong>website and acts like an application<\/strong>.<\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/shema-web-app.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/shema-web-app.png\" alt=\"\" class=\"wp-image-1592\" width=\"580\" height=\"494\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/shema-web-app.png 899w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/shema-web-app-300x256.png 300w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/shema-web-app-768x654.png 768w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><figcaption><em>What is a Progressive Web App?<\/em><\/figcaption><\/figure>\n\n<p>The general idea is to be able to display a shortcut to a website on the home screen of your <strong>smartphone<\/strong>. (see below)<\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070116-492x1024.jpg\" alt=\"\" class=\"wp-image-1571\" width=\"260\" height=\"542\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070116-492x1024.jpg 492w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070116-144x300.jpg 144w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070116.jpg 615w\" sizes=\"auto, (max-width: 260px) 100vw, 260px\" \/><figcaption>Example of a Progressive Web App<\/figcaption><\/figure>\n\n<p>This operation is carried out in 3 major steps that I will detail below :<\/p>\n\n<ol class=\"wp-block-list\" type=\"1\"><li><strong>The Manifest <\/strong>: a JSON file that describes all the metadata of your PWA.<\/li><li>Switching to the <strong>https<\/strong> protocol if it is not already using this security measure. Indeed, Progressive Web Apps must be served via a secure connection (see article on <a rel=\"noreferrer noopener\" href=\"https:\/\/www.ice-dev.com\/en\/security\/why-you-absolutely-must-secure-your-site-with-https\/\" target=\"_blank\">securing https<\/a>).<\/li><li> <strong>Service Worker<\/strong>: is a script that <strong>operates<\/strong> in the background of the browser, without user interaction. Furthermore, it acts like a proxy that <strong>operates<\/strong> on the client side.<\/li><\/ol>\n\n<h2 class=\"has-text-align-center wp-block-heading\">Step 1 : The Manifest<\/h2>\n\n<p>As previously explained, the JSON manifest gathers all the <strong>necessary information<\/strong> for creating our PWA (name, icon, etc.)<\/p>\n\n<p>This allows us to inform browsers about how to display our application as an &#8220;<strong>installed shortcut<\/strong>&#8221; on our phone.<\/p>\n\n<p>It is placed at the root of our website (see below) : <\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"158\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/emplacement-mani.jpg\" alt=\"\" class=\"wp-image-1559\"\/><figcaption>Location of the manifest.json file<\/figcaption><\/figure>\n\n<p>Here&#8217;s an example of a manifest for a website and the <strong>metadata<\/strong> of our PWA<\/p>\n\n<p>Note: Do not forget to specify, as with a stylesheet using the <strong>link tag<\/strong>, the location of the manifest :<\/p>\n\n<p><\/p>\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>&lt;link rel= \"manifest\" href= \"manifest.json\"<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"747\" height=\"231\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070108.jpg\" alt=\"\" class=\"wp-image-1569\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070108.jpg 747w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070108-300x93.jpg 300w\" sizes=\"auto, (max-width: 747px) 100vw, 747px\" \/><figcaption>Location of the link tag<\/figcaption><\/figure>\n<\/div><\/div>\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-code\"><code>{\n   \n    \"short_name\": \"ICE\",\n    \n    \"name\": \"ICE DEV PWA\",\n    \n    \"icons\": &#91;\n      {\n        \"src\": \"ice.png\",\n        \"type\": \"image\/png\",\n        \"sizes\": \"192x192\"\n      }\n   ],\n   \n    \"start_url\": \"\/index.html\",\t\n    \n    \"background_color\": \"#000000\",\n    \n    \"display\": \"standalone\",\n    \"theme_color\": \"#ff0000\"\n  }<\/code><\/pre>\n<\/div><\/div>\n<\/div><\/div>\n\n<p>In summary, here is the purpose of each of the listed data : <\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Short_name<\/strong>: A short name for the web application, understandable to a human. It&#8217;s intended to be used when there is not enough space available to display the full name of the application.<\/li><\/ul>\n\n<p><\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Name <\/strong>: Provides a name for the application, human-readable, as it is intended to be displayed to the user.<\/li><\/ul>\n\n<p><\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Icons <\/strong>: Defines the logo of our PWA, for example here: &#8220;ice.png&#8221; of 192&#215;192, at the root of our site.<\/li><\/ul>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"360\" height=\"141\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/logo.jpg\" alt=\"\" class=\"wp-image-1561\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/logo.jpg 360w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/logo-300x118.jpg 300w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><figcaption>Location of the PWA logo<\/figcaption><\/figure>\n\n<ul class=\"wp-block-list\"><li><strong>Start_url <\/strong>: Specifies the URL that loads when the user launches an application from a device.<\/li><\/ul>\n\n<p><\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Display <\/strong>: Sets the preferred display mode of the developer for the web application (use standalone).<\/li><\/ul>\n\n<p><\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Theme color<\/strong> &amp; <strong>background_color<\/strong> : Defines the background color during loading and when using the application.<\/li><\/ul>\n\n<p>To verify that everything is working well, you can see the manifest appearing in the &#8220;<strong>application<\/strong>&#8221; section by right-clicking + inspecting<\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"404\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/manifest-1024x404.jpg\" alt=\"\" class=\"wp-image-1562\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/manifest-1024x404.jpg 1024w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/manifest-300x118.jpg 300w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/manifest-768x303.jpg 768w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/manifest-1536x606.jpg 1536w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/manifest.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Manifest in the browser<\/figcaption><\/figure>\n\n<h2 class=\"has-text-align-center wp-block-heading\">Step 2: HTTPS Protocol<\/h2>\n\n<p>If the website does not follow the https protocol, you need to consider the following two scenarios (if you already have an SSL certificate, move on to step 3) :<\/p>\n\n<p>If you manage your own server: It is essential to obtain an <strong>SSL certification<\/strong><\/p>\n\n<p>There are solutions like &#8220;<strong>Let\u2019s Encrypt<em>&#8220;<\/em><\/strong> that allow you to get one reliably.<\/p>\n\n<p>Otherwise, in the case of shared hosting, you need to use a paid solution to be defined with your host.<\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"662\" height=\"510\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/https.png\" alt=\"\" class=\"wp-image-1547\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/https.png 662w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/https-300x231.png 300w\" sizes=\"auto, (max-width: 662px) 100vw, 662px\" \/><figcaption>Protocole Https<\/figcaption><\/figure>\n\n<h2 class=\"has-text-align-center wp-block-heading\">Step 3: The Service Worker<\/h2>\n\n<p>The Service Worker acts as the link between the host and the browser. It also allows for the management of the cache that you want to select when using the web app.<\/p>\n\n<p>To configure it, you need to add two <strong>JavaScript<\/strong> files (at the root of the site).<\/p>\n\n<p>Let&#8217;s call them script.js and sw.js.<\/p>\n\n<p>Once this is done, simply add the following function in our script.js :<\/p>\n\n<pre class=\"wp-block-code\"><code>if ('serviceWorker' in navigator) {\n        navigator.serviceWorker.register('sw.js')\n          .then(function () {console.log('Enregistrement reussi.')})\n          .catch(function (e) {console.error(e)});\n      }\n<\/code><\/pre>\n\n<p>This function aims to test if the service worker is present in the browser and operates efficiently.<\/p>\n\n<p>You can check if the Service Worker has registered correctly in the console or if it returns an error in the browser <strong>console<\/strong>. (right-click + inspect)<\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"370\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070094-1024x370.jpg\" alt=\"\" class=\"wp-image-1565\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070094-1024x370.jpg 1024w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070094-300x108.jpg 300w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070094-768x278.jpg 768w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/photo5877414294059070094.jpg 1101w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Console feedback message<\/figcaption><\/figure>\n\n<p>We will now add the basic configuration to the sw.js file.<\/p>\n\n<pre class=\"wp-block-code\"><code>\/\/lors de l'installation\nself.addEventListener('install' ,evt =&gt;{\nconsole.log('install evt',evt);\n\n}) \n\n\n\/\/capture des events\nself.addEventListener('fetch' ,evt =&gt;{\n    console.log('events captures : ');\n    console.log('fetch evt sur url' ,evt.request.url);\n        \n})    \n<\/code><\/pre>\n\n<p>Important note: You can verify that everything is working correctly in a browser in the &#8220;application&#8221; section when you right-click + inspect.<\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/sw-1024x439.png\" alt=\"\" class=\"wp-image-1568\" width=\"599\" height=\"256\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/sw-1024x439.png 1024w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/sw-300x129.png 300w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/sw-768x329.png 768w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/sw.png 1036w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><figcaption>Service worker status<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\">Testing the Progressive Web App<\/h2>\n\n<p>Chrome offers an extension that allows you to <strong>check the efficiency (performance, accessibility)<\/strong> of your application via a Google extension:<\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"332\" src=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/test-pwa.png\" alt=\"\" class=\"wp-image-1550\" srcset=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/test-pwa.png 683w, https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/11\/test-pwa-300x146.png 300w\" sizes=\"auto, (max-width: 683px) 100vw, 683px\" \/><figcaption>Chrome Lighthouse Extension<\/figcaption><\/figure>\n\n<p>This enables you to verify that everything is functioning correctly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is a Progressive Web App? A Progressive Web App is a mix between a website and a mobile application. A Progressive Web App is an optimized version of a mobile site incorporating features of native applications (normally not available on a browser). It combines the best features of a website and acts like an [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":2713,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"kia_subtitle":"","footnotes":""},"categories":[49],"tags":[],"class_list":["post-2907","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to-do"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to add PWA functionality to your site? - Ice Development<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to add PWA functionality to your site? - Ice Development\" \/>\n<meta property=\"og:description\" content=\"What is a Progressive Web App? A Progressive Web App is a mix between a website and a mobile application. A Progressive Web App is an optimized version of a mobile site incorporating features of native applications (normally not available on a browser). It combines the best features of a website and acts like an [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/\" \/>\n<meta property=\"og:site_name\" content=\"Ice Development\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ice.development\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-10T10:01:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-28T10:13:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/image_pwa.png\" \/>\n\t<meta property=\"og:image:width\" content=\"553\" \/>\n\t<meta property=\"og:image:height\" content=\"311\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mathis Richemont\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@icedevelopment\" \/>\n<meta name=\"twitter:site\" content=\"@icedevelopment\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mathis Richemont\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/\"},\"author\":{\"name\":\"Mathis Richemont\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#\\\/schema\\\/person\\\/573111d20e7456a11003fb72b07ed37e\"},\"headline\":\"How to add PWA functionality to your site?\",\"datePublished\":\"2020-12-10T10:01:27+00:00\",\"dateModified\":\"2024-03-28T10:13:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/\"},\"wordCount\":714,\"publisher\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.ice-dev.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image_pwa.png\",\"articleSection\":[\"How to do?\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/\",\"url\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/\",\"name\":\"How to add PWA functionality to your site? - Ice Development\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.ice-dev.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image_pwa.png\",\"datePublished\":\"2020-12-10T10:01:27+00:00\",\"dateModified\":\"2024-03-28T10:13:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.ice-dev.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image_pwa.png\",\"contentUrl\":\"https:\\\/\\\/www.ice-dev.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/image_pwa.png\",\"width\":553,\"height\":311},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/how-to-do\\\/how-to-add-pwa-functionality-to-your-site\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/ice-development\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to add PWA functionality to your site?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#website\",\"url\":\"https:\\\/\\\/www.ice-dev.com\\\/\",\"name\":\"Ice Development\",\"description\":\"agence web Lyon\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.ice-dev.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#organization\",\"name\":\"Ice Development\",\"url\":\"https:\\\/\\\/www.ice-dev.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.ice-dev.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/apple-touch-2.png\",\"contentUrl\":\"https:\\\/\\\/www.ice-dev.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/apple-touch-2.png\",\"width\":512,\"height\":512,\"caption\":\"Ice Development\"},\"image\":{\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/ice.development\",\"https:\\\/\\\/x.com\\\/icedevelopment\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/ice-development-lyon\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.ice-dev.com\\\/#\\\/schema\\\/person\\\/573111d20e7456a11003fb72b07ed37e\",\"name\":\"Mathis Richemont\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/877f961f07637d4f8967a136292afacf0bdb0c7122e4f84073dcaaa5857fde65?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/877f961f07637d4f8967a136292afacf0bdb0c7122e4f84073dcaaa5857fde65?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/877f961f07637d4f8967a136292afacf0bdb0c7122e4f84073dcaaa5857fde65?s=96&d=mm&r=g\",\"caption\":\"Mathis Richemont\"},\"url\":\"https:\\\/\\\/www.ice-dev.com\\\/en\\\/author\\\/mr\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to add PWA functionality to your site? - Ice Development","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/","og_locale":"en_US","og_type":"article","og_title":"How to add PWA functionality to your site? - Ice Development","og_description":"What is a Progressive Web App? A Progressive Web App is a mix between a website and a mobile application. A Progressive Web App is an optimized version of a mobile site incorporating features of native applications (normally not available on a browser). It combines the best features of a website and acts like an [&hellip;]","og_url":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/","og_site_name":"Ice Development","article_publisher":"https:\/\/www.facebook.com\/ice.development","article_published_time":"2020-12-10T10:01:27+00:00","article_modified_time":"2024-03-28T10:13:18+00:00","og_image":[{"width":553,"height":311,"url":"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/image_pwa.png","type":"image\/png"}],"author":"Mathis Richemont","twitter_card":"summary_large_image","twitter_creator":"@icedevelopment","twitter_site":"@icedevelopment","twitter_misc":{"Written by":"Mathis Richemont","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/#article","isPartOf":{"@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/"},"author":{"name":"Mathis Richemont","@id":"https:\/\/www.ice-dev.com\/#\/schema\/person\/573111d20e7456a11003fb72b07ed37e"},"headline":"How to add PWA functionality to your site?","datePublished":"2020-12-10T10:01:27+00:00","dateModified":"2024-03-28T10:13:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/"},"wordCount":714,"publisher":{"@id":"https:\/\/www.ice-dev.com\/#organization"},"image":{"@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/image_pwa.png","articleSection":["How to do?"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/","url":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/","name":"How to add PWA functionality to your site? - Ice Development","isPartOf":{"@id":"https:\/\/www.ice-dev.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/#primaryimage"},"image":{"@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/#primaryimage"},"thumbnailUrl":"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/image_pwa.png","datePublished":"2020-12-10T10:01:27+00:00","dateModified":"2024-03-28T10:13:18+00:00","breadcrumb":{"@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/#primaryimage","url":"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/image_pwa.png","contentUrl":"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2020\/12\/image_pwa.png","width":553,"height":311},{"@type":"BreadcrumbList","@id":"https:\/\/www.ice-dev.com\/en\/how-to-do\/how-to-add-pwa-functionality-to-your-site\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.ice-dev.com\/en\/ice-development\/"},{"@type":"ListItem","position":2,"name":"How to add PWA functionality to your site?"}]},{"@type":"WebSite","@id":"https:\/\/www.ice-dev.com\/#website","url":"https:\/\/www.ice-dev.com\/","name":"Ice Development","description":"agence web Lyon","publisher":{"@id":"https:\/\/www.ice-dev.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.ice-dev.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.ice-dev.com\/#organization","name":"Ice Development","url":"https:\/\/www.ice-dev.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.ice-dev.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2023\/06\/apple-touch-2.png","contentUrl":"https:\/\/www.ice-dev.com\/wp-content\/uploads\/2023\/06\/apple-touch-2.png","width":512,"height":512,"caption":"Ice Development"},"image":{"@id":"https:\/\/www.ice-dev.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ice.development","https:\/\/x.com\/icedevelopment","https:\/\/www.linkedin.com\/company\/ice-development-lyon\/"]},{"@type":"Person","@id":"https:\/\/www.ice-dev.com\/#\/schema\/person\/573111d20e7456a11003fb72b07ed37e","name":"Mathis Richemont","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/877f961f07637d4f8967a136292afacf0bdb0c7122e4f84073dcaaa5857fde65?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/877f961f07637d4f8967a136292afacf0bdb0c7122e4f84073dcaaa5857fde65?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/877f961f07637d4f8967a136292afacf0bdb0c7122e4f84073dcaaa5857fde65?s=96&d=mm&r=g","caption":"Mathis Richemont"},"url":"https:\/\/www.ice-dev.com\/en\/author\/mr\/"}]}},"_links":{"self":[{"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/posts\/2907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/comments?post=2907"}],"version-history":[{"count":1,"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/posts\/2907\/revisions"}],"predecessor-version":[{"id":2908,"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/posts\/2907\/revisions\/2908"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/media\/2713"}],"wp:attachment":[{"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/media?parent=2907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/categories?post=2907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ice-dev.com\/en\/wp-json\/wp\/v2\/tags?post=2907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}