<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mathis Richemont, Auteur à Ice Development</title>
	<atom:link href="https://www.ice-dev.com/author/mr/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.ice-dev.com/author/mr/</link>
	<description>agence web Lyon</description>
	<lastBuildDate>Fri, 08 Jan 2021 10:13:06 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Comment ajouter la fonctionnalité PWA à votre site ?</title>
		<link>https://www.ice-dev.com/comment-faire/comment-ajouter-la-fonctionnalite-pwa-a-votre-site/</link>
		
		<dc:creator><![CDATA[Mathis Richemont]]></dc:creator>
		<pubDate>Thu, 10 Dec 2020 10:01:27 +0000</pubDate>
				<category><![CDATA[Comment faire ?]]></category>
		<guid isPermaLink="false">https://www.ice-dev.com/?p=1544</guid>

					<description><![CDATA[<p>Qu&#8217;est ce qu&#8217;une Progressive Web App ? Une Progressive Web App est un mixte entre un site web et une application mobile. Une progressive Web App est une version optimisée d’un site mobile intégrant des fonctionnalités d’applications natives (normalement indisponibles sur un navigateur). Elle combine les meilleures fonctionnalités d’un site Web et agit comme une [&#8230;]</p>
<p>L’article <a href="https://www.ice-dev.com/comment-faire/comment-ajouter-la-fonctionnalite-pwa-a-votre-site/">Comment ajouter la fonctionnalité PWA à votre site ?</a> est apparu en premier sur <a href="https://www.ice-dev.com">Ice Development</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<h2 class="wp-block-heading">Qu&rsquo;est ce qu&rsquo;une Progressive Web App ?</h2>



<p></p>



<p>Une Progressive Web App est un <strong>mixte entre un site web et une application mobile.</strong></p>



<p>Une progressive Web App est une version optimisée d’un site mobile intégrant des fonctionnalités d’applications natives (normalement indisponibles sur un navigateur).</p>



<p>Elle combine les meilleures fonctionnalités d’un <strong>site Web et agit comme une application</strong></p>



<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 fetchpriority="high" 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="(max-width: 580px) 100vw, 580px" /></a><figcaption><em>Qu&rsquo;est ce qu&rsquo;une Progressive Web App ?</em></figcaption></figure>



<p>L’idée générale est de réussir à afficher un raccourci vers un site web sur l’écran d’accueil de son <strong>smartphone</strong>. (voir ci-dessous)</p>



<figure class="wp-block-image size-large is-resized"><img 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="(max-width: 260px) 100vw, 260px" /><figcaption>Exemple d&rsquo;une Progressive Web App</figcaption></figure>



<p>Cette opération s’effectue en 3 étapes majeures que je vais détailler ci-après:</p>



<ol class="wp-block-list" type="1"><li><strong>Le Manifeste</strong>&nbsp;: fichier JSON qui décrit toutes les métadonnées de votre PWA</li><li>Passage au protocole <strong>https</strong> si celui-ci n’utilise pas cette sécurisation. En effet, les Applications Web Progressives doivent être servies via une connexion sécurisée (voir article sur la <a rel="noreferrer noopener" href="https://www.ice-dev.com/securite/pourquoi-vous-devez-absolument-securiser-votre-site-avec-lhttps/" target="_blank">sécurisation https</a>) </li><li>&nbsp;<strong>Service Worker</strong>&nbsp;:&nbsp;est un script qui&nbsp;<strong>fonctionne</strong>&nbsp;sur l&rsquo;arrière-plan du navigateur, sans interaction de l&rsquo;utilisateur.&nbsp;En outre, il ressemble à un proxy qui&nbsp;<strong>fonctionne</strong>&nbsp;du côté de l&rsquo;utilisateur.</li></ol>



<h2 class="has-text-align-center wp-block-heading">Étape 1 : Le Manifeste</h2>



<p>Comme expliqué précédemment, le manifeste json regroupe toutes les <strong>informations nécessaires</strong> à la création de notre PWA (nom, icône etc&#8230;)</p>



<p>Cela permet de faire passer aux navigateurs l’information sur comment afficher notre application en tant que «&nbsp;<strong>raccourci&nbsp;</strong>» installé sur notre téléphone.</p>



<p>Il se place à la racine de notre site web (voir ci-dessous) : </p>



<figure class="wp-block-image size-large"><img 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>Emplacement du fichier manifest.json</figcaption></figure>



<p>Voici un exemple de manifest pour un site web et les <strong>métadonnées </strong>de notre PWA</p>



<p>Attention&nbsp;: il ne faut pas oublier d’indiquer, comme pour une feuille de style avec la <strong>balise link, </strong>l’emplacement du manifest&nbsp;:</p>



<p></p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<pre class="wp-block-code"><code>&lt;link rel= "manifest" href= "manifest.json"</code></pre>



<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>Emplacement de la balise link</figcaption></figure>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow">
<pre class="wp-block-code"><code>{
   
    "short_name": "ICE",
    
    "name": "ICE DEV PWA",
    
    "icons": &#91;
      {
        "src": "ice.png",
        "type": "image/png",
        "sizes": "192x192"
      }
   ],
   
    "start_url": "/index.html",	
    
    "background_color": "#000000",
    
    "display": "standalone",
    "theme_color": "#ff0000"
  }</code></pre>
</div></div>
</div></div>



<p>En résumé, voici l&rsquo;intérêt de chacune des données listées : </p>



<ul class="wp-block-list"><li><strong>Short_name</strong> : Un nom court pour l&rsquo;application web, compréhensible pour un humain. Il est destiné à être utilisé quand il n&rsquo;y a pas suffisamment de place disponible pour afficher le nom complet de l&rsquo;application.</li></ul>



<p></p>



<ul class="wp-block-list"><li><strong>Name </strong>: Fournit un nom pour l&rsquo;application, lisible pour un humain, car il est destiné à être affiché à l&rsquo;utilisateur</li></ul>



<p></p>



<ul class="wp-block-list"><li><strong>Icons </strong>: Définit le logo de notre PWA par exemple ici : « ice.png » de 192&#215;192, à la racine de notre site.</li></ul>



<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>Emplacement du logo de la PWA</figcaption></figure>



<ul class="wp-block-list"><li><strong>Start_url </strong>: Spécifie l&rsquo;URL qui se charge, lorsque l&rsquo;utilisateur lance une application à partir d&rsquo;un périphérique.</li></ul>



<p></p>



<ul class="wp-block-list"><li><strong>Display </strong>: Définit le mode d&rsquo;affichage préféré du développeur pour l&rsquo;application web (utiliser standalone).</li></ul>



<p></p>



<ul class="wp-block-list"><li><strong>Theme color</strong> &amp; <strong>background_color</strong> : définit la couleur du fond lors du chargement et lors de l&rsquo;utilisation de l&rsquo;application.</li></ul>



<p>Pour vérifier que tout fonctionne bien , on peut voir le manifeste apparaitre dans la section « <strong>application</strong> » en faisant clic droit + inspecter</p>



<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>Manifeste dans le navigateur</figcaption></figure>



<h2 class="has-text-align-center wp-block-heading">Étape 2 : Protocole HTTPS</h2>



<p>Dans le cas ou le site web ne suit pas le protocole https, il faut suivre les deux cas de figure suivants&nbsp;(si vous avez déjà le certificat SSL passez à l’étape 3) :</p>



<p>Si vous gérez votre propre serveur&nbsp;: &nbsp;Il faut de façon indispensable se procurer une<strong> certification SSL</strong></p>



<p>Il existe des solutions comme «&nbsp;<strong>Let&rsquo;s Encrypt<em>&nbsp;» </em></strong>qui permettent d’en obtenir une de façon fiable.</p>



<p>Sinon, dans le cas d’un hébergement mutualisé, il faut utiliser une solution payante à définir avec son hébergeur.</p>



<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>



<h2 class="has-text-align-center wp-block-heading">Étape 3 : Le Service Worker</h2>



<p>Le Service Worker est le lien qui existe entre l’hôte et le navigateur. Il permet également de gérer le cache que l&rsquo;on veut sélectionner lorsque on utilise la web app.</p>



<p>Pour le configurer, il faut ajouter deux fichiers <strong>JavaScript</strong> (à la racine du site).</p>



<p>On les appellera  script.js et sw.js</p>



<p>Une fois cela réalisé, il suffit d’ajouter la fonction suivante dans notre script.js&nbsp;:</p>



<pre class="wp-block-code"><code>if ('serviceWorker' in navigator) {
        navigator.serviceWorker.register('sw.js')
          .then(function () {console.log('Enregistrement reussi.')})
          .catch(function (e) {console.error(e)});
      }
</code></pre>



<p>Cette fonction a pour but de tester si le service worker est présent dans le navigateur et fonctionne efficacement.</p>



<p>Il est possible de vérifier si le Service Worker s’est enregistré correctement dans la console ou s&rsquo;il renvoie une erreur dans la <strong>console</strong> du navigateur. (clic droit + inspecter)</p>



<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>Message de retour de la console</figcaption></figure>



<p>On va maintenant ajouter la configuration de base au fichier sw.js</p>



<pre class="wp-block-code"><code>//lors de l'installation
self.addEventListener('install' ,evt =&gt;{
console.log('install evt',evt);

}) 


//capture des events
self.addEventListener('fetch' ,evt =&gt;{
    console.log('events captures : ');
    console.log('fetch evt sur url' ,evt.request.url);
        
})    
</code></pre>



<p>Note importante : Il est possible de vérifier que tout fonctionne correctement dans un navigateur dans la section « application » lorsque l&rsquo;on fait clic droit + inspecter</p>



<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>Etat du service worker</figcaption></figure>



<h2 class="wp-block-heading">Test de la Progressive Web App</h2>



<p>Chrome propose une extension qui permet de <strong>vérifier l’efficacité (performances, accessibilité)</strong> de son application via une extension Google&nbsp;:</p>



<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>Extension chrome Lighthouse</figcaption></figure>



<p>Cela permet de vérifier que tout fonctionne correctement.</p>
<p>L’article <a href="https://www.ice-dev.com/comment-faire/comment-ajouter-la-fonctionnalite-pwa-a-votre-site/">Comment ajouter la fonctionnalité PWA à votre site ?</a> est apparu en premier sur <a href="https://www.ice-dev.com">Ice Development</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
