Introduction à Firefox OS

Introduction à Firefox OS

Firefox OS

Le chemin vers les applications Web

Site Web vs. Web App

  • Depuis 20 ans, les navigateurs évoluent
  • 1991: Ce sont des liseuses de document
  • Aujourd'hui: Ce sont des « runtimes » applicatifs

Architecture

Un site web classique

Site Web

Architecture

Un site web moderne

Site Web

Architecture

Une application web

Site Web

Architecture

Une application web « packagée »

Site Web

Firefox OS

Firefox OS

Firefox OS

Firefox OS et la sécurité

Firefox OS

L'OS est construit avec des technologies Web ouvertes ou en cours de standardisation.

firefox os emulator and source

APIs et permissions

  • L'accès à une fonctionnalité matérielle passe toujours par une API
  • L'appel à cette API peut être autorisée ou non, au cas par cas
  • Différentes règles sont appliquées : accord de l'utilisateur, accord implicite, application installée ou non
  • Une API non standardisée (donc expérimentale) va être limitée aux applications installées

Passer d'un site web à une application Firefox OS

Définie par manifest.webapp

        {
          "name": "My App",
          "description": "My elevator pitch goes here",
          "launch_path": "/",
          "icons": { "128": "/img/icon-128.png" },
          "developer": {
            "name": "Your name or organization",
            "url": "http://your-homepage-here.org"
          }
        }
      

App manifest

Plusieurs types d'application…

  • Contenu Web - sans privilèges particuliers, mais permet tout de même l'accès à certaines APIs (ex: géolocalisation)
  • Applications hébergées - stockées et servies par un serveur web. Facile à mettre à jour, mais a un accès limité aux APIs.
  • Applications packagées - packagées dans des fichiers ZIP, elles peuvent être installées depuis n'importe quel site.
  • Applications privilégiées - revues par la Marketplace, packagées, et signées par une clé identifiant la Marketplace.
  • Applications certifiers - ces applications font partie du système et ne peuvent pas être installées autrement.

App permissions

Installer une application depuis le Web

        var installapp = navigator.mozApps.install(manifestURL);
        installapp.onsuccess = function(data) {
          // L'app est installée
        };
        installapp.onerror = function() {
         // L'app n'est pas installée, et l'erreur est:
         // installapp.error.name
        };
        

Des APIs pour prendre
le contrôle de son application

Web APIs

WebAPI wiki

WebAPI Wiki

Web APIs

  • Des API ouvertes et standards pour accéder au materiel
  • Créées, proposées et discutées avec les autres contructeurs de navigateur via les organismes de standardisation.
  • Une bonne façon d'interagir avec le matériel via JavaScript
  • Asynchrone — Tous les accès sont gérés via un gestionnaire de succès et d'erreur expliquant ce qui s'est passé de manière claire
  • Chapoté par un modèle de sécurité à 3 niveaux permettant de donner des pouvoirs plus ou moins étendus aux applications selon leur mode de distribution.

WebAPIs on MDN

Les APIs « publiques »

Web APIs (hosted apps)

  • Vibration API
  • Screen Orientation
  • Geolocation API
  • Pointer Lock API
  • Open WebApps
  • Network Information API
  • Battery Status API
  • Alarm API
  • Push Notifications API
  • WebFM API / FMRadio
  • WebPayment
  • IndexedDB
  • Ambient light sensor
  • Proximity sensor
  • Notification
  • etc

Using WebAPIs to make the web layer more capable

Les API à connaitre

  • Gérer le cache et la latence: Application Cache, Storage, IndexedDB, Offline.
  • Accéder au materiel: Sensor/Device API (devicemotion, deviceorientation, etc.)
  • Sortir du navigateur: Notifications
  • Travailler avec le réseau: Web Socket
  • Optimiser vos applications: Page Visibility API

IndexedDB

  • Une base de données de type « index »
  • Attention, ce n'est pas du SQL
  • On stocke des paires clé/valeur
  • Le moindre changement repose sur le concept de transaction
  • L'API est totalement asynchrone

IndexedDB on MDN

Les messages système

  • Les applications peuvent s'abonner à des messages système.
  • Le principe, c'est que l'application peut être lancée pour recevoir ce message.
  • Beaucoup de fonctions sont implémentées avec ce principe: push notifications, téléphonie, sms, activités

Les outils

Les DevTools et le Remote Debugger

Developer tools

Firefox OS Simulator

Simulator

Firefox OS Simulator

Les défis du futur

Les problèmes rencontrés

  • Vitesse de lancement
  • Listes infinies
  • Mises à jour
  • Applications packagées
  • "Janks" dans les animations et les rendus
  • Gestion de la mémoire dans une "one-page webapp"
  • Utilisation des multiples coeurs

Les workers

  • Les Workers s'exécutent dans un thread séparé.
  • Ils n'ont pas un accès direct au DOM.
  • La communication se fait par messages asynchrones.
  • On n'a pas accès à toutes les APIs (mais accès à IndexedDB !).
  • Shared Workers: workers partagés pour une même origine.
  • Idée 1: utiliser les Shared Workers pour le modèle de l'application et les contrôleurs.

Les service workers

  • La nouvelle manière de faire du cache offline dans le navigateur
  • Se pose en coupure des requêtes
  • Idée 2: conserver un cache de la page dynamique
  • Idée 3: gérer une mise à jour incrémentale d'une application
  • Idée 3bis: pouvoir faire de l'A/B testing
  • Idée 4: servir toutes les applications (même préinstallées) en HTTP(S): permet aussi la mise à jour incrémentale de toutes les applications.

Les iframes

  • Pour rappel, les iframes insèrent un contexte de navigation à l'intérieur d'une page Web.
  • Idée 5: utiliser des documents séparés pour les différentes vues, utiliser les iframes pour les insérer.
  • Idée 6: supprimer une iframe permet de libérer la mémoire.
  • Idée 7: on peut facilement afficher des vues différemment sur des devices différents.
  • Idée 8: dans la page maître, récupérer des données automatiquement (mémoire, vitesse, etc) pour faire de la télémétrie
  • Aucune obligation: les Single-Page Apps fonctionneront toujours !

Merci

Red panda (Firefox)
  • Julien Wajsberg
  • (avec des bouts de Jérémie Patonnier)
  • Introduction à Firefox OS
Photo by Yortw