以前就任于一家较小的金融科技公司(base HangZhou),因为大环境的不景气,公司同事也变更比较大,原先的ios工程师已离职,android工程师已转为java后台开发。公司原本打算放弃掉app端的业务,可是今年6月中旬又意外接到某民营银行的p2p外包业务,须要开发终端app(工期两个月)。javascript
实际上公司以前是有开发过相同业务场景的app的,咱们首先想到的第一个解决方案是否能够将类似app仅修改少部分UI来避免二次开发。后来派我方产品人员进行需求沟通的时候发现与以前开发的那套app主流程基本不一致,并且没有ios同窗进行二次开发遂放弃。html
Flutter是目前很是火热的一门跨平台技术。利用Dart语言,也支持AOT以及JIT两种编译方式。Flutter的渲染不依靠原平生台,而是经过本身的SKia渲染引擎,因此对于多端的表现一致性上是比RN优秀的。可是能力有限,我也只是demo阶段学习。遂本次开发也不会采用。(目前本身也是学习 中)前端
以前公司前端团队(也就在1-3人浮动)一直由我主导使用的是React技术栈,可是大多都是应用在中后台管理系统,H5端使用的是Vue技术栈。RN只有以前我只是简单的写过demo,也没有过实战经验。RN虽然支持跨端,可是在各平台的表现形式上仍是有必定差别,RN中与原生的交互须要太多的原平生台知识的支撑。考虑成本以及可行性遂放弃。(目前本身在研究RN 中)java
Hybrid技术也就是混合开发,将咱们的H5页面嵌到Native App的Webview中。经过JSBridge来做为H5与Native之间的桥梁,H5能够传递数据以及调用Natvie的方法,反之Native亦可与H5通讯。这样咱们经过一套h5页面就是能够同时覆盖到安卓与ios两端。(目前市面上有较多成熟的Hybird框架:AppCan、cordova等)时间成本最低可是性能最差的方案(与客户沟通后,客户赞成使用此技术方案)。android
原理:经过WebView提供的接口向js的context(window)注入一个对象或者方法,js调用时,直接执行对应的Native代码逻辑。ios
// android端代码
// 将Android里面定义的类对象AndroidJs暴露给javascript
webView.addJavascriptInterface(new AppJs(mContext), "AppJs");
// h5端代码
closeKeyboard() {
AppJs.closeKeyboard();
},
复制代码
// h5端代码
mounted() {
window["getAppResult"] = result => {
if (result) {
router.push({
path: "/account/open/next",
query: { bankAccountName: this.name, certNo: this.certNo }
});
} else {
Toast.succeed("活体检测失败");
}
};
}
// android端代码
webView.evaluateJavascript("javascript:getAppResult(true)",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
复制代码