FireflyJSBridge使用文档
介绍
移动端对动态化的需求越来越大,开发者经常需要在app中嵌入一些网页,然后会在web和native之间进行交互,如传递数据,调用函数,而连接web与native需要一个桥梁,FireflyJSBridge就是提供了bridge的具体实现方案,来满足开发者的大部分需求。
特性
- 轻量且强大、安全且健壮
- 同时支持同步调用和异步调用
- 支持以类的方式集中统一管理API
- 支持API命名空间
集成
1.将FireflyJSBridge.framework和依赖的其他库一起导入工程中;详细参见接入iOS
2.在xcode->build phases->link binary with libraries中加入系统的framework
3.在需要使用的文件中,导入头文件
#import <FireflyJSBridge/FireflyJSBridge.h>
使用
初始化容器
FireflyJSBridge.framework中包括基于UIWebView和WKWebView的两种容器,使用方式相同
初始化FireflyJSUIWebViewController容器
#import <FireflyJSBridge/FireflyJSBridge.h> FireflyJSUIWebViewController *jsvc = [[FireflyJSUIWebViewController alloc] init];
注册命名空间
注册命名空间和响应对象,命名空间和响应对象一一对应,FireflyJSBridge更具命名空间来确定实现方法的具体对象,例如下面注册的命名空间为miniapp,响应对象为FireflyMiniappAbiFactory的实例对象jsobj,命名空间和响应对象一一对应。
FireflyMiniappAbiFactory *jsobj = [[FireflyMiniappAbiFactory alloc] init]; //命名空间miniapp [jsvc addJavascriptObject:jsobj nameSpace:@"miniapp"];
native与web交互
当集成了jssdk的web页面,在调用方法时,需要增加命名空间的前缀,FireflyJSBridge会根据命名空间,将需要响应的方法派发到响应对象,完成前端到native的调用,响应对象完成后将结果信息以同步或者异步的方式回调给web页面,完成一次web端和native段的通信。
例如:前端js 调用:miniapp.getSystemInfo()
时,sdk会调用到注册miniapp命名空间的实例对象jsobj中的方法中
- (void)getSystemInfo:(FireflyJSCallNativeArg *)arg completionHandler:(FireflyJSCallback)completionHandler { NSDictionary * dict = getSystemInfo(); completionHandler([dict ff_toJSONString],YES); }
jsobj实现getSystemInfo()
请求,完成之后以异步的方式回调给前端。
同步调用和异步调用
FireflyJSBridge中回调给前端请求时有同步和异步方式,具体的方式确定需要开发过程中前端和后端协商,异步方式的方法名称后边回追加completionHandler:(FireflyJSCallback)completionHandler
参数。
例如前端调用miniapp.getSystemInfo()
,
同步方法需要实现
- (NSString *)getSystemInfoSync:(FireflyJSCallNativeArg *) arg
,
异步方法需要实现
- (void)getSystemInfo:(FireflyJSCallNativeArg *)arg completionHandler:(FireflyJSCallback)completionHandler
,
同步回调需要方法直接返回结果,异步回调的方式需要使用传入的completionHandler
来调用结果回调。
//同步方式获取系统信息 - (NSString *)getSystemInfoSync:(FireflyJSCallNativeArg *) arg { NSDictionary * dict = getSystemInfo(); return [dict ff_toJSONString]; } //异步方式获取系统信息 - (void)getSystemInfo:(FireflyJSCallNativeArg *)arg completionHandler:(FireflyJSCallback)completionHandler { NSDictionary * dict = getSystemInfo(); completionHandler([dict ff_toJSONString],YES); }
还没有评论,来说两句吧...