Download presentation
Presentation is loading. Please wait.
1
移动开发的灵便迭代之道 黄凯
2
一切的开始 1、频繁的版本发布 2、个性化的通知无法随时定制
3
解决方案: HTML
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
Similar presentations