Hybrid开发基础

Hybrid开发基础本文详细介绍了 HybridAPP 开发的特点及优势 对比了其与原生 WebAPP 及 ReactNativeA 的区别 并深入探讨了 Hybrid 架构及原生与 H5 页面间的交互方式 包括 Android 与 H5 通信的基本方式及 JSBridge 的设计与实现

大家好,欢迎来到IT知识分享网。

1、Hybrid开发的优劣势

移动开发目前有四种方式:原生(Native APP)、混合开发(Hybrid APP)、网页应用(Web APP)、React Native APP,Hybrid开发在移动端开发中使用比较多,目前在微信、支付宝、淘宝、抖音等APP都有应用,相对于其他两种开发方式有如下特点:

特点 纯原生(Native APP) 混合开发(Hybrid APP) 网页应用(Web APP) React Native APP
开发语言 JAVA、Object-c等 JAVA、Object-c、JavaScript、html、css等 JavaScript、html css等 JavaScript
学习难度
跨平台性能
兼容性
网络要求 支持离线 支持离线(资源本地情况) 丰富(前端资源更新) 支持离线
高级图形支持
热更新支持度
使用体验

2、Hybrid架构

通过JSBridge,H5页面可以调用Native的API,Native也可以调用H5页面的方法或者让H5页面回调。

Hybrid开发基础

3、原生页面与H5页页面交互

3.1、Android与H5通信基本方式

Native调用JS
4.4之前

// mWebView = new WebView(this); //即当前webview对象  mWebView.loadUrl("javascript: 方法名('参数,需要转为字符串')"); //ui线程中运行 runOnUiThread(new Runnable() { 
    @Override public void run() { 
    mWebView.loadUrl("javascript: 方法名('参数,需要转为字符串')"); } }); 

4.4以后

//异步执行JS代码,并获取返回值  mWebView.evaluateJavascript("javascript: 方法名('参数,需要转为字符串')", new ValueCallback() { 
    @Override public void onReceiveValue(String value) { 
    //这里的value即为对应JS方法的返回值 } }); 

Navtive调用H5页面的js方法,有如下特点:

  • 4.4之前通过loadurl方法调用JS方法,无法获取方法的返回值
  • 4.4之后通过evaluateJavascript异步调用js方法,只能在onReceiveValue拿到返回值
  • 不适合大量数据传输的场景,数据量大的场景用接口调用比较好
  • mWebView.loadUrl()需要再ui线程运行,mWebView为UI控件
    JS调用Native
WebSettings webSettings = mWebView.getSettings(); //Android容器允许JS脚本,必须要 webSettings.setJavaScriptEnabled(true); //Android容器设置侨连对象 mWebView.addJavascriptInterface(getJSBridge(), "JSBridge"); 

Native通过addJavascriptInterface添加JS对象,然后在该对象的内部声明对应的API方法,有如下特点:

  • 在Android4.2以上(api17后),暴露的API需要加上注解@JavascriptInterface,否则找不到方法
  • 在api17之前,addJavascriptInterface有风险,可以通过反编译native注册的js对象,然后在页面通过反射java的内置静态类。获取一些敏感信息
  • JS能调用已暴露的API,得到相应的返回值

3.2、Android与H5通信:JSBridge

Hybrid开发基础

4、JS Bridge设计

  • 第一步:设计出一个Native与JS交互的全局桥对象
  • 第二步:JS调用Native
  • 第三步:Native得知API被调用
  • 第四步:分析URL-参数和回调的格式
  • 第五步:Native如何调用JS
  • 第六步:H5中API方法的注册以及格式

第一步:设计出一个Native与JS交互的全局桥对象
定义个一个H5全局对象JS Bridge实现,该对象是H5页面中全局对象window的一个属性

var JSBridge = window.JSBridge || (window.JSBridge = { 
   }); 

第二步:JS调用Native
通过callHandler方法调用原生
第三步:Native得知api被调用
Android捕获scheme url
在WebViewClient通过shouldoverrideurlloading拦截scheme url



public boolean shouldOverrideUrlLoading(WebView view, String url){ 
    //读取到url后自行进行分析处理 //如果返回false,则WebView处理链接url,如果返回true,代表WebView根据程序来执行url return true; } 

第四步:分析url-参数和回调的格式

  • responseId String行 h5页面中对应需要执行的回调函数Id,在h5中生成scheme url
  • responseData Json Native需要传递给h5的数据格式,包括(resultcode:(是否调用成功 1成功 0失败),result:执行完的结果信息,errmsg:传递一些调用失败的错误信息)
//将回调信息传给H5 JSBridge._handleMessageFromNative(messageJSON); 

Native调用H5方法,数据格式为:{handleName:api名,data:数据,callbackId:回调id}

  • handleName String型 :需要调用的h5开放的api名称
  • data JSON型 :需要传递的数据
  • callbackid String型:原生生成的回调函数id,h5执行完毕通过scheme url通知原生api成功执行

第六步:H5中api方法注册及格式

//注册一个测试函数 JSBridge.registerHandler('testH5Func',function(data,callback){ 
    alert('测试函数接收到数据:'+JSON.stringify(data)); callback&&callback('测试回传数据...'); }); 

5、JS Bridge中实现的通用功能自定义tabBar

  • 自定义tabBar左右两侧按钮的功能及样式
  • 打开一个新的webview承接跳转的url
  • 关闭webview
  • 关闭多个webview
  • 监听resume、pause事件
  • 下拉刷新
  • app唤起

6、JS Bridge实现的业务功能支付功能

  • 获取位置信息
  • 页面第三方分享
  • 调用相机、图片上传等

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/110731.html

(0)
上一篇 2026-01-29 16:15
下一篇 2026-01-29 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信