自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android原生與H5通信

移動(dòng)開發(fā) Android
如今,混合開發(fā)似乎成為了主流。H5擁有跨平臺(tái)的優(yōu)勢,卻存在性能上的問題正好可以用搭建原生殼承載H5代碼的方式去解決。如何理解這種方式,就好像說Android原生代碼封裝外殼,內(nèi)部包含H5代碼作為核心內(nèi)容。

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

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

[[238610]]

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

而這樣的搭建方式比純H5搭建的APP的優(yōu)勢在于因?yàn)橛性鷼さ拇嬖?,可以自由的使用原生API。保證了交互上的流暢性。

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

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

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

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

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

第二個(gè)問題我們采用發(fā)送指令的方式來處理。同樣以Android為例,WebView可以攔截html跳轉(zhuǎn)時(shí)的url地址,我們可以利用這個(gè)地址,約定一個(gè)規(guī)則,如果符合規(guī)則,則攔截后不執(zhí)行跳轉(zhuǎn),通過這個(gè)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時(shí),則我們認(rèn)為這是一條指令,不需要跳轉(zhuǎn)頁面,應(yīng)該執(zhí)行對應(yīng)操作。而參數(shù)code則是我們的指令內(nèi)容,data為通信時(shí)的傳參。

接下來是原生這邊處理。首先我們攔截url。這里筆者還處理由于Http攻擊導(dǎo)致H5頁面出現(xiàn)廣告的問題。我們主要是第一個(gè)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,接著就可以按照我們自己的需求去處理了。

責(zé)任編輯:未麗燕 來源: 簡書
相關(guān)推薦

2012-10-18 13:48:31

統(tǒng)一通信UC

2015-11-10 11:38:06

2012-07-06 09:59:41

2020-07-21 14:00:51

App小程序前端

2010-05-21 17:08:20

VoIP統(tǒng)一通信

2010-05-13 23:33:31

統(tǒng)一通信技術(shù)

2010-05-17 14:55:53

H3C統(tǒng)一通信

2010-05-17 14:59:25

H3C統(tǒng)一通信

2015-06-29 10:07:01

Cocos百視通ARM H5論壇

2023-02-01 23:10:16

大數(shù)據(jù)

2015-06-26 15:26:30

Cocos百視通ARM

2010-05-14 12:15:23

統(tǒng)一通信系統(tǒng)

2010-05-21 10:31:21

統(tǒng)一通信系統(tǒng)

2022-09-21 11:53:56

無障礙訪問iOS安卓

2022-10-26 09:01:55

H5移動(dòng)端調(diào)試

2010-05-06 10:37:13

ibmdwLotus

2014-02-11 10:02:59

IDC統(tǒng)一通信與協(xié)作UC&C

2010-05-14 13:30:28

統(tǒng)一通信協(xié)作

2010-05-12 15:54:36

2020-05-22 11:09:16

統(tǒng)一通信統(tǒng)一通信即服務(wù)TCO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號