我是靠谱客的博主 传统睫毛,最近开发中收集的这篇文章主要介绍Hybrid 框架介绍,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述



Hybrid 交互设计
Native调用前端页面的JS方法,或者前端页面通过JS调用Native提供的接口,两者交互的桥梁皆Webview:
① NativeUI组件,header组件、消息类组件
② 通讯录、系统、设备信息读取接口
③ H5与Native的互相跳转,比如H5如何跳到一个Native页面,H5如何新开Webview做动画跳到另一个H5页面

资源访问机制
Native首先需要考虑如何访问H5资源,做到既能以file的方式访问Native内部资源,又能使用url的方式访问线上资源;需要提供前端资源增量替换机制,以摆脱APP迭代发版问题,避免用户升级APP。这里就会涉及到静态资源在APP中的存放策略,更新策略的设计,复杂的话还会涉及到服务器端的支持。
账号信息设计
账号系统是重要并且无法避免的,Native需要设计良好安全的身份验证机制,保证这块对业务开发者足够透明,打通账户信息。
Hybrid开发调试
功能设计完并不是结束,Native与前端需要商量出一套可开发调试的模型,不然很多业务开发的工作将难以继续,这个很多文章已经接受过了,本文不赘述。
至于Native还会关注的一些通讯设计、并发设计、异常处理、日志监控以及 安全模块 因为不是我涉及的领域便不予关注了(事实上是想关注不得其门),而前端要做的事情就是封装Native提供的各种能力,整体架构是这样的:

遇到的几个问题
  1. shouldStartLoadWithRequest网页即将加载拦截url变化 
          解析出需要的参数
       function      ---> 需要触发的事件名
  args           ---> 上面方法需传入的参数
  callBackId   ---> 执行方法后的回调ID,会作为回传参数的一部分
  统一处理方法:
  handleEvent ---> 根据function判断需要触发的事件

2. 方法注入对象
func webViewDidFinishLoad(webView: UIWebView) {
self.context = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as? JSContext
self.context.setObject(unsafeBitCast(##需注入的方法##, AnyObject.self), forKeyedSubscript: ##注入方法对应名称##)
self.myWebView.stringByEvaluatingJavaScriptFromString("Hybrid.ready();")
 }

一般都在webViewDidFinishLoad中获取context并注入对象,但在didCreateJavaScriptContext方法中,拿到JSContext注入对象,能解决加载过程中注入对象

//注入对象
@protocol JSObjcDelegate <JSExport>
- (void)callCamera;
- (void)share:(NSString *)shareString;
@end

js调用oc获取数据之后,oc调用js需要在当前线程操作
// 这里通过此方法 在当前线程操作才不会造成卡死的现象 [self performSelector:@selector(callQWSJSWithArgument:) onThread:webThread withObject:@[callback, @(result), newToken, property] waitUntilDone:NO];


3. 请求回调方式
  在之前的项目中使用JSBridge,通过给web端注入session的方式来传递用户信息,web端拿着session自己去请求信息。现采用web端下达指令让Native去请求然后将数据回传的方式

4. 页面跳转
web页面跳转,pop和push动画,侧拉返回手势

5. 加载本地资源
加载本地资源,通过NSURLProtocol拦截请求,并处理加载逻辑
1.canInitWithRequest//判断请求是否为需要拦截的请求
2. startLoading//对需求拦截的请求进行处理
// 先在DocumentDirectory中查找,如果不存在再在NSBundle.mainBundle()中查找, 因为NSBundle.mainBundle()是应用打包时就打入app中的资源,而DocumentDirectory是后来下载的资源,所以优先使用Document路径下的资源


iOS7 之后苹果推出了 JavaScriptCore 这个框架, Android 那边和 iOS 相对统一

最后

以上就是传统睫毛为你收集整理的Hybrid 框架介绍的全部内容,希望文章能够帮你解决Hybrid 框架介绍所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部