混合开发概述
混合开发是什么
Hybrid App, 混合了Native技术和web技术进行开发的移动应用。
混合开发方案
基于WebView UI (JSBridge)
JSBridge是原生端和web端通信端桥梁,通过JSBridge和App进行通信,完成web端和原生端通信。基于Native UI (ReactNative, weex)
赋予web原生能力的基础之上,进一步通过JSBridge解析虚拟节点素,传递到Native端,并使用原生进行渲染的解决方案。小程序方案
通过JSBridge实现,对JSBridge进行更加细致化对定制。隔离UI渲染层和JS逻辑层,形成特殊的开发环境,从而web和Native的融合程度,提高web端的执行性能。总结:方案2和方案3都是基于方案1进行不同的封装思想实现,提高web和Native的融合程度。
Hybrid App的本质
在App中,使用WebView作为容器,承载一个web页面。JSBridge一座用JavaScript搭建起来的桥,一端是web,一端是Native端。目的web和Native端相互通信、相互调用。
Web调用Android
android构建 JSBridge 对象,这里提供的 JSBridge 字符串会被挂载到网页中的window 对象下面。还可以对
1
2
3addJavascriptInterface(
new MyJaveScriptInterface(mContext, this),
"AndroidJSBridge");Android 调用 onFunction 方法
1
2
3
4window.onFunction = function (str) {
alert(str);
return 'onFunction 方法已经调用完成';
}Web调用Android方法
1
window.AndroidJSBridge.androidTestFunction1(str);
Web调用IOS
- OC注册供JS调用的方法,IOS 注入 jsbridge 对象名为 webkit
1
2
3
4
5
6
7
8
9
10
11// Web调用IOS方法
window.webkit.messageHandlers.IOSTestFunction2.postMessage({});
// IOS 回调 onFunctionIOS 方法
window.onFunctionIOS = function (str) {
alert(str);
return 'onFunctionIOS 方法已经调用完成';
}
// 调用 IOS 方法2,通过postMessage传对象
function onIOSFunction2 () {
window.webkit.messageHandlers.IOSTestFunction2.postMessage({});
}
Android和IOS的双向通信
相同点
都是通过WebView来完成网页的加载。
都是通过window注入对象的方式来提供被web端调用的方法。
都是可以直接调用web端挂载到window对象的方法。
不同点
注入对象不同:Android可提供注入对象名。IOS固定为webkit。
JS调用Native的方法不同:面向Android可直接获取注入对象、方法。面对IOS相对固定写法window.webkit.messageHandlers.方法名.postMessage(入参对象)。
传递格式不同:面向Android只能接受基本类型数据,如果传对象,通过JSON.stringify()把对象转字符串。面向IOS可以接受任意类型数据。
返回值不同: 面向Android可以直接接受返回值。面向IOS没有直接获取返回值,通过回调方法获取。