SlideShare a Scribd company logo
1 of 37
Download to read offline
Firefox OS -
og web som mobil plattform
Håvard Wigtil
Kantega AS
JavaZone 2013
Agenda
● Om Firefox OS
● Utviklingsmiljø
● Hva er en Firefox OS-app?
● API'er
● Look and feel
● Andre plattformer
Historisk tilbakeblikk
«Netscape would render Windows
a poorly debugged set of device drivers»
RT Marc Andreessen
Om Mozilla
«Our mission is to promote openness,
innovation & opportunity on the Web»
http://www.mozilla.org/en-US/mission/
Hvorfor Firefox OS?
● Motivasjon: Et åpent Internet også for mobile enheter, hindre
lukkede systemer
● Skal ikke konkurrere med Android og iOS på features (ennå!)
● Tett samarbeid med mobiloperatører
● Sikter seg inn mot «utviklende økonomier»
Hva er Firefox OS?
● Operativsystem for mobile enheter
● Basert på web-teknologier
● HTML og JavaScript som eneste utviklingsplattform
Hva er Firefox OS?
Mobiltelefon
Hardware
Gonk
Operativsystem: Linux-kjerne og hardware abstraction layer
Gecko
Runtime: API'er, JavaScript, parser, DOM («Firefox uten GUI»)
Gaia
GUI: Systemapplikasjoner, 100% HTML, JavaScript og CSS
FirefoxOS
Et screenshot sier mer enn 1000 bullet points
Status for Firefox OS
● Versjon 1.0 i februar i år
● Offisielle utviklertelefoner fra april
● Lansert i Spania og Polen i juli
● Lansert i Colombia og Venezuela i august, snart i Brasil
● Telenor skal lansere i Øst-Europa i høst
● Versjon 1.1 rett rundt hjørnet
● Planer om nye releaser 4 ganger i året
Utviklingsmiljø på 1-2-3
● Installér utvidelse i Firefox
● Pek simulator til HTML
● Kjør!
Andre muligheter for utvikling
● Få telefoner tilgjengelig (i Norge) ennå
● Mulig å installere på enkelte Android-telefoner, f.eks. Galaxy S2
● Firefox på Android
Hva er en Firefox OS-app?
● Manifest-fil for metadata
● API for å installere
● Kan også brukes på desktop
og Android
{
"version": "0.1",
"name": "Features",
"description": "Viser tilgjengelige API'er",
"launch_path": "/index.html",
"icons": {
"128": "/img/icon-128.png"
},
"developer": {
"name": "Håvard Wigtil",
"url": "http://www.kantega.no"
}
}
https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest
https://developer.mozilla.org/en-US/docs/Web/Apps/JavaScript_API
window.navigator.mozApps.install(manifestUrl);
Sikkerhetsmodell
● Deling i kategorier av apps etter opprinnelse (hosted, installed,
privileged, certified)
● Manifest med ønskede rettigheter
● Stiller krav til kode for privileged og certified apps (egen content
security policy)
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Security/Security_model
https://developer.mozilla.org/en-US/docs/Web/Apps/CSP
API-tilgang etter type
https://developer.mozilla.org/en-US/docs/WebAPI
https://hacks.mozilla.org/2013/02/using-webapis-to-make-the-web-layer-more-capable/
Type API'er
Installed Posisjon, orientering, online-status, batteristatus, betaling,
vibrering, med mer
Privileged Kontakter, lokalt filsystem, TCP sockets, XmlHttpRequest til
vilkårlig host
Certified Telefon, SMS, Bluetooth, strømstyring, nettverksinformasjon, etc
Offline web
● «Hvem vil ha en telefon som alltid må være koblet på nett?»
● Application cache API (AppCache) kan brukes til å lagre innhold
for en app offline
● Andre API'er for lokal lagring av brukerdata
Eksempel på AppCache
● Attributt i html-elementet
● Listing for cache-fil
https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache
<html manifest="features.appcache">
CACHE MANIFEST
# v2
features.js
features.css
«Application cache is a doucebag»
● Filer hentes alltid fra cache
● Cache oppdateres kun når innholdet i manifest endres
● Cache oppdateres etter at side er lastet
● Hvis kun én fil ikke kan lastes ned vil cache ikke oppdateres
http://alistapart.com/article/application-cache-is-a-douchebag
Lokal lagring
● WebStorage for enkle brukerdata
● IndexedDB for lagring eller caching av komplekse brukerdata
● Også mulig med proprietær Device Storage-API som gir
begrenset tilgang til filsystem
https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Storage
https://developer.mozilla.org/en-US/docs/IndexedDB
https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage
sessionStorage.setItem("jz13.schedule", JSON.stringify(schedule));
...
var schedule = JSON.parse(sessionStorage.getItem("jz13.schedule"));
Manifest med rettigheter
● For å få tilgang til «priviligerte» API'er må rettigheter settes opp
i manifest
"type": "privileged",
"permissions": {
"geolocation": {},
"contacts": {
"description": "Sjekke adressebok og legge inn kontakter",
"access": "readcreate"
},
"device-storage:pictures": {
"access": "readwrite"
},
"desktop-notification": {}
}
Eksempel: Posisjon
● En «gammel» API, støttet i de fleste nettlesere
● Også mulig å få beskjed ved endret posisjon
function checkLocation() {
navigator.geolocation.getCurrentPosition(positionCallback, positionErrorCallback,
{ enableHighAccuracy: true});
}
function positionCallback(position) {
var c = position.coords;
if (c.longitude > 10.7528 && c.longitude < 10.7569
&& c.latitude > 59.9121 && c.latitude < 59.9137) {
document.getElementById("location_status").textContent = "Du er på JavaZone!";
} else {
document.getElementById("location_status").textContent = "Kom deg på JavaZone!";
}
}
https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation
Eksempel: Kontakt-API
● Krever å være installert fra en app store for tilgang («privileged»)
● Eksempel: Hente ut en kontakt
var options = {
filterValue : "93846468",
filterBy : ["tel"],
filterOp : "contains",
filterLimit : 1
};
var search = navigator.mozContacts.find(options);
search.onsuccess = function() {
var status = document.getElementById("address_book_status");
if (search.result.length === 1) {
status.textContent = "Nummer finnes i adressebok";
} else {
status.textContent = "Nummer ikke i adressebok";
}
};
https://developer.mozilla.org/en-US/docs/WebAPI/Contacts
Eksempel: Lokalt filsystem
● Lese fra «bilder»-mappe
var pics = navigator.getDeviceStorage('pictures');
if (pics === null) {
document.getElementById("thumbnails").textContent = "Ikke støtte for bilder";
return;
}
var cursor = pics.enumerate();
cursor.onsuccess = function () {
var file = this.result;
var img = document.createElement("img");
img.height = 60;
img.src = window.URL.createObjectURL(file);
document.getElementById("thumbnails").appendChild(img);
if (!this.done) {
this.continue();
}
};
https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage
Eksempel: Systemvarsler
● Meldinger i «varslingsområde», dvs. øverst på skjermen
● Nylig standardisert API, Firefox OS har ikke siste versjon ennå
https://developer.mozilla.org/en-US/docs/Web/API/notification
if ("Notification" in window) {
new Notification("'API demo' har startet",  {"body": "Systemvarsler med ny API"});
} else if ("mozNotification" in navigator) {
var notification = navigator.mozNotification.createNotification("'API demo' har startet",
"Systemvarsler med gammel API");
notification.show();
} else
{
alert("Ingen støtte for systemvarsler");
}
Eksempel: Systemvarsler
Web activities
● Lar applikasjoner bruke systemressurser på en sikker måte
● Applikasjoner kan registrere seg for å tilby aktiviteter
● GUI for å velge mest egnede app
Eksempel: Bilde med web activities
● Få bilde fra kamera eller filsystem
● Bruker velger først kilde
var pick = new MozActivity({name: "pick", data: {type: ["image/*"]}});
pick.onsuccess = function () {
var img = document.createElement("img");
img.src = window.URL.createObjectURL(this.result.blob);
var imagePresenter = document.getElementById("image_presenter");
imagePresenter.appendChild(img);
};
pick.onerror = function() {
alert("Bilde ikke valgt: " + pick.error.name);
}
Betaling
● Mozillas Marketplace med «standard» betingelser (tar 30%)
● Lagt opp til å kunne ha mange app stores
● Store telefonoperatører vil kanskje ha egen app store
In-app betaling
● Egen proprietær JavaScript-API for in-app betaling
● Krever en server for app-utvikler
● Kan også brukes på Firefox for Android
https://developer.mozilla.org/en-US/docs/Web/Apps/Publishing/In-app_payments
Eksempelflyt for in-app betaling
1. App tar kontakt med server og bestiller «vare», får et signert
JSON Web Token (JWT) tilbake
2. App kaller JavaScript-API med JWT som parameter
3. API tar dialog med betalingsformidler, i eget GUI
4. Betalingsformidler gir beskjed til server om gjennomført betaling
5. App poller server for å få beskjed om gjennomført betaling
Look and feel
● Få faste rammer
● Kan gjøre hva du vil med HTML og CSS
● Inger felles ressurser for app'er (men system-app'er deler)
Building Blocks
● Eget nettsted for å designe apps med integrert utseende
● Maler for GUI-elementer og transisjoner
● Kopiere ressurser og legge inn i egen app
● Demo-app finnes også på Mozilla marketplace
Kodeeksempel med «Building Blocks»
<section role="region" id="buttons" data-position="right">
<header class="fixed">
<a id="btn-buttons-back" href="#"><span
class="icon icon-back">back</span></a>
<h1>Buttons</h1>
</header>
<article class="content scrollable header">
<header><h2>Normal</h2></header>
<div>
<button>Default</button>
<button class="recommend">Recommend</button>
<button class="danger">Danger</button>
</div>
API på andre nettlesere
http://mobilehtml5.org/
API Firefox OS FF Android FF Desktop Android iOS Win Phone
Posisjon ✔ ✔ ✔ ✔ ✔ ✔
Kontakter ✔
Varsler ✔ ✔ ✔
AppCache ✔ ✔ ✔ ✔ ✔ ✔
WebStorage ✔ ✔ ✔ ✔ ✔ ✔
Beveg.sensor ✔ ✔ ✔ ✔ ✔
IndexedDB ✔ ✔ ✔ ✔ ✔
Betaling ✔ ✔
Andre web-baserte plattformer
● Blackberry 10
● Tizen
● Ubuntu Touch
● Chrome Apps
● Windows 8
http://developer.chrome.com/apps/about_apps.html
Oppsummering
● Du trenger lite ekstra for en Firefox OS-app
● Mobilt web har muligheter
● Økende antall plattformer krever en strategi
Pekere til eksempler
● Mange gode eksempler på nett
● Mozilla tilbyr også applikasjonsmaler
● To enkle eksempler på Kantega Github
https://github.com/robnyman/Firefox-OS-Boilerplate-App
https://developer.mozilla.org/en-US/docs/Web/Apps/App_templates
https://github.com/kantega/firefoxos-examples
Spørsmål?
Presentasjon på slideshare.net/havwig/
Eksempler på github.com/kantega/
Eller kom til Kantegas stand etterpå.

More Related Content

Similar to Firefox OS - og web som mobil plattform

Progressive web applications i praksis
Progressive web applications i praksisProgressive web applications i praksis
Progressive web applications i praksisHåvard Wigtil
 
The Client Strikes Back
The Client Strikes BackThe Client Strikes Back
The Client Strikes BackMagnus Green
 
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016Geodata AS
 
Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016
Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016
Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016Geodata AS
 
Blazor - en kjapp intro
Blazor - en kjapp introBlazor - en kjapp intro
Blazor - en kjapp introRunegri
 
BK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add insBK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add insGeodata AS
 
Kristiansand php meeting #1
Kristiansand php meeting #1Kristiansand php meeting #1
Kristiansand php meeting #1Morten Bergset
 
BK2011 Utvikling av lette webapplikasjoner i java script og html
BK2011 Utvikling av lette webapplikasjoner i java script og htmlBK2011 Utvikling av lette webapplikasjoner i java script og html
BK2011 Utvikling av lette webapplikasjoner i java script og htmlGeodata AS
 
JavaZone 2006 - Gode grep når prosjektet blir stort
JavaZone 2006 -  Gode grep når prosjektet blir stortJavaZone 2006 -  Gode grep når prosjektet blir stort
JavaZone 2006 - Gode grep når prosjektet blir stortEirik Torske
 
Notifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verdenNotifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verdenJoar Øyen
 
GoOpen 2010: Jorgen Wahlberg
GoOpen 2010: Jorgen WahlbergGoOpen 2010: Jorgen Wahlberg
GoOpen 2010: Jorgen WahlbergFriprogsenteret
 
02b bank id apps og planer
02b bank id apps og planer02b bank id apps og planer
02b bank id apps og planerjoivha
 
Dataporten for grunnopplæringa - Workshop September 2017
Dataporten for grunnopplæringa - Workshop September 2017Dataporten for grunnopplæringa - Workshop September 2017
Dataporten for grunnopplæringa - Workshop September 2017Andreas Åkre Solberg
 
Frokostseminar mai 2010 solr open source cominvent as
Frokostseminar mai 2010 solr open source cominvent asFrokostseminar mai 2010 solr open source cominvent as
Frokostseminar mai 2010 solr open source cominvent asCominvent AS
 
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av AutentiseringsprosjektetIkt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektetleiftorger
 
Phonegap: apputvikling for webutviklere
Phonegap: apputvikling for webutviklerePhonegap: apputvikling for webutviklere
Phonegap: apputvikling for webutviklereAnders Brenna
 
BK2015 Web app builder for arcgis
BK2015 Web app builder for arcgisBK2015 Web app builder for arcgis
BK2015 Web app builder for arcgisGeodata AS
 
Utvikle applikasjoner og funksjoner med ArcGIS - BK2016
Utvikle applikasjoner og funksjoner med ArcGIS - BK2016Utvikle applikasjoner og funksjoner med ArcGIS - BK2016
Utvikle applikasjoner og funksjoner med ArcGIS - BK2016Geodata AS
 
Introduksjon til Spring Boot
Introduksjon til Spring BootIntroduksjon til Spring Boot
Introduksjon til Spring BootHenrik Schwarz
 
Hvordan få med deg gis’et ut av kontoret
Hvordan få med deg gis’et ut av kontoretHvordan få med deg gis’et ut av kontoret
Hvordan få med deg gis’et ut av kontoretGeodata AS
 

Similar to Firefox OS - og web som mobil plattform (20)

Progressive web applications i praksis
Progressive web applications i praksisProgressive web applications i praksis
Progressive web applications i praksis
 
The Client Strikes Back
The Client Strikes BackThe Client Strikes Back
The Client Strikes Back
 
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
Funksjonsrike applikasjoner med Geocortex Essentials - BK2016
 
Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016
Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016
Lag dine egne native applikasjoner med ArcGIS AppStudio - BK2016
 
Blazor - en kjapp intro
Blazor - en kjapp introBlazor - en kjapp intro
Blazor - en kjapp intro
 
BK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add insBK2011 Introduksjon til arc gis desktop add ins
BK2011 Introduksjon til arc gis desktop add ins
 
Kristiansand php meeting #1
Kristiansand php meeting #1Kristiansand php meeting #1
Kristiansand php meeting #1
 
BK2011 Utvikling av lette webapplikasjoner i java script og html
BK2011 Utvikling av lette webapplikasjoner i java script og htmlBK2011 Utvikling av lette webapplikasjoner i java script og html
BK2011 Utvikling av lette webapplikasjoner i java script og html
 
JavaZone 2006 - Gode grep når prosjektet blir stort
JavaZone 2006 -  Gode grep når prosjektet blir stortJavaZone 2006 -  Gode grep når prosjektet blir stort
JavaZone 2006 - Gode grep når prosjektet blir stort
 
Notifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verdenNotifikasjoner i en asynkron verden
Notifikasjoner i en asynkron verden
 
GoOpen 2010: Jorgen Wahlberg
GoOpen 2010: Jorgen WahlbergGoOpen 2010: Jorgen Wahlberg
GoOpen 2010: Jorgen Wahlberg
 
02b bank id apps og planer
02b bank id apps og planer02b bank id apps og planer
02b bank id apps og planer
 
Dataporten for grunnopplæringa - Workshop September 2017
Dataporten for grunnopplæringa - Workshop September 2017Dataporten for grunnopplæringa - Workshop September 2017
Dataporten for grunnopplæringa - Workshop September 2017
 
Frokostseminar mai 2010 solr open source cominvent as
Frokostseminar mai 2010 solr open source cominvent asFrokostseminar mai 2010 solr open source cominvent as
Frokostseminar mai 2010 solr open source cominvent as
 
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av AutentiseringsprosjektetIkt Fagforum - Presentasjon Av Autentiseringsprosjektet
Ikt Fagforum - Presentasjon Av Autentiseringsprosjektet
 
Phonegap: apputvikling for webutviklere
Phonegap: apputvikling for webutviklerePhonegap: apputvikling for webutviklere
Phonegap: apputvikling for webutviklere
 
BK2015 Web app builder for arcgis
BK2015 Web app builder for arcgisBK2015 Web app builder for arcgis
BK2015 Web app builder for arcgis
 
Utvikle applikasjoner og funksjoner med ArcGIS - BK2016
Utvikle applikasjoner og funksjoner med ArcGIS - BK2016Utvikle applikasjoner og funksjoner med ArcGIS - BK2016
Utvikle applikasjoner og funksjoner med ArcGIS - BK2016
 
Introduksjon til Spring Boot
Introduksjon til Spring BootIntroduksjon til Spring Boot
Introduksjon til Spring Boot
 
Hvordan få med deg gis’et ut av kontoret
Hvordan få med deg gis’et ut av kontoretHvordan få med deg gis’et ut av kontoret
Hvordan få med deg gis’et ut av kontoret
 

Firefox OS - og web som mobil plattform

  • 1. Firefox OS - og web som mobil plattform Håvard Wigtil Kantega AS JavaZone 2013
  • 2. Agenda ● Om Firefox OS ● Utviklingsmiljø ● Hva er en Firefox OS-app? ● API'er ● Look and feel ● Andre plattformer
  • 3. Historisk tilbakeblikk «Netscape would render Windows a poorly debugged set of device drivers» RT Marc Andreessen
  • 4. Om Mozilla «Our mission is to promote openness, innovation & opportunity on the Web» http://www.mozilla.org/en-US/mission/
  • 5. Hvorfor Firefox OS? ● Motivasjon: Et åpent Internet også for mobile enheter, hindre lukkede systemer ● Skal ikke konkurrere med Android og iOS på features (ennå!) ● Tett samarbeid med mobiloperatører ● Sikter seg inn mot «utviklende økonomier»
  • 6. Hva er Firefox OS? ● Operativsystem for mobile enheter ● Basert på web-teknologier ● HTML og JavaScript som eneste utviklingsplattform
  • 7. Hva er Firefox OS? Mobiltelefon Hardware Gonk Operativsystem: Linux-kjerne og hardware abstraction layer Gecko Runtime: API'er, JavaScript, parser, DOM («Firefox uten GUI») Gaia GUI: Systemapplikasjoner, 100% HTML, JavaScript og CSS FirefoxOS
  • 8. Et screenshot sier mer enn 1000 bullet points
  • 9. Status for Firefox OS ● Versjon 1.0 i februar i år ● Offisielle utviklertelefoner fra april ● Lansert i Spania og Polen i juli ● Lansert i Colombia og Venezuela i august, snart i Brasil ● Telenor skal lansere i Øst-Europa i høst ● Versjon 1.1 rett rundt hjørnet ● Planer om nye releaser 4 ganger i året
  • 10. Utviklingsmiljø på 1-2-3 ● Installér utvidelse i Firefox ● Pek simulator til HTML ● Kjør!
  • 11. Andre muligheter for utvikling ● Få telefoner tilgjengelig (i Norge) ennå ● Mulig å installere på enkelte Android-telefoner, f.eks. Galaxy S2 ● Firefox på Android
  • 12. Hva er en Firefox OS-app? ● Manifest-fil for metadata ● API for å installere ● Kan også brukes på desktop og Android { "version": "0.1", "name": "Features", "description": "Viser tilgjengelige API'er", "launch_path": "/index.html", "icons": { "128": "/img/icon-128.png" }, "developer": { "name": "Håvard Wigtil", "url": "http://www.kantega.no" } } https://developer.mozilla.org/en-US/docs/Web/Apps/Manifest https://developer.mozilla.org/en-US/docs/Web/Apps/JavaScript_API window.navigator.mozApps.install(manifestUrl);
  • 13. Sikkerhetsmodell ● Deling i kategorier av apps etter opprinnelse (hosted, installed, privileged, certified) ● Manifest med ønskede rettigheter ● Stiller krav til kode for privileged og certified apps (egen content security policy) https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Security/Security_model https://developer.mozilla.org/en-US/docs/Web/Apps/CSP
  • 14. API-tilgang etter type https://developer.mozilla.org/en-US/docs/WebAPI https://hacks.mozilla.org/2013/02/using-webapis-to-make-the-web-layer-more-capable/ Type API'er Installed Posisjon, orientering, online-status, batteristatus, betaling, vibrering, med mer Privileged Kontakter, lokalt filsystem, TCP sockets, XmlHttpRequest til vilkårlig host Certified Telefon, SMS, Bluetooth, strømstyring, nettverksinformasjon, etc
  • 15. Offline web ● «Hvem vil ha en telefon som alltid må være koblet på nett?» ● Application cache API (AppCache) kan brukes til å lagre innhold for en app offline ● Andre API'er for lokal lagring av brukerdata
  • 16. Eksempel på AppCache ● Attributt i html-elementet ● Listing for cache-fil https://developer.mozilla.org/en-US/docs/HTML/Using_the_application_cache <html manifest="features.appcache"> CACHE MANIFEST # v2 features.js features.css
  • 17. «Application cache is a doucebag» ● Filer hentes alltid fra cache ● Cache oppdateres kun når innholdet i manifest endres ● Cache oppdateres etter at side er lastet ● Hvis kun én fil ikke kan lastes ned vil cache ikke oppdateres http://alistapart.com/article/application-cache-is-a-douchebag
  • 18. Lokal lagring ● WebStorage for enkle brukerdata ● IndexedDB for lagring eller caching av komplekse brukerdata ● Også mulig med proprietær Device Storage-API som gir begrenset tilgang til filsystem https://developer.mozilla.org/en-US/docs/Web/Guide/DOM/Storage https://developer.mozilla.org/en-US/docs/IndexedDB https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage sessionStorage.setItem("jz13.schedule", JSON.stringify(schedule)); ... var schedule = JSON.parse(sessionStorage.getItem("jz13.schedule"));
  • 19. Manifest med rettigheter ● For å få tilgang til «priviligerte» API'er må rettigheter settes opp i manifest "type": "privileged", "permissions": { "geolocation": {}, "contacts": { "description": "Sjekke adressebok og legge inn kontakter", "access": "readcreate" }, "device-storage:pictures": { "access": "readwrite" }, "desktop-notification": {} }
  • 20. Eksempel: Posisjon ● En «gammel» API, støttet i de fleste nettlesere ● Også mulig å få beskjed ved endret posisjon function checkLocation() { navigator.geolocation.getCurrentPosition(positionCallback, positionErrorCallback, { enableHighAccuracy: true}); } function positionCallback(position) { var c = position.coords; if (c.longitude > 10.7528 && c.longitude < 10.7569 && c.latitude > 59.9121 && c.latitude < 59.9137) { document.getElementById("location_status").textContent = "Du er på JavaZone!"; } else { document.getElementById("location_status").textContent = "Kom deg på JavaZone!"; } } https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation
  • 21. Eksempel: Kontakt-API ● Krever å være installert fra en app store for tilgang («privileged») ● Eksempel: Hente ut en kontakt var options = { filterValue : "93846468", filterBy : ["tel"], filterOp : "contains", filterLimit : 1 }; var search = navigator.mozContacts.find(options); search.onsuccess = function() { var status = document.getElementById("address_book_status"); if (search.result.length === 1) { status.textContent = "Nummer finnes i adressebok"; } else { status.textContent = "Nummer ikke i adressebok"; } }; https://developer.mozilla.org/en-US/docs/WebAPI/Contacts
  • 22. Eksempel: Lokalt filsystem ● Lese fra «bilder»-mappe var pics = navigator.getDeviceStorage('pictures'); if (pics === null) { document.getElementById("thumbnails").textContent = "Ikke støtte for bilder"; return; } var cursor = pics.enumerate(); cursor.onsuccess = function () { var file = this.result; var img = document.createElement("img"); img.height = 60; img.src = window.URL.createObjectURL(file); document.getElementById("thumbnails").appendChild(img); if (!this.done) { this.continue(); } }; https://developer.mozilla.org/en-US/docs/WebAPI/Device_Storage
  • 23. Eksempel: Systemvarsler ● Meldinger i «varslingsområde», dvs. øverst på skjermen ● Nylig standardisert API, Firefox OS har ikke siste versjon ennå https://developer.mozilla.org/en-US/docs/Web/API/notification if ("Notification" in window) { new Notification("'API demo' har startet",  {"body": "Systemvarsler med ny API"}); } else if ("mozNotification" in navigator) { var notification = navigator.mozNotification.createNotification("'API demo' har startet", "Systemvarsler med gammel API"); notification.show(); } else { alert("Ingen støtte for systemvarsler"); }
  • 25. Web activities ● Lar applikasjoner bruke systemressurser på en sikker måte ● Applikasjoner kan registrere seg for å tilby aktiviteter ● GUI for å velge mest egnede app
  • 26. Eksempel: Bilde med web activities ● Få bilde fra kamera eller filsystem ● Bruker velger først kilde var pick = new MozActivity({name: "pick", data: {type: ["image/*"]}}); pick.onsuccess = function () { var img = document.createElement("img"); img.src = window.URL.createObjectURL(this.result.blob); var imagePresenter = document.getElementById("image_presenter"); imagePresenter.appendChild(img); }; pick.onerror = function() { alert("Bilde ikke valgt: " + pick.error.name); }
  • 27. Betaling ● Mozillas Marketplace med «standard» betingelser (tar 30%) ● Lagt opp til å kunne ha mange app stores ● Store telefonoperatører vil kanskje ha egen app store
  • 28. In-app betaling ● Egen proprietær JavaScript-API for in-app betaling ● Krever en server for app-utvikler ● Kan også brukes på Firefox for Android https://developer.mozilla.org/en-US/docs/Web/Apps/Publishing/In-app_payments
  • 29. Eksempelflyt for in-app betaling 1. App tar kontakt med server og bestiller «vare», får et signert JSON Web Token (JWT) tilbake 2. App kaller JavaScript-API med JWT som parameter 3. API tar dialog med betalingsformidler, i eget GUI 4. Betalingsformidler gir beskjed til server om gjennomført betaling 5. App poller server for å få beskjed om gjennomført betaling
  • 30. Look and feel ● Få faste rammer ● Kan gjøre hva du vil med HTML og CSS ● Inger felles ressurser for app'er (men system-app'er deler)
  • 31. Building Blocks ● Eget nettsted for å designe apps med integrert utseende ● Maler for GUI-elementer og transisjoner ● Kopiere ressurser og legge inn i egen app ● Demo-app finnes også på Mozilla marketplace
  • 32. Kodeeksempel med «Building Blocks» <section role="region" id="buttons" data-position="right"> <header class="fixed"> <a id="btn-buttons-back" href="#"><span class="icon icon-back">back</span></a> <h1>Buttons</h1> </header> <article class="content scrollable header"> <header><h2>Normal</h2></header> <div> <button>Default</button> <button class="recommend">Recommend</button> <button class="danger">Danger</button> </div>
  • 33. API på andre nettlesere http://mobilehtml5.org/ API Firefox OS FF Android FF Desktop Android iOS Win Phone Posisjon ✔ ✔ ✔ ✔ ✔ ✔ Kontakter ✔ Varsler ✔ ✔ ✔ AppCache ✔ ✔ ✔ ✔ ✔ ✔ WebStorage ✔ ✔ ✔ ✔ ✔ ✔ Beveg.sensor ✔ ✔ ✔ ✔ ✔ IndexedDB ✔ ✔ ✔ ✔ ✔ Betaling ✔ ✔
  • 34. Andre web-baserte plattformer ● Blackberry 10 ● Tizen ● Ubuntu Touch ● Chrome Apps ● Windows 8 http://developer.chrome.com/apps/about_apps.html
  • 35. Oppsummering ● Du trenger lite ekstra for en Firefox OS-app ● Mobilt web har muligheter ● Økende antall plattformer krever en strategi
  • 36. Pekere til eksempler ● Mange gode eksempler på nett ● Mozilla tilbyr også applikasjonsmaler ● To enkle eksempler på Kantega Github https://github.com/robnyman/Firefox-OS-Boilerplate-App https://developer.mozilla.org/en-US/docs/Web/Apps/App_templates https://github.com/kantega/firefoxos-examples
  • 37. Spørsmål? Presentasjon på slideshare.net/havwig/ Eksempler på github.com/kantega/ Eller kom til Kantegas stand etterpå.