Go Mobile! 
! 
with
Christian Grobmeier 
www.grobmeier.de 
@grobmeier 
Freelancer and Entrepreneur 
Wears his own shirts 
Writes Books 
Tracks time 
Hires People!
PhoneGap? 
Apache Cordova? 
!
HTML5 
JavaScript 
CSS 
Plugins 
Webview
PLATFORMS? 
+ BlackBerry 
+ WebOS 
+ Symbian 
+ Bada 
+ QT 
+ Tizen 
+ OS X 
+ Windows
Plugins 
Accelerometer 
Camera 
Compass 
Contacts 
File 
Geolocation 
Media 
Network 
Notifications 
Storage
More? 
1. Create a JavaScript function 
2. Develop a native plugin 
extends CordovaPlugin 
window.echo = function(str, callback) { 
cordova.exec(callback, function(err) { 
callback('Nothing to echo.'); 
}, "Echo", "echo", [str]); 
};
Getting 
started
Editor 
-SDK 
on build 
path
cordova 
Starting from scratch 
create 
places 
com.opendi.places 
Places 
cordova 
platform 
add 
android 
cordova 
build 
android 
cordova 
emulate 
android
Testing in Chrome 
$> 
cordova 
serve 
! 
Static 
file 
server 
running 
on 
port 
8000 
(i.e. 
http://localhost:8000) 
CTRL 
+ 
C 
to 
shut 
down
Apache 
RIPPLE
FRIENDS 4 EVER? 
Roadcrew.js
Your Code 
Plugins 
Webview
<html> 
<body> 
<div id="map"></div> 
<script type="text/javascript" 
src="cordova.js"></script> 
<script type="text/javascript" 
src="js/jquery-2.1.1.min.js"></script> 
<script type="text/javascript" 
src="js/mapbox-2.1.2.js"></script> 
<script type="text/javascript" 
src="js/app.js"></script> 
</body> 
</html> 
Single Page Apps
Single Page Apps 2:30 
<body> 
<div id=“page1“> 
<a href=“#page2“>... 
</div> 
<div id=“page2“> 
<a href=“#page3“>... 
</div> 
<div id=“page3“> 
<a href=“#page1“>... 
</div> 
</body> 
2:30 
2:30 
with 
Roadcrew.js
Anatomy 
of a 
! 
Click
<body> 
<div id="p1" 
class="start page"> 
<button id="refresh"> 
Refresh 
</button> 
<ul id="list"></ul> 
</div> 
</body> 
2:30 
Refresh
var app = { 
initialize: function() { 
document.addEventListener( 
'deviceready', 
this.onDeviceReady, false); 
}, 
onDeviceReady: function() { 
// Your Code 
} 
}; 
app.initialize();
2:30 
In onDeviceReady 
Refresh $('#refresh').click( 
function() { 
app.refresh(); 
}); 
Consider Touch 
Events!
2:30 
Refresh var app = { 
refresh: function() { 
$.get("data.json", 
function(d) { 
$("#list").html(d); 
}); 
} 
} 
Ripple 
Wave 
... 
Still JS 
Beware: Caching!
Camera 
cordova plugin add org.apache.cordova.camera
var options = { 
Camera 
quality: 50, 
destinationType: 
Camera.DestinationType.FILE_URI 
} 
function cb(uri) { 
$('#img').attr('src ', uri); 
} 
function fail(message) { 
alert(message); 
} 
navigator.camera.getPicture(cb, fail, options);
cordova plugin add org.apache.cordova.geolocation 
navigator.geolocation.getCurrentPosition( 
function(pos) { 
view.html( 
pos.coords.latitude + ',' + 
pos.coords.longitude); 
}, function (error) { 
console.log(error.message); 
}); 
Geolocation 
Ey! That’s HTML5!!
Ship it!
Icons 
<platform name="android"> 
<icon src="res/android/ldpi.png" density="ldpi" /> 
<icon src="res/android/mdpi.png" density="mdpi" /> 
<icon src="res/android/hdpi.png" density="hdpi" /> 
<icon src="res/android/xhdpi.png" 
density="xhdpi" /> 
</platform> 
config.xml:
$> ant reSlHeaIPs!e 
xcode
SHIP! 
build. 
phonegap. 
com 
Service 
by Adobe
Quirks?
Write once, 
debug everywhere. 
! 
A billion browsers.
SHIP! 
Performance?
SHIP! 
Design it yourself. 
! 
It’s just a container.
JavaScript. 
! 
Is it hard?
Building can be hard.
Thanks! 
:-) 
Christian Grobmeier 
! 
www.grobmeier.de 
@grobmeier
Image Credits 
! 
Oil platform: NOAA Photolib (Flickr) 
Plugs: Brad.K (stopbits@Flickr) 
Car: Juan Alvaro (Flickr) 
Zebra: flowcomm (Flickr) 
Ship: eamoncurry123 (Flickr) 
Ant: sanchom (Flickr) 
Broken Tube: L. Marie (Flickr)

Go Mobile with Apache Cordova, Zagreb 2014

  • 1.
  • 2.
    Christian Grobmeier www.grobmeier.de @grobmeier Freelancer and Entrepreneur Wears his own shirts Writes Books Tracks time Hires People!
  • 3.
  • 4.
    HTML5 JavaScript CSS Plugins Webview
  • 5.
    PLATFORMS? + BlackBerry + WebOS + Symbian + Bada + QT + Tizen + OS X + Windows
  • 6.
    Plugins Accelerometer Camera Compass Contacts File Geolocation Media Network Notifications Storage
  • 7.
    More? 1. Createa JavaScript function 2. Develop a native plugin extends CordovaPlugin window.echo = function(str, callback) { cordova.exec(callback, function(err) { callback('Nothing to echo.'); }, "Echo", "echo", [str]); };
  • 8.
  • 9.
    Editor -SDK onbuild path
  • 10.
    cordova Starting fromscratch create places com.opendi.places Places cordova platform add android cordova build android cordova emulate android
  • 12.
    Testing in Chrome $> cordova serve ! Static file server running on port 8000 (i.e. http://localhost:8000) CTRL + C to shut down
  • 14.
  • 15.
    FRIENDS 4 EVER? Roadcrew.js
  • 16.
  • 17.
    <html> <body> <divid="map"></div> <script type="text/javascript" src="cordova.js"></script> <script type="text/javascript" src="js/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="js/mapbox-2.1.2.js"></script> <script type="text/javascript" src="js/app.js"></script> </body> </html> Single Page Apps
  • 18.
    Single Page Apps2:30 <body> <div id=“page1“> <a href=“#page2“>... </div> <div id=“page2“> <a href=“#page3“>... </div> <div id=“page3“> <a href=“#page1“>... </div> </body> 2:30 2:30 with Roadcrew.js
  • 19.
    Anatomy of a ! Click
  • 20.
    <body> <div id="p1" class="start page"> <button id="refresh"> Refresh </button> <ul id="list"></ul> </div> </body> 2:30 Refresh
  • 21.
    var app ={ initialize: function() { document.addEventListener( 'deviceready', this.onDeviceReady, false); }, onDeviceReady: function() { // Your Code } }; app.initialize();
  • 22.
    2:30 In onDeviceReady Refresh $('#refresh').click( function() { app.refresh(); }); Consider Touch Events!
  • 23.
    2:30 Refresh varapp = { refresh: function() { $.get("data.json", function(d) { $("#list").html(d); }); } } Ripple Wave ... Still JS Beware: Caching!
  • 24.
    Camera cordova pluginadd org.apache.cordova.camera
  • 25.
    var options ={ Camera quality: 50, destinationType: Camera.DestinationType.FILE_URI } function cb(uri) { $('#img').attr('src ', uri); } function fail(message) { alert(message); } navigator.camera.getPicture(cb, fail, options);
  • 26.
    cordova plugin addorg.apache.cordova.geolocation navigator.geolocation.getCurrentPosition( function(pos) { view.html( pos.coords.latitude + ',' + pos.coords.longitude); }, function (error) { console.log(error.message); }); Geolocation Ey! That’s HTML5!!
  • 27.
  • 28.
    Icons <platform name="android"> <icon src="res/android/ldpi.png" density="ldpi" /> <icon src="res/android/mdpi.png" density="mdpi" /> <icon src="res/android/hdpi.png" density="hdpi" /> <icon src="res/android/xhdpi.png" density="xhdpi" /> </platform> config.xml:
  • 29.
  • 30.
    SHIP! build. phonegap. com Service by Adobe
  • 31.
  • 32.
    Write once, debugeverywhere. ! A billion browsers.
  • 33.
  • 34.
    SHIP! Design ityourself. ! It’s just a container.
  • 35.
  • 36.
  • 37.
    Thanks! :-) ChristianGrobmeier ! www.grobmeier.de @grobmeier
  • 38.
    Image Credits ! Oil platform: NOAA Photolib (Flickr) Plugs: Brad.K (stopbits@Flickr) Car: Juan Alvaro (Flickr) Zebra: flowcomm (Flickr) Ship: eamoncurry123 (Flickr) Ant: sanchom (Flickr) Broken Tube: L. Marie (Flickr)