《突破自我:2023年度总结与展望》

文章目录

    • 引言:
    • 回顾过去一年的亮点:
    • 面对的挑战及解决方案:
      • JSBridge原理
        • 原理介绍
        • 实现流程
          • 实现思路
          • 第一步:设计出一个Native与JS交互的全局桥梁对象
          • 第二步: JS如何调用native
          • 第三步:Native如何得知api被调用
          • 第四步:分析url-参数和回调格式
          • 第五步:Native调用JS
        • 完整的流程图
          • 原生主动调用H5方法:
          • H5主动调用原生方法:
    • 学到的教训:
    • 技能和知识的提升:
    • 感悟和总结:
    • 鼓励交流:

引言:

在过去的一年里,我经历了许多挑战和喜悦,从中学到了许多宝贵的经验,通过这篇征文,我希望能够分享我的成长历程,同时也期待读者在新的一年里有更好的收获和突破

回顾过去一年的亮点:

在2023年,成功的领导了开发小团队完成了一项重要的新项目开发,实现从0到1。同时,在各个项目迭代中,担任主要负责人,梳理需求,编写技术文档,高效完成项目的同时,也提高自身的梳理逻辑以及理解能力。
使用组件库开发模式,实现项目模块解耦。

面对的挑战及解决方案:

尽管在项目中遇到了原生与前端使用JSBridge多方案交互兼容的问题,但通过个人思考优化方案,最终输出兼容多套JSBridge注入方法的方式,我们最终解决了该问题。

JSBridge原理

原理介绍

JSBridge是Native代码与JS代码的通信桥梁,目前的一种统一方案是:H5触发url scheme -> Native捕获url scheme -> 原生分析、执行 -> 原生调用h5。如下图:
在这里插入图片描述

实现流程
实现思路
  1. 设计Native与JS交互的全局桥梁
  2. JS如何调用Native
  3. Native如何得知api被调用
  4. 分析url-参数和回调格式
  5. Native调用JS
第一步:设计出一个Native与JS交互的全局桥梁对象

JS和Native之间的通信需要一个H5全局对象JSBridge来实现,该对象有如下特点:

  • 该对象名为JSBridge,是h5页面中的全局对象window的一个属性
  • 该对象有如下方法:
    • registerHandler(String,Function) :H5调用,注册本地JS方法,注册后Native可通过JSBridge调用。调用后会将方法注册到本地变量messageHandlers 中
    • callHandler(String,JSON,Function) :H5调用,调用原生开放的api,调用后实际上还是本地通过url scheme触发。调用时会将回调id存放到本地变量responseCallbacks中
    • _handleMessageFromObjc(JSON): Native调用,原生调用H5页面注册的方法,或者通知H5页面执行回调方法
第二步: JS如何调用native

在第一步中,我们定义好了全局桥对象,所以前端是通过它的callHandler方法来调用原生的,在前端页面,执行callHandler时,会判断是否有回调函数

  • 如果有,则对应生成一个回调函数id,保存在一个回调函数集合中
  • 然后将消息通过_doSend()方法添加到一个消息数组sendMessageQueue中,然后通过设置messageIframe.src

注意:正常来说是可以通过window.location.href达到发起网络请求的效果的,但是有一个很严重的问题,就是如果我们连续多次修改window.location.href的值,在Native层只能接收到最后一次请求,前面的请求都会被忽略掉。所以JS端发起网络请求的时候,需要使用iframe,这样就可以避免这个问题。

第三步:Native如何得知api被调用

在上一步中,我们已经成功在h5页面中出发messageIframe.src,设置这个会触发Webview的代理回调方法:
webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
原生通过拦截url为约定的url,执行原生的核心代码

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

在第三步中,Native已经接收到了JS调用的方法,然后通过执行WebViewJavascriptBridge._fetchQueue()方法获取第二步中的sendMessageQueue的json数据,解析该json数据获取方法名、参数以及回调函数等,原生本地执行对应的api功能方法逻辑,方法执行完毕,再根据该方法的回调函数id和回调内容,组装成一个json格式的参数,回调给H5,参考第五步

第五步:Native调用JS

原生组装好回调给h5的数据,通过调用WebViewJavascriptBridge._handleMessageFromObjC('\(messsageJson)')方法,传递给H5,到此就是JS调用原生的方法的整个流程了

所以整个的流程可以简约为:
H5调用Native -> 将所有参数存入本地数组 -> 触发一个固定的url scheme -> 原生捕获scheme -> 原生通过JSBridge主动获取参数 -> 进行分析

完整的流程图
原生主动调用H5方法:

在这里插入图片描述

H5主动调用原生方法:

在这里插入图片描述

学到的教训:

这一年,关于模块解耦,组件开发,学到了如何灵活处理代码耦合的方式,关于模块中编写代码应严格避免硬编码的存在,不要存在侥幸偷懒的心理

技能和知识的提升:

通过探索主导【JSBridge原理解读】培训,我成功的掌握了JSBridge底层的原理逻辑,深入了解移动端与Web前端的交互原理。
通过参与【KMM跨平台项目分享】培训,成功的掌握了KMM跨平台开发模式,可统一实现移动端的逻辑开发。

感悟和总结:

回顾过去一年的点滴,我深感人生的宝贵,每一次挑战都是一次成长的机会。在新的一年里,我愿与读者共同努力,迈向新的高度,突破自我。

鼓励交流:

我鼓励大家分享你们过去一年的故事,也欢迎提出对我的征文的看法和建议,期待在评论区和大家一起交流探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/307555.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抽烟识别摄像机

抽烟识别摄像机是一种利用计算机视觉和人工智能技术的设备,能够实时监测和识别吸烟行为。该摄像机通过分析人体姿态和动作,识别出可能的吸烟行为,并及时发出警告或报警。这种摄像机可以广泛应用于公共场所、办公场所、学校和医疗机构等地方&a…

【竞技宝jjb.lol】LOL:ale分析新版本 战士只剩锐雯能玩

北京时间2024年1月10日,随着新年的来临,英雄联盟赛事也开启了全新的篇章,如今距离春季赛开启的时间已经越来越近了。为了让选手结束休赛期后恢复到正常的竞技水平,LPL在前不久刚刚进行了德玛西亚杯的比赛,最终BLG决赛横扫宿敌JDG拿下冠军。而新赛季官方也会推出新版本,那么职业…

[C#]使用winform部署PP-MattingV2人像分割onnx模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleSeg 【算法介绍】 PP-MattingV2是一种先进的图像和视频抠图算法,由百度公司基于PaddlePaddle深度学习框架开发。它旨在提供更精准和高效的图像分割功能,特别是在处理图像中的细微部分&#xf…

window mysql5.7 搭建主从同步环境

window 搭建mysql5.7数据库 主从同步 主节点 配置文件my3308.cnf [mysql] # 设置mysql客户端默认字符集 default-character-setutf8mb4[mysqld] server-id8 #server-uuidbc701be9-ac71-11ee-9e35-b06ebf511956 log-binD:\mysql_5.7.19\mysql-5.7.19-winx64\mysql-bin binlog-…

Docker实战10|实现volum数据卷

上一篇文章中,仔细讲解了Docker是如何改变当前的root文件系统以及mount等操作。 本文继续讲解Docker是如何实现Volum数据卷的。 实现Volume数据卷 获取代码 git clone https://gitee.com/mjreams/docker.git 上一小节介绍了如何使用AUFS包装busybox&#xff0c…

腾讯云最新优惠活动入口整理汇总

随着云计算技术的快速发展,腾讯云作为国内领先的云服务提供商,一直致力于为用户提供高效、稳定、安全的云服务。为了回馈广大用户的支持,腾讯云经常推出各种优惠活动。本文将对腾讯云最新的优惠活动入口进行整理和汇总,帮助用户更…

计算机图形学理论(6):光线追踪

本系列根据国外一个图形小哥的讲解为本,整合互联网的一些资料,结合自己的一些理解。 什么是光线追踪 该方法是通过跟踪穿过图像平面中每个像素的光路来生成图像。 在现实世界中,光从光源出发,然后到达我们的眼睛。然而&#xff…

面相圆润是有福气的象征

在中国传统文化中,面相是一个非常重要的概念。相信大家肯定听说过“相由心生”这个成语吧,这就是告诉我们,一个人的面貌其实是可以反映出他内心的状态和气质,也可以反映其性格、健康状况和运势等。而一个圆润的面相,则…

骑砍战团MOD开发(37)-module_skin.py皮肤系统

一.脸谱代码 与地形代码类似,骑砍引擎将人物头部模型采用脸谱代码制作,以实现不同脸谱的动态拼接以及捏脸等功能。 在人物捏脸界面CtrlE可编辑脸谱代码,可配置肤色,发型,年龄等相关参数.在module_troops.py可实现不同兵种脸谱. #第12 13个参数进行脸谱参数配置 # Each troop …

关于PhpStorm的安装激活与汉化

访问官网下载PhpStorm https://www.jetbrains.com/phpstorm/download/#sectionwindows 点击download 下载好后,双击exe安装程序 点击下一步 选择安装位置 前两个肯定需要勾选: 创建桌面快捷方式;创建关联php; 根据以往经验&am…

阿里云国际服务器设置安全防护程序

阿里云云服务器(ECS)提供弹性、安全、高性能、高性价比的虚拟云服务器,满足您的所有需求。立即在这里免费注册! 常见 Web 应用程序 请勿对 Web 服务控制台(如 WDCP、TOMCAT、Apache、Nginx、Jekins、PHPMyAdmin、Web…

基于SpringBoot的精品在线试题库系统(系统+数据库+文档)

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目 希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅一、绪论 1. 研究背景 现在大家…

Java中内存模型

参数传递图解与结论 通过上面的两段程序可以得出如下结论:根据内存去解释,局部变量随方法栈的弹出而消失; 当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际…

模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案

文/朱季谦 熬夜写完,尚有不足,但仍在努力学习与总结中,而您的点赞与关注,是对我最大的鼓励! 在一些本地化项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时&…

第二证券:证监会紧急声明!加密货币大笔爆仓

当地时刻1月9日,美股三大指数涨跌纷歧。道指跌157.85点,跌幅为0.42%,报37525.16点;纳指涨13.94点,涨幅为0.09%,报14857.71点;标普500指数跌7.04点,跌幅为0.15%,报4756.50…

蓝凌EIS智慧协同平台 ShowUserInfo.aspx sql注入漏洞

漏洞描述: 蓝凌EIS智慧协同平台是一个简单、高效的工作方式专为成长型企业打造的沟通、协同、社交的移动办公平台,覆盖OA、沟通、客户、人事、知识等管理需求,集合了非常丰富的模块,满足组织企业在知识、项目管理系统建设等需求的…

三维猴打印PCB外壳预留板壳间距

3D文件下单那里有一个“3D模型设计规范”,里面详细讲了设计时要考虑打印的参数细节。如果有其他的设计规范不了解的也可以进去查看,里面写的很详细。 这里是打印PCB外壳预留板壳间距相关说明: 设计模型为装配体,请务必满足装配最…

IoT 物联网 MQTT 协议 5.0 版本新特性

MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门为设备资源有限和低带宽、高延迟的不稳定网络环境的物联网场景应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于智能硬件、智慧城市、智慧农业、智慧医疗、新零…

基于ssm的在线视频网站开发论文

摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…

LED电子屏组装常见故障及解决办法大全

在LED电子屏的组装过程中,可能会遇到各种故障。以下是一些常见问题及其解决方法: 1. 加载不上可能的原因及解决办法: A. 确保控制系统硬件正确上电(5V)。 B. 检查并确认用于连接控制器的串口线为直通线。 C. 检查串口…
最新文章