JS調(diào)用Native弓熏,就是在這里和iOS還有安卓約定好一個jsObj對象五辽,
這個jsObj對象是移動端提供的特碳,大家在HTML代碼里是沒有看到的刻两。
其實(shí)移動端在加載HTML的時候增蹭,會在上下文中注入這個對象到咱們JS中。咱們就可以直接調(diào)用這個對象的方法
這個對象提供了一個HtmlcallJava方法磅摹,并接受2個參數(shù)滋迈,JS用
window.jsObj.HtmlcallJava(username, password);調(diào)用就行。類似的還需要其他方法户誓,跟移動端約定好后往jsObj對象里面添加就行饼灿,然后可以直接調(diào)用了
提供給Native調(diào)用的方法就簡單了,按照約定好方法名和參數(shù)帝美,接受參數(shù)后實(shí)現(xiàn)我們的業(yè)務(wù)就行
還是相對比較簡單碍彭,但在我們的業(yè)務(wù)里面是遠(yuǎn)遠(yuǎn)不夠的,往往參數(shù)很多,傳參的時候可能要序列化成json格式硕旗,有必要的時候還要加密窗骑,還有和移動端交互的方法很多,還要便于管理漆枚。當(dāng)然在這里我們只是給大家提供一個思路创译,原理和實(shí)現(xiàn),在我們實(shí)際開發(fā)中會有一套嚴(yán)格的規(guī)范墙基,在后續(xù)的直播課或者咱們兄弟連的全棧班里面會陸續(xù)給大家講解
HTML是可以放在服務(wù)器里面软族,提供URL給客戶端調(diào)用,在這里我們?yōu)榱朔奖阏{(diào)用放在客戶端本地
我們知道全球有82%的網(wǎng)站是用PHP做的,PHP程序員都會PHP和JS,如果我們僅使用兩種編程語言甚至是一種編程語言,就能完成一個擁有網(wǎng)頁端,微信端,app端的多端應(yīng)用.那么我們將能培養(yǎng)大量的全棧工程師,這批全棧工程師可以勝任移動互聯(lián)網(wǎng)領(lǐng)域所有的開發(fā)崗位
現(xiàn)在市面上流行的混合app框架有很多,這些構(gòu)架大部分都是國外的.比如
FaceBook開源的ReactNative就是其中的佼佼者,在加上單頁App技術(shù)成熟與普及使得僅使用PHP加JS就可以完成整個項(xiàng)目開發(fā)
那么是不是我們只學(xué)習(xí)類似ReactNative構(gòu)架就可以做全棧工程師了呢?問題沒那么簡單,如果你在國外或許還真行,可是在國內(nèi)我們要想精通混合App開發(fā)模式,我們需要了解混合App實(shí)現(xiàn)原理也就是NativeBridge技術(shù),因?yàn)閲獾目蚣苁遣粫芍Ц秾毢臀⑿诺?而國外集成的很多好用的組件也因?yàn)閲鴥?nèi)網(wǎng)絡(luò)的特殊性導(dǎo)致我們部分組件無法正常使用
要能靈活地使用NativeBridge完成自己的項(xiàng)目開發(fā),我們除了必要的編程語言技能外,還需要對移動互聯(lián)網(wǎng)的整個生態(tài)與行業(yè)特點(diǎn),比如說在國內(nèi)我們很多的項(xiàng)目會接入微信公眾平臺,并且微信也有提供相應(yīng)的JSSDK讓我們的網(wǎng)頁擁有調(diào)用掃碼,語音識別的能力.那么我們開發(fā)的平臺要想讓我們的程序做到一次開發(fā)多端兼容,那么我們除了兼容IOS,Android以外還應(yīng)把微信,支付寶,微博這樣的行業(yè)巨頭考慮進(jìn)去
NativeBridge的實(shí)現(xiàn)原理其實(shí)并不復(fù)雜,大的原則來說就是講數(shù)據(jù)渲染,用戶交互,流程控制等核心業(yè)務(wù)類開發(fā)需求交給Web程序員來完成.而涉及到手機(jī)硬件和第三方平臺提供的功能則使用底層封裝并提供統(tǒng)一的JS與PHP接口,這種封裝技術(shù)叫做NativeBridge
那么我們下面在來看一下Android和IOS分別是如何實(shí)現(xiàn)NativeBridge的.以下的演示是為了方便大家看懂原理,所以對代碼進(jìn)行了大量的簡化,與兄弟會在商業(yè)項(xiàng)目中正在大量使用的封裝存在較大差距.如果是把商業(yè)級代碼直接擺出來不利于大家理解,也違反公司規(guī)定