以前就任於一家較小的金融科技公司(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) {
}
});
複製代碼