android js桥接,一种JavaScript和原生APP之间数据交互方法与流程
本发明涉及通信技术领域,具体的说是一种JavaScript和原生APP之间数据交互方法。
背景技术:
在开发移动应用时,会用到webview控件(浏览器控件)进行加载网页展示进行交互,会出现javascript调用native code(原生功能)或者native code调用javascript的情况。通常做法是利用原生API进行操作。
在传统的移动设备APP中,大多需要对每个系统进行适配,此种开发方式成本高、周期长,Android、iOS以及Windows Phone都需要单独开发;在代码中频繁判断手机型号调用不通的API,代码冗余难维护。
技术实现要素:
本发明针对目前技术发展的需求和不足之处,提供一种JavaScript和原生APP之间数据交互方法。
本发明的一种JavaScript和原生APP之间数据交互方法,解决上述技术问题采用的技术方案如下:
一种JavaScript和原生APP之间数据交互方法,利用引入Android系统下原生APP的Webview组件、IOS系统下UIWebView组件进行原生APP加载Html网页,来实现JavaScript与原生APP两者之间的数据交互,从而使用原生功能。
实现JavaScript与原生APP两者之间的数据交互,其具体操作包括:
在业务层调用JavaScript API封装层提供的API函数;
JavaScript API封装层通过交互桥接层提供的统一原生交互接口,与原生API封装层交互;
原生API封装层,使用原生代码对移动端硬件的接口函数进行封装;
利用封装的接口函数请求原生功能的数据。
JavaScript API封装层提供的API函数为:
cmApi.barcode.scan(‘mainModule.getScanQRcodeCallback’)。
统一原生交互接口为:
利用封装的接口函数请求原生功能的数据,该请求操作包括同步请求和异步请求两种请求方法;
同步请求的方法可以将处理数据完成后的结果直接返回给业务层;
异步请求的方法可以将处理数据完成后的结果返回给统一的回调函数,再由回调函数返回给业务层。
回调函数的格式为:
NSString*callback=[[@”cmApi.router.loadContent(‘”
stringByAppendingString:userInfo[@”custom_content”][@”funcPath”]]
stringByAppendingString:@“’)”];
[webView stringByEvaluatingJavaScriptFromString:callback];
通过上述回调函数将处理数据完成后的结果返回给业务层。
引入Webview组件后,配置Webview组件,进行网页页面加载,随后,在JavaScript设置一个NativeBridge,原生APP注入一个JSBridge,NativeBridge和JSBridge按照数据约定来进行双向通信和分发逻辑。
在JavaScript设置NativeBridge时,需要在NativeBridge接口中约定传递三个参数:字符串类型的原生实现类、字符串类型的实现方法、json类型的传递参数。
原生APP注入一个JSBridge时,需要在JSBridge接口中约定传递两个参数:字符串类型的回调函数、json类型的返回参数。
本发明的一种JavaScript和原生APP之间数据交互方法,与现有技术相比具有的有益效果是:
本发明利用引入Android系统下原生APP的Webview组件、IOS系统下UIWebView组件进行原生APP加载Html网页,来实现JavaScript与原生APP两者之间的数据交互,从而使用原生功能,以便于跨平台使用,节省开发费用的同时还缩短了开发周期。
具体实施方式
为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下获得的所有实施例,都在本发明的保护范围之内。
本实施例提供一种JavaScript和原生APP之间数据交互方法,利用引入Android系统下原生APP的Webview组件、IOS系统下UIWebView组件进行原生APP加载Html网页,来实现JavaScript与原生APP两者之间的数据交互,从而使用原生功能。
实现JavaScript与原生APP两者之间的数据交互,其具体操作包括:
在业务层调用JavaScript API封装层提供的API函数;
JavaScript API封装层通过交互桥接层提供的统一原生交互接口,与原生API封装层交互;
原生API封装层,使用原生代码对移动端硬件的接口函数进行封装;
利用封装的接口函数请求原生功能的数据。
JavaScript API封装层提供的API函数为:
cmApi.barcode.scan(‘mainModule.getScanQRcodeCallback’)。
统一原生交互接口为:
利用封装的接口函数请求原生功能的数据,该请求操作包括同步请求和异步请求两种请求方法;
同步请求的方法可以将处理数据完成后的结果直接返回给业务层;
异步请求的方法可以将处理数据完成后的结果返回给统一的回调函数,再由回调函数返回给业务层。
回调函数的格式为:
NSString*callback=[[@”cmApi.router.loadContent(‘”
stringByAppendingString:userInfo[@”custom_content”][@”funcPath”]]
stringByAppendingString:@“’)”];
[webView stringByEvaluatingJavaScriptFromString:callback];
通过上述回调函数将处理数据完成后的结果返回给业务层。
引入Webview组件后,配置Webview组件,进行网页页面加载,随后,在JavaScript设置一个NativeBridge,原生APP注入一个JSBridge,NativeBridge和JSBridge按照数据约定来进行双向通信和分发逻辑。
在JavaScript设置NativeBridge时,需要在NativeBridge接口中约定传递三个参数:字符串类型的原生实现类、字符串类型的实现方法、json类型的传递参数。
原生APP注入一个JSBridge时,需要在JSBridge接口中约定传递两个参数:字符串类型的回调函数、json类型的返回参数。
基于Android系统:原生APP启动时,将NativeBridge接口初始化并进行注入:
通过注解的方式在原生APP启动时,维护实现类名称与实现类路径的关联关系,用于调用时通过java的反射机制调用实现类中的指定方法:
基于IOS:使用JavaScriptCore库,将JavaScript传入的回调函数在objective-c或者swift端持有,并回去回调这个回调函数。
JSExportAs是用来将objective-c的方法映射为JavaScript的函数:
JavaScript可以通过webBridge.login来进行调用原生端开放的API:
android js桥接,一种JavaScript和原生APP之间数据交互方法与流程相关推荐
- js中几种对数值取整数和小数部分的方法
js中几种对数值取整数和小数部分的方法 取整 (1)parseInt 用法:parseInt(num) 这是最常见的一种取整方式,但是其实parseInt并不是为了取整而设计的 注: parseInt ...
- Android零基础入门第83节:Activity间数据传递方法汇总
2019独角兽企业重金招聘Python工程师标准>>> 在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间 ...
- JavaScript实现模板生成大量数据的方法(附代码)
本篇文章给大家带来的内容是关于JavaScript实现模板生成大量数据的方法(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 有时需要根据模板生成大量数据,这个代码工具简直就 ...
- 一种单独适配于NER的数据增强方法:DAGA
链接:http://www.elecfans.com/d/1468784.html 本文首先介绍传统的数据增强在NER任务中的表现,然后介绍一种单独适配于NER的数据增强方法,这种方法生成的数据更具丰 ...
- hbase集群 数据写入_一种构建HBase集群全文索引方法,数据读取方法以及数据写入方法与流程...
本发明涉及HBase集群领域,尤其涉及一种构建HBase集群全文索引方法,数据读取方法以及数据写入方法. 背景技术: 随着云计算技术的不断发展,云计算技术不断落地成为支撑各行业信息技术发展的重要支柱. ...
- 201912一种改进动物音频分类的数据增强方法
Data augmentation approaches for improving animal audio classification 标题:一种改进动物音频分类的数据增强方法 作者: Lori ...
- java对接物联网api对接_一种对接物联网云平台的信息交互方法以及中间件系统与流程...
本发明涉及物联网技术领域,特别是一种对接物联网云平台的信息交互方法以及中间件系统. 背景技术: 物联网是继计算机.互联网和移动通信之后的又一次信息产业的革命性发展,在互联网和移动互联网高速发展的时代, ...
- 介绍一种在MATLAB中获取股市数据的方法
介绍一种在MATLAB中获取股市数据的方法: >>clear >>c=yahoo 系统会返回 c = url: 'http://finance.yahoo.com' ...
- android流程点击开机键熄屏,一种基于android系统的灭屏状态下指纹解锁加速亮屏方法与流程...
本发明涉及android系统解锁显示方法,尤其涉及一种基于android系统的灭屏状态下指纹解锁加速亮屏方法. 背景技术: 目前,随着指纹技术越来越普及,很多android系统设备都带有指纹外设,特别 ...
- arcgis android gif,一种基于动态地图符号的移动GIS可视化方法与流程
本发明具体涉及一种基于动态地图符号的移动GIS可视化方法动态地图符号的技术领域 背景技术: 随着移动设备的高度集成化和处理器的快速发展,终端设备的计算和处理能力不断增强,移动GIS的应用领域越来越广泛 ...
最新文章
- localStorage和cookie的跨域解决方案
- 【每日一包0029】merge-descriptors
- DataGridView中的rows.Count比实际行数多1的原因以及解决办法
- linux系统服务详解 用于Linux系统服务优化
- java 静态方法_新手学Java,哪些知识点可以优先掌握?
- 玩游戏学微积分!探索理工锻炼的游戏化应用, 腾讯发布新游戏《微积历险记》...
- 自学嵌入式能找到工作吗_如何找到理想的嵌入式软件工作
- 程序员如何认识更多异性_28岁女生国庆和年薪50万程序员相亲,看到对方工作状态后:后悔了......
- Hibernate架构
- MFC中使用自定义消息 .
- 列表的修改,复制,遍历,嵌套和查询
- 调试安装php源码,Xdebug的安装与配置,帮助调试PHP程序
- python学习===复制list
- Genymotion安装那些事
- 英特尔it服务器芯片,intel服务器芯片组驱动程序
- 移动热修复Sophix之初体验
- U-Mail邮件网关智能DNS技术,解决海外邮件接收问题
- 替换修改windows xp字体,为windows 7微软雅黑
- matlab mat转bmp,mat格式转换
- 同态加密中无符号数之间比较大小
热门文章
- 中移杭研 | 面向互联网应用的实时业务风控系统
- 【VRP】基于matlab蚁群算法求解多配送中心的车辆调度问题【含Matlab源码 1098期】
- torch.nn.parallel.DistributedDataParallel使用中卡在第一个epoch的原因之一
- html用js发post请求,使用js拼接表单发送post请求示例
- python中不包不包括_Python文件部分(不包括数据)
- 显示器色域检测软件_摄影师:手机看图的甲方爸爸值得我换专业摄影显示器吗?...
- mysql双主日志_MySQL双主双从配置开启二进制日志
- grafana 批量添加图表
- 开源跨平台计算机视觉库OpenCV 4.0正式发布
- 三星获得加州自动驾驶测试许可,与Google苹果正面刚