日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android原生與H5通信

如今,混合開發(fā)似乎成為了主流。H5擁有跨平臺的優(yōu)勢,卻存在性能上的問題正好可以用搭建原生殼承載H5代碼的方式去解決。

成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)的關(guān)注點不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給創(chuàng)新互聯(lián)一個展示的機會來證明自己,這并不會花費您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。

如何理解這種方式,就好像說Android原生代碼封裝外殼,內(nèi)部包含H5代碼作為核心內(nèi)容。更細(xì)節(jié)一點,我們把引導(dǎo)頁、登錄頁、首頁等等與業(yè)務(wù)關(guān)聯(lián)打不并且與用戶交互較多的頁面用原生去寫,而業(yè)務(wù)頁面,邏輯代碼由H5處理,將他們結(jié)合就形成了混合開發(fā)的由原生殼承載的H5app。

這么做有什么好處呢?組個例子,我們利用這種方式做好了一個Android原生APP,現(xiàn)在需要做一個IOS原生APP,我們可以直接簡單搭建一個IOS殼,復(fù)用H5代碼,完成IOS原生APP。同時我們需要在釘釘、微信小程序等等平臺搭建,可以直接復(fù)用我們已有的H5代碼。

而這樣的搭建方式比純H5搭建的APP的優(yōu)勢在于因為有原生殼的存在,可以自由的使用原生API。保證了交互上的流暢性。

如何實現(xiàn)原生與H5的通信呢?

關(guān)于通訊我們需要解決兩個問題:

  • 原生向H5通訊
  • H5向原生通訊

第一個問題很好解決,以Android為例,WebView提供特有的方法,當(dāng)你打開一個Html,你可以去調(diào)用這個Html中包含的JS。例如:

 
 
 
  1. webview.loadUrl("javascript:callH5('Android ok')"); 

第二個問題我們采用發(fā)送指令的方式來處理。同樣以Android為例,WebView可以攔截html跳轉(zhuǎn)時的url地址,我們可以利用這個地址,約定一個規(guī)則,如果符合規(guī)則,則攔截后不執(zhí)行跳轉(zhuǎn),通過這個url獲取我們需要的信息,執(zhí)行對應(yīng)的操作。

 
 
 
  1. window.location.href=protocol://android?code=toast&data=+Json.stringify(config) 

上述是一段JS的頁面跳轉(zhuǎn)方法。我們規(guī)定規(guī)則PRE=protocol://android?,當(dāng)我們攔截的url包含PRE時,則我們認(rèn)為這是一條指令,不需要跳轉(zhuǎn)頁面,應(yīng)該執(zhí)行對應(yīng)操作。而參數(shù)code則是我們的指令內(nèi)容,data為通信時的傳參。

接下來是原生這邊處理。首先我們攔截url。這里筆者還處理由于Http攻擊導(dǎo)致H5頁面出現(xiàn)廣告的問題。我們主要是第一個if。 

 
 
 
  1. webView.setWebViewClient(new WebViewClient() {  
  2. // Load opened URL in the application instead of standard browser  
  3. // application  
  4. public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  5. showLogInfo("攔截到的url----"+url);  
  6. String advertising="http://"+sharedPreferencesUtil.getData(Constant.IP, RequestConfig.IP)  
  7. +":"+sharedPreferencesUtil.getData(Constant.PORT,RequestConfig.IPPORT);  
  8. if (url.contains(pre)) {  
  9. Map map = getParamsMap(url, pre);  
  10. String code = map.get("code");  
  11. String data = map.get("data");  
  12. parseCode(code, data);  
  13. return true;  
  14. }else if(!url.contains(advertising)){  
  15. showLogError("攔截到植入廣告,廣告的url——"+url);  
  16. return true;  
  17. } else{  
  18. return false;  
  19. }  
  20. }  
  21. }); 

return 為ture表示攔截成功,不執(zhí)行后面的跳轉(zhuǎn)操作。而false表示按正常流程執(zhí)行。攔截成功后我們從url中獲取code和data,接著就可以按照我們自己的需求去處理了。


網(wǎng)站題目:Android原生與H5通信
分享鏈接:http://www.5511xx.com/article/djjogdi.html