Presentation is loading. Please wait.

Presentation is loading. Please wait.

移动开发的灵便迭代之道 黄凯.

Similar presentations


Presentation on theme: "移动开发的灵便迭代之道 黄凯."— Presentation transcript:

1 移动开发的灵便迭代之道 黄凯

2 一切的开始 1、频繁的版本发布 2、个性化的通知无法随时定制

3 解决方案: HTML

4

5 1.1 JavaScript 呼叫 Android方法
myWebView = (WebView) findViewById(R.id.myWebView); myWebView.addJavascriptInterface(new ScriptHandler(this), “callclass"); JavaScript <script type="text/javascript"> function share(message) { javascript:callclass.share(message); } </script>

6 1.2 JavaScript 呼叫 iOS 方法 iOS:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = request.URL; if ([url.scheme && [url.host { NSString *path = url.path; if (path { NSString *message = xxx; //取请求参数 (参数可通过 url.query 获取到) [HJToast showToast:message]; return NO; } return YES; HTML window.href=hujiang://com.hujiang.class/showToast?text=hujiang

7 2、 Cordova (JavaScript 呼叫 Android方法)
<script src="js/cordova_android.js" type="text/javascript"></script> <script src="js/cordova_plugins.js" type=“text/javascript"></script> <script type="text/javascript"> varshare = function(){ var cb=function(data){} var cberr=function(err){ } window.echo=cordova.exec(cb, cberr, ‘MVPlugin', 'Share' , [{title:”我是标题”,imageUrl:" </script> Java (MVPlugin.java extends CordovaPlugin) … execute(String action, JSONArray params, CallbackContext callback)…{ if ("Share".equals(action)) { }

8 3 JSBridge

9 3.1 JSBridge 调用 Android Java (HJAppJSEvent.java) …
@JavascriptInterface public void navigator_setTitle(String titleJson, String callback) { callJSMethod(callback, jsonString); } Java JSSDK.getInstance().registerJSEvent(HJAppJSEvent.getInstance(this)); JavaScript HJAPP.navigator_setTitle(‘hujiang’, ‘callback_method’)

10 3.2 JSCore 调用 iOS iOS ( HJMJSNavigatorModule.h) …
@protocol HJMJSNavigatorModuleExport <JSExport> JSExportAs(navigator_setTitle, - (void)setNavigatorTitle:(NSString *)title callback:(NSString *)callback ); @end iOS (HJMJSNavigatorModule.m) (void)setNavigatorTitle:(NSString *)title callback:(NSString *)callback { [callback } JavaScript HJAPP.navigator_setTitle(‘hujiang’, ‘callback_method’)

11 遇到的问题 性能 (弱网、无网络) 方案:打包页面、本地加载

12 遇到的问题 缓存 方案1:修改页面访问路径 方案2:页面访问的资源路径加上版本号

13 遇到的问题 应用外网页打开应用 方案: Scheme

14 1、什么是Scheme? 2、Scheme如何实现呼叫原生?
hujiang://com.hujiang.class/showToast?text=hujiang 2、Scheme如何实现呼叫原生? iOS - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return YES; }… Android <activity android:name=".activity.SchemeActivity" > <data android:host=“com.hujiang.class” android:scheme="hujiang" /> </activity> HTML <a href=’ hujiang://com.hujiang.class/showToast’ />…

15 遇到的问题 用户信息的传递 方案1:Http Header 方案2:cookie

16 遇到的问题 重定向页面点击后退按钮 方案:document.referrer

17 Apk的动态加载 不安装也能执行

18 DL : Apk动态加载框架

19 不支持Service、BroadcastReceiver
遇到的问题 不支持Service、BroadcastReceiver 方案: Remote Service 挂载到现有的Receiver

20 (Scripting Layer for Android)
脚本语言的应用 SL4A (Scripting Layer for Android) Python For Android

21 Demo: Python … >>> import android
>>> droid = android.Android() >>> result = droid.makeToast(‘Hello, world!’) >>> |

22 Q&A


Download ppt "移动开发的灵便迭代之道 黄凯."

Similar presentations


Ads by Google