Firefox OS Workshop @ Serbia & Montenegro - Training

78
Firefox OS workshop Part 1I: Getting your first app up & running Jan Jongboom

Transcript of Firefox OS Workshop @ Serbia & Montenegro - Training

Page 1: Firefox OS Workshop @ Serbia & Montenegro - Training

Firefox OS workshopPart 1I: Getting your first app up & running

Jan Jongboom

Page 2: Firefox OS Workshop @ Serbia & Montenegro - Training

buildingfirefoxos.com

Page 3: Firefox OS Workshop @ Serbia & Montenegro - Training

UI elements

Page 4: Firefox OS Workshop @ Serbia & Montenegro - Training

ListView

Page 5: Firefox OS Workshop @ Serbia & Montenegro - Training

ListView

Page 6: Firefox OS Workshop @ Serbia & Montenegro - Training

Headers

Page 7: Firefox OS Workshop @ Serbia & Montenegro - Training

Headers

Page 8: Firefox OS Workshop @ Serbia & Montenegro - Training

Building Blocks

• Plain HTML / CSS

• Customizable like any HTML element

• Cross platform (also iOS, Android)

Page 9: Firefox OS Workshop @ Serbia & Montenegro - Training

Data binding with AngularJS

• AngularJS is a modern javascript framework made by Google

• Does proper MVC in the browser

• Amazing data binding: no dealing with DOM

Page 10: Firefox OS Workshop @ Serbia & Montenegro - Training

Populate ListView

views/list.html js/controllers/list.js

Page 11: Firefox OS Workshop @ Serbia & Montenegro - Training

Populate ListView

views/list.html js/controllers/list.js

Page 12: Firefox OS Workshop @ Serbia & Montenegro - Training

Populate ListView

views/list.html js/controllers/list.js

Page 13: Firefox OS Workshop @ Serbia & Montenegro - Training

Controller boilerplate

1. Get reference to our app

2. Say we want to add controller with name

3. Dependency injection

4. Controller constructor

5. Logic

js/controllers/list.js

Page 14: Firefox OS Workshop @ Serbia & Montenegro - Training

Controller boilerplate

1. Get reference to our app

2. Say we want to add controller with name

3. Dependency injection

4. Controller constructor

5. Logic

js/controllers/list.js

Page 15: Firefox OS Workshop @ Serbia & Montenegro - Training

Controller boilerplate

1. Get reference to our app

2. Say we want to add controller with name

3. Dependency injection

4. Controller constructor

5. Logic

js/controllers/list.js

Page 16: Firefox OS Workshop @ Serbia & Montenegro - Training

Controller boilerplate

1. Get reference to our app

2. Say we want to add controller with name

3. Dependency injection

4. Controller constructor

5. Logic

js/controllers/list.js

Page 17: Firefox OS Workshop @ Serbia & Montenegro - Training

Controller boilerplate

1. Get reference to our app

2. Say we want to add controller with name

3. Dependency injection

4. Controller constructor

5. Logic

js/controllers/list.js

Page 18: Firefox OS Workshop @ Serbia & Montenegro - Training

Controller boilerplate

1. Get reference to our app

2. Say we want to add controller with name

3. Dependency injection

4. Controller constructor

5. Logic

js/controllers/list.js

Page 19: Firefox OS Workshop @ Serbia & Montenegro - Training

Add some magic

• Consume $timeout service

• Tell DI framework

• Use the service

js/controllers/list.js

Page 20: Firefox OS Workshop @ Serbia & Montenegro - Training

Add some magic

• Consume $timeout service

• Tell DI framework

• Use the service

js/controllers/list.js

Page 21: Firefox OS Workshop @ Serbia & Montenegro - Training

Add some magic

• Consume $timeout service

• Tell DI framework

• Use the service

js/controllers/list.js

Page 22: Firefox OS Workshop @ Serbia & Montenegro - Training

Run it!

js/controllers/list.js

Page 23: Firefox OS Workshop @ Serbia & Montenegro - Training

Testing the app

• Get Firefox

• Firefox OS Simulator

(https://addons.mozilla.org/En-us/firefox/addon/firefox-os-simulator/)

Page 24: Firefox OS Workshop @ Serbia & Montenegro - Training
Page 25: Firefox OS Workshop @ Serbia & Montenegro - Training

Select www/manifest.webapp

Page 26: Firefox OS Workshop @ Serbia & Montenegro - Training

Select www/manifest.webapp

Page 27: Firefox OS Workshop @ Serbia & Montenegro - Training

github.com / comoyo / ffos-list-detail

Page 28: Firefox OS Workshop @ Serbia & Montenegro - Training

github.com / comoyo / ffos-list-detail

Page 29: Firefox OS Workshop @ Serbia & Montenegro - Training
Page 30: Firefox OS Workshop @ Serbia & Montenegro - Training
Page 31: Firefox OS Workshop @ Serbia & Montenegro - Training

Get out your phone• Settings > Device Information > More

information > Developer

• Enable ‘Remote debugging’

Page 32: Firefox OS Workshop @ Serbia & Montenegro - Training

Firefox OS workshopPart III: Consuming third party data sources

Jan Jongboom

Page 33: Firefox OS Workshop @ Serbia & Montenegro - Training

So what do we have?

• An app with a list / detail view

• Running on a phone

• Data comes from a static list (js/services/database.js)

Page 34: Firefox OS Workshop @ Serbia & Montenegro - Training

Third party data

• Data comes from a server

• Example: CNN NewsFlash

• Here’s an API that spits out JSON

http://scrapey2.herokuapp.com/c/jan/?url=http://api.cnn.com

Page 35: Firefox OS Workshop @ Serbia & Montenegro - Training
Page 36: Firefox OS Workshop @ Serbia & Montenegro - Training

HTTP requests

• Consume HTTP service• Call http.get(url, options)• Returns request object

Page 37: Firefox OS Workshop @ Serbia & Montenegro - Training

HTTP requests

• Consume HTTP service• Call http.get(url, options)• Returns request object

Page 38: Firefox OS Workshop @ Serbia & Montenegro - Training

HTTP requests

• Consume HTTP service• Call http.get(url, options)• Returns request object

Page 39: Firefox OS Workshop @ Serbia & Montenegro - Training

HTTP requests

• Consume HTTP service• Call http.get(url, options)• Returns request object

Page 40: Firefox OS Workshop @ Serbia & Montenegro - Training

Response as data source

js/controllers/list.js

Page 41: Firefox OS Workshop @ Serbia & Montenegro - Training

Adding a nice image

• Look up ‘Lists’ on buildingfirefoxos.com

• And we find information on images as well

Page 42: Firefox OS Workshop @ Serbia & Montenegro - Training

Databinding images!

views/list.html

Page 43: Firefox OS Workshop @ Serbia & Montenegro - Training

Routing detail pagejs/app.js

js/controllers/detail.js

Page 44: Firefox OS Workshop @ Serbia & Montenegro - Training

Routing detail pagejs/app.js

js/controllers/detail.js

Page 45: Firefox OS Workshop @ Serbia & Montenegro - Training

Routing detail pagejs/app.js

js/controllers/detail.js

Page 46: Firefox OS Workshop @ Serbia & Montenegro - Training

Linking to another route

$navigate.go(url, effect)

Page 47: Firefox OS Workshop @ Serbia & Montenegro - Training

CNN newsfeed: no nice IDs:-(

Page 48: Firefox OS Workshop @ Serbia & Montenegro - Training

Workaround

• /some/url/@*Ddqdhq7/////~~21721

• /some/url/?whu=@*Ddqdhq7/////~~21721

• Leverage search

Page 49: Firefox OS Workshop @ Serbia & Montenegro - Training

views/list.html

js/controllers/detail.js

Page 50: Firefox OS Workshop @ Serbia & Montenegro - Training

Loading detail info

Same pattern as with the list

js/controllers/detail.js

Page 51: Firefox OS Workshop @ Serbia & Montenegro - Training

Super simple template

Page 52: Firefox OS Workshop @ Serbia & Montenegro - Training

Firefox OS workshopPart IV: Taking advantage of the phone

Jan Jongboom

Page 53: Firefox OS Workshop @ Serbia & Montenegro - Training

Phone has sensors

• Accelerometer

• Vibration

• GPS

• Ambient light levels

• Proximity

• Etc. etc. etc.

Page 54: Firefox OS Workshop @ Serbia & Montenegro - Training

Vibration

Super easy detection

Page 55: Firefox OS Workshop @ Serbia & Montenegro - Training

Implementing cool stuff

• Shake to refresh

• Feel free to choose something else...

• https://developer.mozilla.org

Page 56: Firefox OS Workshop @ Serbia & Montenegro - Training

Shake to refresh

• Detect shake

• Let the user know with a vibration

• Refresh news list

Page 57: Firefox OS Workshop @ Serbia & Montenegro - Training

Shake detection service

• Detect shake

• Emit event

• Place in js/services/ directory

• http://bit.ly/ffos-shake

Page 58: Firefox OS Workshop @ Serbia & Montenegro - Training

js/services/shaking.js

Monitor accelerometer

Check position every 150 ms.

Shaken enough? Broadcast event!

Page 59: Firefox OS Workshop @ Serbia & Montenegro - Training

Bootstrapping

• We use RequireJS

• Explicitly load shaking service

js/main.js

Page 60: Firefox OS Workshop @ Serbia & Montenegro - Training

React on shake

js/controllers/list.js

Test it by pushing to device!

Page 62: Firefox OS Workshop @ Serbia & Montenegro - Training

Firefox OS workshopPart V: Offline

Jan Jongboom

Page 63: Firefox OS Workshop @ Serbia & Montenegro - Training

Offline

• Internet connections are unreliable

• Roaming is expensive

• Web != online

Page 64: Firefox OS Workshop @ Serbia & Montenegro - Training

Two types of resources

• Application resources

• HTML / CSS / javascript / assets

• Data

• E.g. List of news items

Page 65: Firefox OS Workshop @ Serbia & Montenegro - Training

Application assets

• Packaged application

• ZIP app and submit to marketplace

• Pro: super easy

• Con: Hard to update, higher barrier to try app

Page 66: Firefox OS Workshop @ Serbia & Montenegro - Training

Application assets

• Hosted application with appcache

• Pro: just a website, updating works like any site, simple development cycle

• Con: discoverability, user has to load the app once from internet connection to cache assets

Page 67: Firefox OS Workshop @ Serbia & Montenegro - Training

Depends on the app

Page 68: Firefox OS Workshop @ Serbia & Montenegro - Training

Appcache

Page 69: Firefox OS Workshop @ Serbia & Montenegro - Training

App caching our app

• Specify HTML / CSS / JS

• Extra assets (images?)

• Prefer online

manifest.appcache

Page 70: Firefox OS Workshop @ Serbia & Montenegro - Training

App caching our app

• Specify HTML / CSS / JS

• Extra assets (images?)

• Prefer online

manifest.appcache

Page 71: Firefox OS Workshop @ Serbia & Montenegro - Training

App caching our app

• Specify HTML / CSS / JS

• Extra assets (images?)

• Prefer online

manifest.appcache

Page 72: Firefox OS Workshop @ Serbia & Montenegro - Training

Combine JS / CSS

• Faster (less HTTP requests)

• Appcache is way easier (no manual work)

Page 73: Firefox OS Workshop @ Serbia & Montenegro - Training

Manifest file• Specify release version to be used

• Not necessary with built in node.js server

• Change launch_path > index.release.html

manifest.webapp

Page 74: Firefox OS Workshop @ Serbia & Montenegro - Training

Using Chrome?

chrome://appcache-internals/

And clear appcache for your app (doesn’t respect prefer-online)

Page 75: Firefox OS Workshop @ Serbia & Montenegro - Training

Third party requests

• http.get has idbCache option

• Specify cache key, expiration time

• No internet connection? Always from cache!

js/controllers/list.js

Page 76: Firefox OS Workshop @ Serbia & Montenegro - Training

Also use to precache

• Load all stories on index

• Way faster navigation

• Offline also available!

• Make sure to also use the same cache key in detail.js !

js/controllers/list.js

Page 77: Firefox OS Workshop @ Serbia & Montenegro - Training

Caching resources

• Browser does caching

• Have to have proper expiration headers

• No additional work

js/controllers/list.js

Page 78: Firefox OS Workshop @ Serbia & Montenegro - Training

Twitter: @janjongboom

slideshare.net/janjongboom