Firefox OS
Webapps for Your Mobile Phone
http://anders.janmyr.com
@andersjanmyr
anders.janmyr@jayway.com
The First
Next
Home Screen
Phone App
Contacts
Music Player
Notifications
Games
Architecture
Architecture
Responsive Design
App Manifest
{
"name": "FxOS Weather Local",
"description": "A Firefox OS Weather App",
"launch_path": "/",
"icons": {
"128": "/icons/128x128.png"
},
"default_locale": "en",
"permissions": {
"geolocation": {
"description": "Access to geolocation"
}
}
}
# App Manifest
activities, appcache_path, chrome, csp, default_locale, *description*,
developer, fullscreen, *icons*, installs_allowed_from, launch_path,
locales, messages, *name*, orientation, origin, permissions, redirects,
type, version
Installation API
navigator.mozApps.install()
navigator.mozApps.installPackage()
navigator.mozApps.getSelf()
navigator.mozApps.getInstalled()
navigator.mozApps.checkInstalled()
Installation API
var request = window.navigator.mozApps.install(manifestUrl);
request.onsuccess = function () {
// Save the App object that is returned
var appRecord = this.result;
alert('Installation successful!');
};
request.onerror = function () {
// Display the error information from the DOMError object
alert('Install failed, error: ' + this.error.name);
};
App Cache
CACHE MANIFEST
# DATE 20130929_174017
CACHE:
index.html
css/main.css
css/images/icons-36-white.png
lib/word-maestro.js
...
NETWORK:
*
FALLBACK:
/upload upload-offline.html
App Cache
<html manifest="wordmaestro.appcache">
Geolocation
// Getting the current location
navigator.geolocation.getCurrentPosition(function(position) {
do_something(position.coords.latitude, position.coords.longitude);
});
// Watching the location
var watchID = navigator.geolocation.watchPosition(function(position) {
do_something(position.coords.latitude, position.coords.longitude);
});
Device Storage
var pics = navigator.getDeviceStorage('pictures');
// Let's browse all the images available
var cursor = pics.enumerate();
cursor.onsuccess = function () {
var file = this.result;
// Once we found a file we check if there is other results
if (!this.done) {
this.continue(); // Next result
}
}
cursor.onerror = function () { // Handle error
}
WebSMS
// Simple SMS send
var request = navigator.mozMobileMessage.send(number, message);
// Getting a single message
MozMobileMessageManager.getMessage()
WebMMS
var message = {
receivers: numbers,
subject: "Pic from my wedding"
smil: '<smil><body><par><img src="wedding.jpg" />' +
'<text src="txt" />/<par></body></smil>',
attachments: [ { location: 'txt',
content : new Blob(['Me and my wife'], {type: 'text/plain'})
}, {
location: 'wedding.jpg', content : file
} ] }
// Send the message
navigator.mozMobileMessage.sendMMS(message);
Web Telephony
// Telephony object
var tel = navigator.mozTelephony;
// Check if the phone is muted (read/write property)
console.log(tel.muted);
// Check if the speaker is enabled (read/write property)
console.log(tel.speakerEnabled);
Web Telephony
// Place a call
var call = tel.dial("123456789");
// Above options as direct events
call.onconnected = function () {
// Call was connected
};
call.ondisconnected = function () {
// Call was disconnected
};
// Hang up call
call.hangUp();
Permissions
CSP
Content Security Policy (CSP)
"default-src *; script-src 'self';
object-src 'none'; style-src 'self'"
Questions
http://anders.janmyr.com
@andersjanmyr
anders.janmyr@jayway.com
## Resources
* http://andersjanmyr.github.io/firefoxos-webapps-for-your-mobile-phone
* http://goo.gl/omVvJj