Sara Harkousse
@Sara_harkousse
@Maydeeapp
SARA HARKOUSSE
@Sara_harkousse
Tech Lead, Développeuse front-end Web à Dassault Systèmes
Développeuse Full stack à Maydée
"Duchess France" Leader & Marraine dans "Elles Bougent"
À propos de moi
Maydée
@Maydeeapp
Maydée est une association dont l'objectif est de sensibiliser à l'inégale répartition des tâches domestiques entre les femmes et les hommes et à son impact sur les vies des femmes.
Le Projet
https://www.maydee.fr
L'Application
Aperçu de la V1 de l'application. Lancement de la version bêta à l'automne 2017.
Stack technique
@Maydeeapp @Sara_harkousse
HTML
CSS
JavaScript
Polymer
Node
MongoDB
Express
Client
Serveur
Maydée est une Progressive Web App ( ) développée "from scratch".
Pourquoi utiliser une ?
@Maydeeapp @Sara_harkousse
5 Milliards
d'Objects connectés au Web
Source: we are social
@Maydeeapp @Sara_harkousse
Source: comScore Mobile Metrix, Juin 2015
VS
Sites Web
Applications Mobiles
@Maydeeapp @Sara_harkousse
80%
du temps de navigation sur leurs 3 applications mobiles préférées.
Source: comScore Mobile Metrix, Juin 2015
Les utilisateur.trice.s de smartphone passent
@Maydeeapp @Sara_harkousse
Caractéristiques
Usage
@Maydeeapp @Sara_harkousse
whatwebcando.today
- Une initiative cross-browser
Une , c'est quoi?
@Maydeeapp @Sara_harkousse
Responsive
Indépendante de la connectivité
App-like
Actualisée
Sécurisée
Facile à trouver
Engageante
Installable
@Maydeeapp @Sara_harkousse
- Responsive & App-like
Responsive: s'adapte à la taille du navigateur ( pc, tablette, mobile, ...)
SPA (layout (App Shell) + contenu dynamique)
@Maydeeapp @Sara_harkousse
- Indépendante de la connectivité
Capacité à fonctionner en l’absence d’une connexion internet et Lie-Fi.
Service Worker
Un script JavaScript en arrière plan
Un proxy côté client
Utilise Fetch et Cache APIs
@Maydeeapp @Sara_harkousse
- Service Worker
- Enregistrement
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}, function(err) {
console.log('ServiceWorker registration failed: ', err);
});
});
}
@Maydeeapp @Sara_harkousse
- Service Worker
- Installation
var CACHE_NAME = 'app-cache-v1';
var urlsToCache = [
'/',
'/styles/styles.css',
'/script/app.js'
];
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
Si le Service Worker est nouveau, il sera installé.
Cache API est utilisé pour sauvegarder les ressources essentielles au fonctionnement offline.
@Maydeeapp @Sara_harkousse
- Service Worker
- Fetch
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
return fetch(event.request);
}
)
);
});
Fetch API est utilisé pour faire les requête a serveur.
@Maydeeapp @Sara_harkousse
- Actualisé
L'app Shell et les données sont toujours à jour.
Suppression des données obsolètes à l'activation du Service Worker.
self.addEventListener('activate', function(event) {
var cacheWhitelist = ['app-cache-v1', 'data-cache-v1'];
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheWhitelist.indexOf(cacheName) === -1) {
return caches.delete(cacheName);
}
})
);
})
);
});
@Maydeeapp @Sara_harkousse
- Sécurisé
Les Service Workers ne fonctionnent qu'en localhost ou HTTPS.
@Maydeeapp @Sara_harkousse
- Facile à trouver
L’application est indexée dans les moteurs de recherche.
@Maydeeapp @Sara_harkousse
- Installable (1/2)
L’application s'installe telle une application native.
@Maydeeapp @Sara_harkousse
- Installable (2/2)
Web App Manifest
Name
Icon
Splash screen
Start url
{
"name": "my app",
"short_name": "my app",
"theme_color":"#ffffff",
"background_color":"#ffffff",
"start_url": "index.html?launcher=true",
"icons": [
{
"src": "launcher-icon-1x.png",
"type": "image/png",
"sizes": "48x48"
},
{
"src": "launcher-icon-2x.png",
"type": "image/png",
"sizes": "96x96"
},
{
"src": "launcher-icon-4x.png",
"type": "image/png",
"sizes": "192x192"
}
]
}
<link rel="manifest" href="/manifest.json">
@Maydeeapp @Sara_harkousse
- Engageante (1/3)
Les Notifications Push
Client:
1- Demande de permission à l'utilisateur.trice.
2- Recevoir l'objet PushSubscription du navigateur
3- Envoyer l'objet PushSubscription au serveur
Demande de permission sur Desktop
Demande de permission sur Mobile
@Maydeeapp @Sara_harkousse
- Engageante (2/3)
Serveur:
Envoyer des push à l'utilisateur.trice
Service Worker:
Ecouter les événements push
Afficher les notifications
@Maydeeapp @Sara_harkousse
- Engageante (3/3)
self.addEventListener('push', function(event) {
const promiseChain = self.registration.showNotification('Hello, World.');
event.waitUntil(promiseChain);
});
Comment créer une rapidement?
@Maydeeapp @Sara_harkousse
- CLI - Outil de "Scaffolding" (1/2)
create-react-app
- Génération du Service Worker et Manifest
- Stratégie: Cache-first
npm install -g create-react-app
create-react-app my-react-app
cd my-react-app
npm start
@Maydeeapp @Sara_harkousse
- CLI - Outil de "Scaffolding" (2/2)
polymer-cli
- Génération du Service Worker et Manifest
- 3 builds (es5-bundled, es6-bundled, es6-unbundled)
- PRPL Pattern
npm install -g polymer-cli
cd my-polymer-app
polymer init
> polymer-2-starter-kit
polymer build
polymer serve --open
Comment on teste la qualité d'une ?
@Maydeeapp @Sara_harkousse
- Lighthouse
@Maydeeapp @Sara_harkousse
- Liens utiles
PWA - https://developers.google.com/web/ilt/pwa/
PWA - https://developers.google.com/web/fundamentals/
Service Worker - https://serviceworke.rs/
- https://jakearchibald.com/2014/offline-cookbook/
PWABuilder - https://www.pwabuilder.com/
HNPWA - https://hnpwa.com/
L'équipe
Maydée est à la recherche de nouveaux talents !
Rendez-vous sur
maydee.fr/benevolat/
Julie Hebting - Co-fondatrice Responsable développement projet
Sara Harkousse - Co-fondatrice CTO Maydéeapp
Linda Cusatis
Cheffe de projet web
Sébastien Le Bote
CTO Infrastructure
Stéphanie Herr
Community Manager
Maydée
@Maydeeapp
https://www.maydee.fr
Follow pour les slides
@Sara_harkousse
Merci pour votre écoute
Maydée: Progressive Web App
By sara_harkousse
Maydée: Progressive Web App
la Progressive Web App qui fait progresser l'égalité entre les femmes et les hommes.
- 1,438