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:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,为了实现在Web页面中与iOS和Android原生应用程序之间交互,可以使用JSBridge。JSBridge是一个桥接工具,可以将JavaScript原生应用程序之间的通信连接起来。 在iOS中,可以使用JavaScriptCore框架和WKWebView来实现JSBridge。在Android中,可以使用WebView和JavaScriptInterface来实现JSBridge。 具体来说,需要在原生应用程序中创建一个JavaScriptInterface类,该类可以实现JavaScript原生代码之间的通信。然后在Web页面中,可以通过JavaScript调用原生应用程序中的方法。 例如,在iOS中,可以使用以下代码创建一个JavaScriptInterface类: ``` @objc class JSInterface: NSObject { weak var webView: WKWebView? init(webView: WKWebView) { self.webView = webView super.init() } @objc func showToast(_ message: String) { let alertController = UIAlertController(title: "Toast", message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default, handler: nil) alertController.addAction(okAction) self.webView?.viewController?.present(alertController, animated: true, completion: nil) } } ``` 然后在Web页面中,可以通过以下代码调用原生应用程序中的showToast方法: ``` window.webkit.messageHandlers.jsInterface.postMessage({action: 'showToast', message: 'Hello world!'}); ``` 在Android中,可以使用以下代码创建一个JavaScriptInterface类: ``` public class JSInterface { private Context context; public JSInterface(Context context) { this.context = context; } @JavascriptInterface public void showToast(String message) { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } } ``` 然后在Web页面中,可以通过以下代码调用原生应用程序中的showToast方法: ``` window.jsInterface.showToast('Hello world!'); ``` 通过这种方式,可以实现JavaScript与iOS和Android原生应用程序之间交互

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值