当前位置:主页 > 技术方案 >

Webview统一指向Android和iOs中的网页加载控件

发布时间:2021-02-04 10:29   浏览次数:次   作者:admin
以字母开头:
这篇文章不涉及任何代码,只谈概念层面,结合自己在实际开发过程中的各种经验,来评述一下这几种跨平台技术。
交叉平台技术的起源:
常规纯本地开发已无法满足不断增长的业务需求。具体表现在以下两个方面。
一是对动态内容的需求增加。在需求改变时,纯粹的本地应用需要通过版本升级来更新内容,但是应用上架、审核是需要一个循环的,这个循环对于高速变化的互联网时代来说是难以接受的,因此,对应用动态更新(在应用内容尚未发布的情况下)的需求已经迫在眉睫。
业务需求快速变化,开发成本也随之增加。因为本地开发通常是Android、iOS两个系统的维护。
在开发团队进行版本迭代时,无论是人力成本还是测试成本都会增加。在这个意义上,跨平台是“老板乐”的技术。
概括起来,纯本地开发主要面临着动态和开发成本两大问题,而针对这两大问题,提出了一些跨平台动态框架。
跨平台技术的介绍。
对于本地开发所面临的问题,人们一直在努力寻找好的解决方案,但直到今天,仍有许多跨平台的框架存在(注意,本书中提到的“跨平台”,如果没有特别的说明,即特指Android和iOS两个平台),根据其原理,主要可以分为以下三类。
1)H5(HTML5)+原生(Cordova,Tonic,google)。Javascript开发+本地渲染(ReactNative,Wex,Snapchat)。三是自绘U+原作(QT移动,Flutter)。
下一步,我们将逐一了解这三种框架的原理和利弊。
1.12Hybrid技术简介
H5+原生混合开发
这种框架的基本原理是通过H5实现APP需要动态变化的部分内容,通过本地网页加载控件Webview(Android)或WKWebview(iOS)加载(以后如果没有特别说明,本书将使用Webview统一指向Android和iOs中的网页加载控件)。所以H5部分是可以的。
任何时候都不需要更新,动态的需求就会得到满足;同时,因为H5代码只需进行一次开发,就可以在Android和OS平台上同时正常运行,这也可以减少开发成本,也就是说,H5部分。
特性越多,开发成本越低。如果一个应用的大部分功能都是通过H5来实现的,那么我们将H5+原生开发模式称为混合模式开发的APP,我们将它称为混合应用或HybridAPP。
当前混合开发框架的典型代表是Cordova、lonic和微信小程序,值得注意的是,目前在Webview中呈现的微信小程序值得注意。不是本地渲染,但是将来它可能会被采用。
综合发展技术要点。
如前所述,本机开发可以访问跨平台的所有功能,而在混合开发中,则运行H5代码。
在WebVicw中,Webview实际上是一个浏览器器内核,它的脚本仍然运行在同一个权限下。
受沙盒限制,因此对大部分系统能力都没有访问权限,比如无法访问文件系统,蓝牙无法使用等等,因此,对于H5无法实现的功能,都需要原生来实现。
混搭框架通常在原生代码中预实现一些API,这些API用于访问系统功能,然后将其暴露给Webview以便被Javascript调用,这样,Webview就成了Javascript和原生AP之间通信的桥梁,主要负责Javascript和原生之间的消息传送,而消息传送必须遵循一种标准的协议,该协议规定了消息的格式和含义,我们将依赖于Webview的工具,即WebviewJavascriptBridge,它是混搭开发框架的核心。
跨平台技术,我使用的是:
埃利克特龙
“重置”。
塔罗
科多瓦。
快速应用
弗卢特(刚学)
...
排行被移除后,除了Flutter没有用于商业项目。
电子城的核心:
就是将Node.js的运行环境与谷歌浏览器内核打包在一起,Electron才能将Node.js与H5技术融合在一起,又因为它是基于C++写的,所以可以跨平台使用。windows操作系统,Linux操作系统。
工具类软件是最复杂的,比如vscode、word等,它们极其复杂,又因为addon可以调用,各种脚本插件,本地第三方插件等等,这种技术简直就是黑科技,到现在我还不敢说熟悉它。但APPStore已经无法在线运行Electron应用,并且常常挂起打包签名服务器。
特别说明:Electron开发的东西就是软件,是一款安装在计算机上的软件!
GitHub可以提供您需要的Demo内容:
http://github.com/JinJieTan。
开发Electron需要有一个C++人员,专门负责编写插件、一个后端出生的生命操作sqlite数据库(数据库升级虽然可以兼容旧版本,但复杂的应用程序设计不好数据库就完蛋了),一个全栈工程师开发一个前、后端都懂且熟悉调用操作系统插件,以便能够hold得住复杂应用程序。假如你说这是一种浪费,那我觉得你没开发过复杂的软件,一款好的软件(客户端),要考虑到程序反编译(保护)、奔溃守护进程等异常收集,用户自动升级(差量全量),本地数据库加密,通信,激活唤醒…很多,但大部分前端都在做后台管理系统,这也是个悲剧…采访制造火箭。
比如之前我做过微信和QQ里面的一些插件,都是用来处理项目的,到现在已经打开了新世界,总之,Electron很考验技术,是提升伪全栈工程师最快的途径。
研究建议指数:五颗星。
重复统计。
将APP技术从RN转移到了本地,首先是外国公司,在某种程度上,使用RN可以获得比国内更多的优势,获得更多的支持。正如你使用Taro一样,你可以在论坛上找到它的负责人,提供所需要的支持,并且最终得到真正的支持(这一点确实存在,如果你想了解它可以帮助你联系,我也建议你周围的人使用Taro)
现在回到主题:
瑞恩死掉了吗?
杰奎里没有死,它会死吗?绝对没有!基于以下原则,RN的生态系统非常强大,它所开发的,也是真正的本地应用:
用React-native文件编写的代码,在内存中生成虚拟DOM对象(实际上是JS对象),然后通过javaScriptCore(IOS自带,安卓没有,所以RN打包后安卓的软件包比苹果大)映射到原生控件树。许多jsBridge是在javaScriptCore上实现的。
比如:
iOS代码发送通知://需要包含的头文件#import#import#import:self.bridge.eventDispatchersendAppEventWithName:@"EventNotification"body:@{@"name":@"nnnnnn"}];RN代码接收通知://需要组件NativeAppEventEmittervarlistener=NativeAppEventEmitter.addListener('EventNotification',//监听的通知名称(reminder)=>console.log(