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
  • 2013: 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

Application Cache

        CACHE MANIFEST
        # v1 2011-08-14
        style.css
         
        # Use from network if available
        NETWORK:
        script.js
         
        # Fallback content
        FALLBACK:
        / fallback.js
      

Application Cache on MDN

Storage

  • sessionStorage (temporaire, par onglet)
  • localStorage (persistant, global)
        localStorage.setItem('foo','bar');
         
        var foo = localStorage.getItem('foo');
         
        localStorage.removeItem('foo');
      

Storage on MDN

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

Sensor/Device API

  • Geolocation, orientation, proximity, battery, luminosité, etc.
        function handleOrientation(event) {
          console.log(event);
          // Do stuff with the new orientation
        }
         
        window.addEventListener("deviceorientation", handleOrientation);
      

Notification

        // L'accord de l'utilisateur est indispensable
        Notification.requestPermission()
         
        // Il ne reste plus qu'à créer une notification
        var n = new Notification("Hi!")
         
        n.onshow(function () {
          setTimeout(n.close, 5000);
        })
      

Notification on MDN

Web Socket

        // Se connecter à un Web Socket
        var socket = new WebSocket("ws://www.example.com/socketserver");
         
        // Envoyer des données
        socket.onopen = function () {
          socket.send("I'm ready.");
        }
         
        // Recevoir des données
        socket.onmessage(function (event) {
          console.log(event.data);
        })
      

WebSocket on MDN

Page Visibility API

        function handleVisibilityChange() {
          if (document.hidden) {
            // Stop doing stuff
          } else {
            // Start doing stuff
          }
        }
         
        document.addEventListener(
          "visibilitychange", handleVisibilityChange
        );
      

Page Visibility on MDN

Les APIs « spécifiques »

Web APIs (privileged apps)

  • Device Storage API
  • Browser API
  • TCP Socket API
  • Contacts API
  • systemXHR

Using WebAPIs to make the web layer more capable

Contacts API

          var contact = new mozContact();
          contact.init({name: "Christian"});
          var request = navigator.mozContacts.save(contact);
          request.onsuccess = function() {
            // contact generated
          };
          request.onerror = function() {
            // contact generation failed
          };
        

Web APIs (certified apps)

  • WebTelephony
  • WebSMS
  • Idle API
  • Settings API
  • Power Management API
  • Mobile Connection API
  • WiFi Information API
  • WebBluetooth
  • Permissions API
  • Network Stats API
  • Camera API
  • Time/Clock API
  • Attention screen
  • Voicemail

Using WebAPIs to make the web layer more capable

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 messages système: le manifeste

    {
      ...
      "messages": [
        { "alarm": "/index.html" }
      ]
    }
     

Les messages système: le gestionnaire

    navigator.mozSetMessageHandler('alarm', function gotMessage(message) {
      ...
    });
     

Web Activities

Web Activities

  • A proposal to get access to hardware by keeping the user in control instead of authenticating on their behalf
  • Comparable to Android Intents, but with a more limited scope that makes sense for the web
  • A technique to create an ecosystem of apps on the device - apps can register as handlers for certain tasks and other apps use them
  • A simple way to get access to hardware and data without needing to package your app and host it from the market
  • Highly secure as nothing happens without the user initiating it

WebActivies Wiki

Web activities

  • configure
  • costcontrol
  • dial
  • open
  • pick
  • record
  • save-bookmark
  • share
  • view
  • new, f.e type: “websms/sms” or “webcontacts/contact”

Sending a number to the phone

        var call = new MozActivity({
          name: "dial",
          data: {
            number: "+1804100100"
          }
        });
      

Get an image from the phone (1/2)

Pick activity
        var getphoto = new MozActivity({
          name: "pick",
          data: {
            type: ["image/png", 
                   "image/jpg", 
                   "image/jpeg"]
          }
        });
      

Get an image from the phone (2/2)

        getphoto.onsuccess = function () {
          var img = document.createElement("img");
          if (this.result.blob.type.indexOf("image") != -1) {
            img.src = window.URL.createObjectURL(this.result.blob);
          }
        };
        getphoto.onerror = function () { // error
        };
      

Activities/Hosted Apps on Android

Foxkeh loves android

Tools

Tools for Firefox OS / HTML5

  • Unlike iOS and Android, there is no fixed SDK or set of IDEs/tools for Firefox OS.
  • Firefox OS apps are HTML5 apps, and we never had one definite set of tools for writing HTML
  • That said, there are some things to make your life easier and get you started more quickly
  • A lot of them come with the browser, or as add-ons to the browser. That way you can use the computer you are comfortable with to develop code
  • You do not need a Firefox OS device to get started – you might need one though to do interaction/performance testing
  • This is an ongoing thing – more tools to come :)

Tools for Firefox OS / HTML5

  • Mozilla has a few things brewing in the tools space
  • Make sure you show the developer tools in Firefox (NOT, I repeat NOT Firebug) and the responsive view which allows you to resize the canvas of the browser to phone size
  • Show the simulator live, change some of the CSS to show that apps are just like web sites
  • Point to the following resizes, make sure to tell people that the OS components are for Gaia - not for any app out there.

Les DevTools et le Remote Debugger

Developer tools

Firefox OS Simulator

Simulator

Firefox OS Simulator

Thanks

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