深入了解Hybrid App技术的相关知识
作者:Tiffany的小熊 发布时间:2023-08-10 09:36:02
背景
随着Web技术的发展和移动互联网的发展,Hybrid技术已经成为一种前端开发的主流技术方案。那什么是Hybrid App呢?
Hybrid App(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具" Native App良好用户交互体验的优势 "和" Web App跨平台开发的优势 "。
总的来说,就是既具有APP的体验和性能,又具有Web灵活的开发模式和跨平台开发能力。
现有的技术方案
1、H5 + JSBridge,通过JSBridge完成H5和Native的通信,赋予H5一定的端能力。是一种基于WebView UI的解决方案。
2、React-Native,进一步通过JSbridge将js解析为虚拟DOM传递到Native,并使用原生进行渲染。
3、小程序解决方案,采用双线程的渲染机制,将渲染层WebView和逻辑层JavaScriptCore形成独立的模块,通过Native进行通信(setData),逻辑层的网络请求也会由Native进行转发。在UI方面,采用的是WebView和原生相结合的方式。
技术原理
本文将从jsbridge的原理、实现、双向通信、接入方式和H5的嵌入方式进行详细阐述。
jsbridge的原理
客户端能对WebView中请求进行拦截,都有相应的API:
Android:
// Android: shouldoverrideurlloading
public boolean shouldOverrideUrlLoading(WebView view, String url){
//读取到url后自行进行分析处理
//如果返回false,则WebView处理链接url,如果返回true,代表WebView根据程序来执行url
return true;
}
IOS:
// IOS: shouldStartLoadWithRequest
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = [request URL];
NSString *requestString = [[request URL] absoluteString];
//获取url scheme后自行进行处理
因此,在页面中可以通过iframe加载src的方式触发相应的捕获函数,在捕获函数中可以对url中的参数进行解析;此外,Android还可以通过重写OnJSPrompt方法,对调用Prompt进行拦截,同样能实现通信的目的。
示例:
调起ios端:
function iosInvoke(scheme) {
var elem = document.createElement('iframe');
var body = document.body || document.getElementsByTagName('body')[0];
elem.style.display = 'none';
elem.src = scheme;
body.appendChild(elem);
setTimeout(function () {
body.removeChild(elem);
elem = null;
}, 0);
}
调起android端:
function androidInvoke(scheme) {
var androidJsBridge = window.Bdbox_android_jsbridge;
if (androidJsBridge && androidJsBridge.dispatch) {
androidJsBridge.dispatch(scheme);
} else {
var re = window.prompt('BdboxApp:' + JSON.stringify({
obj: 'Bdbox_android_jsbridge',
func: 'dispatch',
args: [scheme]
}));
return re;
}
}
协议制定URL Scheme
URL Scheme是什么
由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。
每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。
设置URL Scheme
xxxapp://communication?args=xx
如何进行双向通信
双向通信主要是H5和Native的双向通信过程以及参数传递、回调执行。
H5通知Native:
H5通知Native的方式主要有:
调用prompt/console/alert,调用时进行参数传递,端进行拦截重写
URL Scheme跳转拦截,将参数放在请求URL上
API挂载,通过Navtive获取js执行环境,将相应的api挂载在js上,供h5调用
Native通知H5:
回调机制,在向Native传递信息时,将回调函数也传递,Native在调用完成后,使用js执行环境执行回调函数
接入方式
jsbridge的接入,端方面的jsbridge和h5方面的jsbridge
嵌入方式
h5的嵌入方式:
直接代码,直接将H5代码css、html、js放入端目录下,以file协议的方式访问,优点是访问快速,缺点是迭代不方便。
线上地址,以http协议访问,使用webview打开url形式,相较于代码嵌入的方式来说,速度比较慢,依赖网络传输速度;优点是迭代快速
来源:https://www.cnblogs.com/tiffanybear/p/11187629.html
猜你喜欢
- 在做Django项目的过程中, 无法进入pycharm提供的Run manager.py Task交互环境出现这种问题是因为Pycharm无
- 懒加载:也叫延迟加载,即在需要的时候进行加载,随用随载。 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文
- 本文实例讲述了JS实现动画兼容性的transition和transform方法。分享给大家供大家参考,具体如下:今天在开发纯手工js打造图片
- 代码如下:Class Vector Private vector_datas() Private&n
- 可能有很多朋友都会碰到一个问题不知道127.0.0.1与localhost有什么区别,但是有的时间会发现使用localhost连接不了,但是
- 今天使用python写了一个简单的爬虫,用来下载taptap网站的游戏截图。下面说下具体的实现方法。在搜索框中搜索“原神”打开浏览器的开发者
- 1.新建一个django项目,2.前端展示一个按钮<form action="/start/" method=&q
- 在python中可以通过内置函数int()函数进行二进制转十进制;int()函数可以将一个指定进制的数字型字符串或者十进制数字转化为整型。P
- 前言内存映射通常可以提高I/O的性能,因为使用内存映射时,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据,内核和用户
- Access method(访问方法):此步骤包括从文件中存储和检索记录。Alias(别名):某属性的另一个名字。在SQL中,可以用别名替换
- 什么是修改?在SQL中的基本操作就是增删改查,查询语句不会对数据库中的数据进行修改。而其余的三种操作都会对数据库进行修改,不管是什么修改,我
- 我就废话不多说了,大家还是直接看代码吧~'''Created on 2018-4-16'''
- 一、概述面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类
- 前言GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护
- 申明本博客不提供任何服务器端程序,也不提供任何收费抢购软件。该博客仅用于学习selenium自动化工具。如有侵犯到任何公司的合法权益,请私信
- 1.pycharm运行python脚本的过程使用pycharm等编辑器run/debug运行python脚本时,编辑器会通过本地python
- mysql建表test;安装logstash(跟es版本一致)# 下载wget https://repo.huaweicloud.com/l
- 前言9月份,开始开发微信小程序,也曾调研过wepy/mpvue,考虑到后期跨端的需求,最终选择使用了uni-app,本文主要介绍如何使用un
- 本文实例讲述了Laravel框架用户登陆身份验证实现方法。分享给大家供大家参考,具体如下:laravel中检测用户是否登录,有以下的代码:i
- 本文实例讲述了Python使用crontab模块设置和清除定时任务操作。分享给大家供大家参考,具体如下:centos7下安装Python的p