@mepartoconmigo
Working and Loving Firefox OS
a framework for creating ambitious web applications
Firefox OS: the web is the platform
the web is ready for do magic things
at mozilla we believe the web is what you need in any device
universal access to the web from the web
lots of partners and devices
First Firefox OS phone under 33$
Firefox OS Flame
Developer's reference device
What do I have to learn ?
What do I need to create a Web App?
just a manifest file!
a ... what?
{
"version": "1",
"name": "My Web App",
"launch_path": "/index.html",
"description": "This is my fantastic web application that runs everywere",
"icons": {
"64": "/images/logo64.png",
"128": "/images/logo128.png"
},
"developer": {
"name": "Open Web Lover",
"url": "http://mozilla.com"
},
"installs_allowed_from": ["*"],
"default_locale": "en",
"permissions": {
"desktop-notification": {
"description" : "To show notifications"
},
"geolocation": {
"description" : "Marking out user location"
}
}
}
a simple json file called manifest.json
We are defining new sets of
Web APIs
and we are working with the community to standardise them
var call = navigator.mozTelephony.dial('555-333-222-666');
call.onconnected = function onConnected(evt) {
console.log('Better start to speak now');
};
call.ondisconnected = function onDisconnected(evt) {
console.log('Call too long, dude, your bill is getting a bit crazy');
};
call.onerror = function onError(evt) {
console.log('This is embarrassing');
};
Making a call with Telephony API
var sms = navigator.mozMobileMessage.send('555-333-222-666',
"Mum I'm OK, I finished all the vegies");
sms.onsucces = function onSuccess(evt) {
console.log('Now your mum can go to sleep happy');
};
sms.onerror = function onError(evt) {
console.log('Problems ahead');
};
Sending a SMS to your mum
window.addEventListener('userproximity', function(event) {
if (event.near) {
// let's power off the screen
navigator.mozPower.screenEnabled = false;
} else {
// Otherwise, let's power on the screen
navigator.mozPower.screenEnabled = true;
}
});
Don't hang out when you get your face close to the screen
var contactData = {
givenName: ["John"],
familyName: ["Doe"],
nickname: ["No kidding"]
};
// save the new contact
var saving = navigator.mozContacts.save(person);
saving.onsuccess = function() {
console.log('new contact saved');
};
Play with your contacts list
We have the tools
"permissions": {
"desktop-notification": {
"description" : "To show notifications"
},
"geolocation": {
"description" : "Marking out user location"
}
}
Type web: Traditional web content
Type privileged: New apis and features
privileged apps are reviewed by mozilla and can be distributed only from the mozilla marketplace
Designed to give user total control over privacy and data.
var activity = new MozActivity({
name: 'pick',
data: {
type: 'webcontacts/contact'
}
});
activity.onsuccess = function onSuccess() {
var contact = this.result;
console.log(contact.name);
};
or you could let other apps use yours
window.navigator.mozSetMessageHandler('activity', function activityHandler(activity) {
activity.postSuccess({contact: {
'name': 'Pedro'
}});
});
<gaia-header id='details-view-header' action="back">
<button id="edit-contact-button"
role="menuitem"
data-icon="edit-contact"
data-l10n-id="edit"></button>
</gaia-header>
Debug the apps with the tools that you know
Check the performance of your app
Even more tools
It will run in your android phone too!
var request = navigator.mozApps.install("http://mywebapp.com/manifest.webapp");
request.onsuccess = function() {
// great - display a message, or redirect to a launch page
};
request.onerror = function() {
// whoops - this.error.name has details
};
Create your own install button from your web page
Precompile your Handlebars templates
npm install -g ember-precompile
ember-precompile template... [-f OUTPUT_FILE]
Avoid the use of inline scripting
or ... dynamically load them ... but
Fetch data from the outside world
"permissions": {
"systemXHR":{}
}
You need to ask for an extra permission in your manifest.json and ...
jQuery helper
$.ajaxSetup( {
xhr: function() {
return new window.XMLHttpRequest( {
mozSystem: true
} );
}
} );
Tell jQuery that you want to build XMLHttpRequest object with an specific config option