混合开发笔记

149 阅读2分钟

混合开发是在app原生开发应用(Native端,父级节点)中嵌套一个轻量级的浏览器插件(webview,即h5端,子级节点,是Native端环境中浏览器的一个映射对象),用浏览器去运行h5代码并展示在浏览器中; Native端与h5端可以进行数据交互,两端进行交互的方案被称作JSBridge。Native端(父级)可以直接通过访问h5端(子级)window对象上的对象、方法进行数据传递,但是h5端(子级)不能直接通过访问Native端(父级)中的代码进行数据传递。h5端(子级)向Native端(父级)传递数据可以通过Scheme协议拦截、弹窗拦截和注入上下文(原生注入)的方式进行通信。 由于h5端在开发效率、渲染展示方面和Native端在性能、丰富sdk方面的优势,所以结合两端优势、利用双端数据交互可以开发出更加满足需求的app应用。

我目前做的这个混合开发项目是一个基于安卓系统开发的,Native端是通过原生注入方式往h5端window对象上添加API--WebViewJavascriptBridge 对象,然后通过WebViewJavascriptBridge.callHandler(SDKName,paramObj,callBack(e))调用Native端原生方法。前端把每一个可调用的原生sdk的步奏封装成一个函数方法添加到一个对象上YW,最后把包含所有封装sdk的函数方法的对象YW添加到window对象上,最后通过YW.SDKName(paramObj)就可以调用了。

图片.png

我是h5开发工程师,不是原生开发工程师,所以Native端是如何实现原生注入的,我不需要关注,我只需要关注注入到window对象上的API接口怎末调用就行。h5端的开发我本身就懂,所以没什么需要学习的;所以关于混合开发只有Native端与h5端进行数据交互这一部分需要我学习了解,这也是混合开发的一个重点,也是我写这篇文章的目的。下面的内容就是Native端与h5端进行数据交互的详细内容。

URL Scheme 是一种特殊的 URL,一般用于在 Web 端唤醒 App,甚至跳转到 App 的某个页面,比如在某个手机网站上付款的时候,可以直接拉起支付宝支付页面。

我们常说的 Deeplink 一般也是基于 URL Scheme 来实现的。一个 URI 的组成结构如下:

7899feef14a09f391b4ff86304c0dbf1.png

`URI = scheme:[//authority]path[?query][#fragment]

// scheme = http

// authority = www.baidu.com

// path = /link

// query = url=xxxxx

authority = [userinfo@]host[:port]`

除了 http/https 这两个常见的协议,还可以自定义协议。借用维基百科的一张图:

c9bcde70db2cd25d7bd0db501c958b51.png

16ccfa3ba6ca27cf81c9aa0d723202c.jpg

参考文章:blog.csdn.net/2401_833845…