2. Who am I ?
Engin Yağız Hatay
yagizhatay@gmail.com
• Computer Engineer
• Full-Time software developer
• Hybrid application developer
3. Outline
• Ways of building an App…
• Hybrid Application ?
• Pros & Cons (Native/Web/Hybrid Apps)
• JS – Native Communication & Websocket
• Hybrid Frameworks / PhoneGap
• How to debug ?
• Who tried ?
• The Future
4. Ways of building an App…
Native Web Hybrid
Application Application Application
Java, HTML 5, JS-Native
Objective-C, JS, Communication
C# … CSS 3 …
5. Hybrid Application ?
• Developed with HTML5
wrapped in a native
container.
• No platform-specific
languages like Objective-C
or Java.
• Can appear on app-stores
• Ability to access to native
capabilities (camera,
microphone, contact list,
or notification system)
6. Pros & Cons – (Native Application)
• Better performance • More expensive to build, even for
• Snappier /Smooth animations, a single platform.
transitions, and faster load times. • AppStore submission/Approval
• Can store more data offline Process
• Can be featured and searched for • You must share a percentage with
in the app store the store (30% for Apple’s App
• Full access to the device’s Store, including in-app
hardware and OS features purchases).
• The App Store handles purchase • App updates must go through a
transactions on your behalf new approval process each time.
7. Pros & Cons – (Web Application)
• A single codebase which can be accessed • Interpreted code (opposed to
by any browser-enabled mobile device.
compiled code for native apps)
• HTML/CSS/Javascript : Easier to learn than
native languages like Objective-C or Java. • Don’t have full access to all the
• Performance issues are becoming less of methods exposed by the device’s
an issue as mobile browsers become operating system
faster and their Javascript engines keep
improving
• Can’t be found on the app store.
• No approval process needed, and updates • If you are looking to generate
to the app can happen instantaneously revenue, it’s up to you to build a
• No revenue sharing with an app store commerce model.
8. Pros & Cons – (Hybrid Application)
• Market your app in each of the • Still subject to the store’s
major mobile app stores. approval process and revenue
• Gives you APIs to access some, if sharing. No instant updating.
not all, of the features locked out • The app’s performance is still
of the browser, such as camera, dependant on the device’s
compass, contacts. Purchases are browser capabilities.
managed by the App Store.
9. JS – Native Communication
• “native bridge”
• Different in every platform
• Accomplished via WebView object on Android
• Using Websocket(HTML5) is another
approach.
(Websocket Server : native / Websocket Client : web)
10. JS - Native Comm. On Android
Calling native from js
//Make sure that javascript is enabled in webview
WebView webView = new WebView();
webView.getSettings().setJavaScriptEnabled(true);
//Control android from javascript
//addJavascriptInterface method adds androidControl
//variable into js
webView.addJavascriptInterface(
new AndroidController(),
"androidControl"
);
11. JS - Native Comm. On Android
Calling native from js (cont.)
//Java class that lets js to control the app through it
public class AndroidController
{
public void nativeLog(String msg)
{
Log .wtf("What a Terrible Failure", msg); WTF!
}
}
//JS
window.androidControl.nativeLog(‘We have a terrible
situation here’);
12. JS - Native Comm. On Android
Calling js from native (cont.)
//Just as simple as
webView.loadUrl(
"javascript:jsmethodname()");
13. Websocket
• Wikipedia says :
WebSocket is a web technology providing for
bi-directional, full-duplex communications
channels over a single TCP connection. The
WebSocket API is being standardized by
the W3C.
• Websocket differs from TCP in that it provides
for a stream of messages instead of a stream
of bytes.
15. Advantages of Websocket
• WebSockets can communicate asynchronously
from JavaScript to native.
• WebSockets don't have a payload limit
• WebSockets don't require encoding JSON
strings as URL parameters
• WebSockets should be faster than URL
scheme navigation
17. PhoneGap
ACCELEROMETER
• Developed by Nitobi CAMERA
• Nitobi acquired by Adobe COMPASS
CONTACTS
• Now it is under Apache FILE
Software Foundation GEOLOCATION
MEDIA
• Called Apache Cordova NETWORK
NOTIFICATION(ALERT)(SOUND)(VIBRATION)
STORAGE
+ PLUG-INs
22. Creating PhoneGap Plug-in
Javascript
var CustomPlugin= function() { };
CustomPlugin.prototype.getInfo = function(param,successCallback,
failureCallback)
{
return PhoneGap.exec(
successCallback, //Success callback from the plugin
failureCallback, //Error callback from the plugin
'MyPhoneGapPlugin ', //Tell PhoneGap to run which plugin
'getInfo', //Tell plugin, which action we want to perform
[param]); //Passing list of args to the plugin
};
23. Creating PhoneGap Plug-in
Javascript – Invoke plug-in
var successCallback = function(result){ //result is a json }
Var failureCallback = function(error){ //error is error message }
CustomPlugin.getInfo("", successCallback, failureCallback);
24. How to debug?
• WEINRE - WEb INspector Remote
• Now weinre is a part of Apache Cordova
Project (PhoneGap)
• iOS 5 - Enabling Remote Debugging via Private
APIs in Mobile Safari
25. WEINRE • Debug Client is a traditional
webkit browser. Familiar
debugger view (like Web
Inspector
• Debug Target is the webkit-
browser.
• It consists of a javascript
library which runs in your
mobile browser along with
your app.
• With a little linkage to your
code, this library exposes
your javascript to the server
for inspection and
modification.
26. Debugging via debug.phonegap.com
• http://debug.phonegap.com/ (weinre)
Documentation for running weinre on your own pc :
http://people.apache.org/~pmuellr/weinre/docs/latest/
27. iOS - Enabling Remote Debugging
//in the didFinishLaunchingWithOptions method
(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions
// Enable Safari's Web Inspector for iOS 5
[NSClassFromString(@"WebView")_enableRemoteInspector];
Start debugging at http://localhost:9999 in safari
Warning! – Do not forget to remove the remote inspector enabling code
line before submitting your app into the app-store unless you want to get
your app rejected. (Reason: Non-public API usage)
29. The Future
• Better Support for HTML5
• More optimized js engines
• Better rendering
• More powerful mobile devices
• Ease of development
• Cross-Platform
• Games
30. Thank You!
Engin Yağız Hatay
yagizhatay@gmail.com
http://tr.linkedin.com/in/yagizhatay