54
12 things you should know Mark Dong 董龙飞 Adobe Developer Evangelist weibo.com/donglongfei weibo.com/javascriptdev

Phone gap 12 things you should know

  • Upload
    isochk

  • View
    9.854

  • Download
    6

Embed Size (px)

DESCRIPTION

World Internet Developers' Summit 2012 (March 6-7, 2012)Internet Society Hong Kong

Citation preview

Page 1: Phone gap 12 things you should know

12 things you should know

Mark Dong 董龙飞 Adobe Developer Evangelist

weibo.com/donglongfei weibo.com/javascriptdev

Page 2: Phone gap 12 things you should know

1. Why?

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 3: Phone gap 12 things you should know

http://mobilehtml5.org/

MOBILE HTML ?

Page 4: Phone gap 12 things you should know

Web App

or

Hybrid App or

Native App

Page 5: Phone gap 12 things you should know

Apps are for loyalty, Mobile web is for discovery.

from the report “implementing your mobile strategy” by dotMobi

Page 6: Phone gap 12 things you should know

2. What is PhoneGap?

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 7: Phone gap 12 things you should know

Interface to access native features

Wrap your web app and deploy

PhoneGap plugin

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 8: Phone gap 12 things you should know

3. What it is not?

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 9: Phone gap 12 things you should know

JavaScript Framework

IDE Tools

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 10: Phone gap 12 things you should know

4. Where it is from?

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 11: Phone gap 12 things you should know

!  2008: iPhoneDevCamp

!  “bridging the gap between the web and the iphone SDK”

! PhoneGap : it is like AIR for the Iphone (2008-9-18, Nitobi blog)

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 12: Phone gap 12 things you should know

5. Open source

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 13: Phone gap 12 things you should know

CallBack 更名为 Apache Cordova

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 14: Phone gap 12 things you should know

http://incubator.apache.org/cordova/

Page 15: Phone gap 12 things you should know

6 . Across platforms

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 16: Phone gap 12 things you should know

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 17: Phone gap 12 things you should know

7. Packaging

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 18: Phone gap 12 things you should know

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 19: Phone gap 12 things you should know

IDE + SDK + PhoneGap

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 20: Phone gap 12 things you should know

public class CirclesActivity extends DroidGap {

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/www/circles.html"); }}

Native Wrapper with PhoneGap Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 21: Phone gap 12 things you should know

PhoneGap Build

Compile in the cloud

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 22: Phone gap 12 things you should know

8. Accessing native features

Page 23: Phone gap 12 things you should know
Page 24: Phone gap 12 things you should know
Page 25: Phone gap 12 things you should know

9. The nature

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 26: Phone gap 12 things you should know
Page 27: Phone gap 12 things you should know

JS Native

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 28: Phone gap 12 things you should know

Native Web Control Plugins FFI

JavaScript/CSS/HTML5 Non Web Tech

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 29: Phone gap 12 things you should know

Native Web Control

Browser : full functions Chrome removed No top bar

Page 30: Phone gap 12 things you should know

10. Plugin

Page 31: Phone gap 12 things you should know

HTML5项目

phonegap.jar

plugins.xml

AndroidManifest.xml

android activity

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 32: Phone gap 12 things you should know

In Java

Page 33: Phone gap 12 things you should know

public class callsPGPlugin extends Plugin { // List Actions public static !nal String ACTION="list"; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { PluginResult result=null; if(ACTION.equals(action)){ CallLogAI callLogAI = new CallLogAI(ctx); JSONObject callsHistory=callLogAI.fetchCallLogs(null); Log.d("RESULT=", callsHistory.toString()); result=new PluginResult(Status.OK,callsHistory); }else{ result=new PluginResult(Status.INVALID_ACTION); Log.d("CallsPlugin","Invalidate action:" + action); } return result; }

}

Java定制plugin

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 34: Phone gap 12 things you should know

注册plugin <?xml version="1.0" encoding="UTF-8"?> <plugins> <plugin name="App" value="com.phonegap.App"/> <plugin name="Geolocation" value="com.phonegap.GeoBroker"/> <plugin name="Device" value="com.phonegap.Device"/> …… <plugin name="Temperature" value="com.phonegap.TempListener"/> <plugin name="FileTransfer" value="com.phonegap.FileTransfer"/> <plugin name="Capture" value="com.phonegap.Capture"/>

<plugin name="CallsHistoryPlugin" value="com.mark.phonegap.plugin.callsPGPlugin" /> </plugins>

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 35: Phone gap 12 things you should know

In JavaScript

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 36: Phone gap 12 things you should know

Javascript接口 var CallsListing=function(){}; CallsListing.prototype.list=function(successCallback,failureCallback){

return PhoneGap.exec(successCallback, failureCallback, 'CallsHistoryPlugin', 'list',['test'] );

}; PhoneGap.addConstructor(function(){

PhoneGap.addPlugin("callsListing",new CallsListing); });

Page 37: Phone gap 12 things you should know

window.plugins.callsListing.list(function(r){printResult(r)},function(e){console.log(e)}

);

使用者调用plugin Javascript接口

Page 38: Phone gap 12 things you should know

Wait ⋯

Page 39: Phone gap 12 things you should know

window.plugins.callsListing.list(function(r){printResult(r)},function(e){console.log(e)}

);

CallsListing.prototype.list=function(successCallback,failureCallback){

return PhoneGap.exec(successCallback,failureCallback,'CallsHistoryPlugin','list',['test’]);

};public class callsPGPlugin extends Plugin {

// List Actions public static !nal String ACTION="list"; @Override public PluginResult execute(String

action, JSONArray data, String callbackId) {

<plugin name="CallsHistoryPlugin" value="com.mark.phonegap.plugin.callsPGPlugin" />

Page 40: Phone gap 12 things you should know

11. How?

Page 41: Phone gap 12 things you should know

Android

Page 42: Phone gap 12 things you should know

CallbackServer:XmlHttpRequestsever

WebChromClient: onJsPrompt

addJavaScriptInterface

Page 43: Phone gap 12 things you should know

CallbackServer:XmlHttpRequestsever

WebChromClient: 覆盖onJsPrompt

From JS to Native

From Native to JS

Page 44: Phone gap 12 things you should know

CallsListing.prototype.list=function(successCallback,failureCallback){

return PhoneGap.exec(successCallback,failureCallback,'CallsHistoryPlugin','list',['test’]);

};

PhoneGap.exec = function(success, fail, service, action, args) { … var r = prompt(JSON.stringify(args), "gap:"+JSON.stringify([service, action, callbackId, true])); …

Javascript

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 45: Phone gap 12 things you should know

Droidgap.java public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { …… String r = pluginManager.exec(service, action, callbackId, message, async); …… }

Pluginmanager.java public String exec(!nal String service, !nal String action, !nal String callbackId, !nal String jsonArgs, !nal boolean async) {

…… cr = plugin.execute(action, args, callbackId); ctx.sendJavascript(cr.toErrorCallbackString(callbackId));

……

}

Java

Page 46: Phone gap 12 things you should know

Pluginmanager.java

ctx.sendJavascript(cr.toErrorCallbackString(callbackId));

CallbackServer.java : XHR server

PhoneGap.Channel.join(function() { // Start listening for XHR callbacks setTimeout(function() { if (PhoneGap.UsePolling) { PhoneGap.JSCallbackPolling(); } ⋯

Javascript

Java

Page 47: Phone gap 12 things you should know

IOS

Page 48: Phone gap 12 things you should know

JS到Native的通讯

document.location = “gap://Class.method/args”

Native到JS的通讯

UIWebView.stringByEvaluatingJavaScriptFromString

webView =[[UIWebView alloc] initWithFrame:webViewBounds];

实例化UIWebView

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 49: Phone gap 12 things you should know

12. Debug

Page 50: Phone gap 12 things you should know

a Remote Debugger for web pages or PhoneGap app on mobile devices.

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

weinre:

Page 51: Phone gap 12 things you should know

weinre

Page 52: Phone gap 12 things you should know

<script src="http://192.168.1.101:8080/target/target-script-min.js#anonymous"> </script>

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 53: Phone gap 12 things you should know

PhoneGap Debug Server

Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev

Page 54: Phone gap 12 things you should know

Mark Dong Adobe Developer Evangelist [email protected]

weibo.com/donglongfei weibo.com/javascriptdev