首页 > 移动应用 > 正文

Android原生与H5通信

2018-08-02 13:48:12  来源:简书

摘要:如今,混合开发似乎成为了主流。H5拥有跨平台的优势,却存在性能上的问题正好可以用搭建原生壳承载H5代码的方式去解决。如何理解这种方式,就好像说Android原生代码封装外壳,内部包含H5代码作为核心内容。
关键词: Android H5
  如今,混合开发似乎成为了主流。H5拥有跨平台的优势,却存在性能上的问题正好可以用搭建原生壳承载H5代码的方式去解决。
 
  如何理解这种方式,就好像说Android原生代码封装外壳,内部包含H5代码作为核心内容。更细节一点,我们把引导页、登录页、首页等等与业务关联打不并且与用户交互较多的页面用原生去写,而业务页面,逻辑代码由H5处理,将他们结合就形成了混合开发的由原生壳承载的H5APP。
 
  \
 
  这么做有什么好处呢?组个例子,我们利用这种方式做好了一个Android原生APP,现在需要做一个IOS原生APP,我们可以直接简单搭建一个IOS壳,复用H5代码,完成IOS原生APP。同时我们需要在钉钉、微信小程序等等平台搭建,可以直接复用我们已有的H5代码。
 
  而这样的搭建方式比纯H5搭建的APP的优势在于因为有原生壳的存在,可以自由的使用原生API。保证了交互上的流畅性。
 
  如何实现原生与H5的通信呢?
 
  关于通讯我们需要解决两个问题:
 
  原生向H5通讯
  H5向原生通讯
 
  第一个问题很好解决,以Android为例,WebView提供特有的方法,当你打开一个Html,你可以去调用这个Html中包含的JS。例如:
 
  webview.loadUrl("javascript:callH5('Android ok')");
 
  第二个问题我们采用发送指令的方式来处理。同样以Android为例,WebView可以拦截html跳转时的url地址,我们可以利用这个地址,约定一个规则,如果符合规则,则拦截后不执行跳转,通过这个url获取我们需要的信息,执行对应的操作。
 
  window.location.href=protocol://android?code=toast&data=+Json.stringify(config)
 
  上述是一段JS的页面跳转方法。我们规定规则PRE=protocol://android?,当我们拦截的url包含PRE时,则我们认为这是一条指令,不需要跳转页面,应该执行对应操作。而参数code则是我们的指令内容,data为通信时的传参。
 
  接下来是原生这边处理。首先我们拦截url。这里笔者还处理由于Http攻击导致H5页面出现广告的问题。我们主要是第一个if。

\
 
  return 为ture表示拦截成功,不执行后面的跳转操作。而false表示按正常流程执行。拦截成功后我们从url中获取code和data,接着就可以按照我们自己的需求去处理了。

第三十四届CIO班招生
北达软EXIN网络空间与IT安全基础认证培训
北达软EXIN DevOps Professional认证培训
责编:pingxiaoli

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。